瀏覽代碼

[display] don't find references if there's no position

closes #7961
closes #9057
Simon Krajewski 5 年之前
父節點
當前提交
4f1e0586a9
共有 2 個文件被更改,包括 27 次插入4 次删除
  1. 12 4
      src/context/display/findReferences.ml
  2. 15 0
      tests/server/src/DisplayTests.hx

+ 12 - 4
src/context/display/findReferences.ml

@@ -178,8 +178,7 @@ let find_possible_references tctx cs =
 	t();
 	()
 
-let find_references tctx com with_definition =
-	let name,pos,kind = Display.ReferencePosition.get () in
+let find_references tctx com with_definition name pos kind =
 	let t = Timer.timer ["display";"references";"collect"] in
 	let symbols,relations = Statistics.collect_statistics tctx (SFPos pos) true in
 	t();
@@ -202,8 +201,12 @@ let find_references tctx com with_definition =
 	Display.ReferencePosition.set ("",null_pos,SKOther);
 	DisplayException.raise_positions usages
 
-let find_implementations tctx com =
+let find_references tctx com with_definition =
 	let name,pos,kind = Display.ReferencePosition.get () in
+	if pos <> null_pos then find_references tctx com with_definition name pos kind
+	else DisplayException.raise_positions []
+
+let find_implementations tctx com name pos kind =
 	let t = Timer.timer ["display";"implementations";"collect"] in
 	let symbols,relations = Statistics.collect_statistics tctx (SFPos pos) false in
 	t();
@@ -223,4 +226,9 @@ let find_implementations tctx com =
 	) usages in
 	t();
 	Display.ReferencePosition.set ("",null_pos,SKOther);
-	DisplayException.raise_positions usages
+	DisplayException.raise_positions usages
+
+let find_implementations tctx com =
+	let name,pos,kind = Display.ReferencePosition.get () in
+	if pos <> null_pos then find_implementations tctx com name pos kind
+	else DisplayException.raise_positions []

+ 15 - 0
tests/server/src/DisplayTests.hx

@@ -318,4 +318,19 @@ typedef Foo = {
 			}
 		});
 	}
+
+	function testIssue9057() {
+		var transform = Marker.extractMarkers("interface Main { var field(never,s{-1-}et):Int; }");
+		vfs.putContent("Main.hx", transform.source);
+		var args = ["Main", "-js", "main.js"];
+
+		function parseGotoDefintion():GotoDefinitionResult {
+			return haxe.Json.parse(lastResult.stderr).result;
+		}
+
+		runHaxeJson(args, DisplayMethods.FindReferences, {file: new FsPath("Main.hx"), offset: transform.markers[1], contents: transform.source});
+		Assert.same([], parseGotoDefintion().result);
+		runHaxeJson(args, DisplayMethods.FindReferences, {file: new FsPath("Main.hx"), offset: transform.markers[1], contents: transform.source});
+		Assert.same([], parseGotoDefintion().result);
+	}
 }