Browse Source

[hxb] declare module statics earlier (#11678)

* [hxb] also set module statics for display requests

* [tests] add test for hover on module level field reference

* [tests] .target.hx is not needed for simple cases
Rudy Ges 1 year ago
parent
commit
2d9ed26553

+ 3 - 1
src/compiler/hxb/hxbReader.ml

@@ -1459,7 +1459,6 @@ class hxb_reader
 		in
 		loop CfrMember (read_uleb128 ch) c.cl_ordered_fields;
 		loop CfrStatic (read_uleb128 ch) c.cl_ordered_statics;
-		(match c.cl_kind with KModuleFields md -> md.m_statics <- Some c; | _ -> ());
 
 	method read_enum_fields (e : tenum) =
 		type_type_parameters <- Array.of_list e.e_params;
@@ -1516,6 +1515,9 @@ class hxb_reader
 		c.cl_implements <- self#read_list read_relation;
 		c.cl_dynamic <- self#read_option (fun () -> self#read_type_instance);
 		c.cl_array_access <- self#read_option (fun () -> self#read_type_instance);
+		(match c.cl_kind with
+			| KModuleFields md -> md.m_statics <- Some c;
+			| _ -> ());
 
 	method read_abstract (a : tabstract) =
 		self#read_common_module_type (Obj.magic a);

+ 29 - 0
tests/server/src/cases/display/issues/Issue11678.hx

@@ -0,0 +1,29 @@
+package cases.display.issues;
+
+import haxe.Json;
+import haxe.display.Display;
+
+typedef HoverResponse = {
+	?error:{code:Int, message:String},
+	?result:HoverResult
+}
+
+class Issue11678 extends DisplayTestCase {
+	function test(_) {
+		vfs.putContent("ModuleFields.hx", getTemplate("issues/Issue11678/ModuleFields.hx"));
+		var content = getTemplate("issues/Issue11678/Main.hx");
+		var transform = Marker.extractMarkers(content);
+		vfs.putContent("Main.hx", transform.source);
+
+		var args = ["-main", "Main"];
+		runHaxe(["--no-output"].concat(args));
+		runHaxeJson(args, DisplayMethods.Hover, {
+			file: new FsPath("Main.hx"),
+			offset: transform.markers[1]
+		});
+
+		var response:HoverResponse = Json.parse(lastResult.stderr);
+		Assert.equals(null, response.error);
+		Assert.equals("foo", response.result.result.item.args.field.name);
+	}
+}

+ 5 - 0
tests/server/test/templates/issues/Issue11678/Main.hx

@@ -0,0 +1,5 @@
+import ModuleFields.foo;
+
+function main() {
+	{-1-}foo{-2-}();
+}

+ 1 - 0
tests/server/test/templates/issues/Issue11678/ModuleFields.hx

@@ -0,0 +1 @@
+function foo() {}