Browse Source

[display] check local function locals for display

closes #9463
Simon Krajewski 5 years ago
parent
commit
89bbb911b1
2 changed files with 21 additions and 0 deletions
  1. 2 0
      src/typing/typer.ml
  2. 19 0
      tests/server/src/cases/display/issues/Issue9463.hx

+ 2 - 0
src/typing/typer.ml

@@ -2085,6 +2085,8 @@ and type_local_function ctx kind f with_type p =
 		Typeload.generate_args_meta ctx.com None (fun m -> v.v_meta <- m :: v.v_meta) f.f_args;
 		let open LocalUsage in
 		if params <> [] || inline then v.v_extra <- Some (params,if inline then Some e else None);
+		if ctx.in_display && DisplayPosition.display_position#enclosed_in v.v_pos then
+			DisplayEmitter.display_variable ctx v v.v_pos;
 		let rec loop = function
 			| LocalUsage.Block f | LocalUsage.Loop f | LocalUsage.Function f -> f loop
 			| LocalUsage.Use v2 | LocalUsage.Assign v2 when v == v2 -> raise Exit

+ 19 - 0
tests/server/src/cases/display/issues/Issue9463.hx

@@ -0,0 +1,19 @@
+package cases.display.issues;
+
+class Issue9463 extends DisplayTestCase {
+	/**
+		class Main {
+			static function main() {
+				function {-1-}na{-2-}me{-3-}() {
+					trace("foo");
+				}
+			}
+		}
+	**/
+	function test(_) {
+		runHaxeJson([], DisplayMethods.Hover, {file: file, offset: offset(2)});
+		var result = parseHover();
+		Assert.same(range(1, 3), result.result.range);
+		Assert.pass();
+	}
+}