Browse Source

[tests] Add test for #5709 (#11934)

* [tests] Add test for #5709

* [tests] Json RPC tests vs hover requests for type documentation

* [tests] Better typing for extractDoc
Rudy Ges 7 tháng trước cách đây
mục cha
commit
11dd355867

+ 16 - 10
tests/display/src/RpcDisplayTestContext.hx

@@ -87,10 +87,7 @@ class RpcDisplayTestContext extends BaseDisplayTestContext {
 	}
 
 	public function metadataDoc(pos:Position):String {
-		return extractMetadata(callDisplay(DisplayMethods.Hover, {
-			file: new FsPath(source.path),
-			offset: pos,
-		}).result);
+		return doc(pos);
 	}
 
 	public function diagnostics():Array<Diagnostic<Any>> {
@@ -155,11 +152,20 @@ class RpcDisplayTestContext extends BaseDisplayTestContext {
 		return '$path:${start.line + 1}: $pos';
 	}
 
-	function extractDoc(result:HoverDisplayItemOccurence<Dynamic>) {
-		return StringTools.trim(result.item.args.field.doc);
-	}
-
-	function extractMetadata(result:HoverDisplayItemOccurence<Dynamic>) {
-		return result.item.args.doc;
+	function extractDoc<T>(result:HoverDisplayItemOccurence<T>) {
+		return switch result.item.kind {
+			case ClassField | EnumAbstractField:
+				StringTools.trim(result.item.args.field.doc);
+			case EnumField:
+				StringTools.trim(result.item.args.field.doc);
+			case Type:
+				StringTools.trim(result.item.args.doc);
+			case Metadata:
+				result.item.args.doc;
+			case Define:
+				result.item.args.doc;
+			case _:
+				null;
+		};
 	}
 }

+ 28 - 0
tests/display/src/cases/Issue5709.hx

@@ -0,0 +1,28 @@
+package cases;
+
+class Issue5709 extends DisplayTestCase {
+	/**
+		class Main {
+			public static function main() {
+				var foo:F{-1-}oo = new F{-2-}oo();
+			}
+		}
+
+		/** Foo doc **\/
+		class Foo {
+			public function new() {}
+		}
+
+		/** IBaz doc **\/
+		interface IBaz {}
+
+		class Bar extends F{-3-}oo {}
+		class Baz implements I{-5-}Baz {}
+
+		typedef Foos = Array<F{-4-}oo>;
+	**/
+	function test() {
+		for (i in 1...5) eq("Foo doc", doc(pos(i)));
+		eq("IBaz doc", doc(pos(5)));
+	}
+}