From 855b1a262f3a769d44765e78f94e566d875b9286 Mon Sep 17 00:00:00 2001 From: Yong He Date: Tue, 29 Jul 2025 07:35:58 -0700 Subject: [Language Server]: Show signature help on generic parameters. (#7913) * Show signature help on generic parameters. * Fix. * Update tests. * slang-test: make vvl error go through stderr. * update slang-rhi * Update slang-rhi --- tests/diagnostics/extension-visibility.slang | 4 +++- tests/diagnostics/generic-type-inference-fail.slang | 3 ++- tests/language-server/generic-signature-1.slang | 15 +++++++++++++++ tests/language-server/generic-signature-2.slang | 15 +++++++++++++++ tests/language-server/generic-signature-3.slang | 14 ++++++++++++++ tests/language-server/generic-signature.slang | 15 +++++++++++++++ tests/language-server/robustness-6.slang | 4 +++- tests/language-server/tuple-completion.slang | 11 +++++++++++ 8 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 tests/language-server/generic-signature-1.slang create mode 100644 tests/language-server/generic-signature-2.slang create mode 100644 tests/language-server/generic-signature-3.slang create mode 100644 tests/language-server/generic-signature.slang create mode 100644 tests/language-server/tuple-completion.slang (limited to 'tests') diff --git a/tests/diagnostics/extension-visibility.slang b/tests/diagnostics/extension-visibility.slang index 029b16b86..9923e678d 100644 --- a/tests/diagnostics/extension-visibility.slang +++ b/tests/diagnostics/extension-visibility.slang @@ -3,7 +3,7 @@ // Confirm that visibility of `extensions` is // correctly scoped via `import`. -//DIAGNOSTIC_TEST:SIMPLE: +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): import extension_visibility_a; @@ -16,3 +16,5 @@ int shouldntWork(MyThing thing) { return helper(thing); } + +// CHECK: could not specialize generic for arguments of type \ No newline at end of file diff --git a/tests/diagnostics/generic-type-inference-fail.slang b/tests/diagnostics/generic-type-inference-fail.slang index 803c7584c..106570587 100644 --- a/tests/diagnostics/generic-type-inference-fail.slang +++ b/tests/diagnostics/generic-type-inference-fail.slang @@ -1,4 +1,4 @@ -//DIAGNOSTIC_TEST:SIMPLE: +//DIAGNOSTIC_TEST:SIMPLE(filecheck=CHECK): interface IAssoc { @@ -63,6 +63,7 @@ int test() var obj = CreateT(2); var obj2 = CreateT_Assoc(1); + // CHECK: could not specialize generic for arguments of type var obj3 = CreateT_Assoc_Inner(1); // ERROR. return obj.GetAssoc().Compute() + obj2.Compute() + obj3.Compute(); diff --git a/tests/language-server/generic-signature-1.slang b/tests/language-server/generic-signature-1.slang new file mode 100644 index 000000000..b7a6d3112 --- /dev/null +++ b/tests/language-server/generic-signature-1.slang @@ -0,0 +1,15 @@ +//TEST:LANG_SERVER(filecheck=CHECK): +struct Parent +{ + static void test(vector v, int m) + {} + static void test(){} +} + +void use() +{ +//SIGNATURE:12,25 + Parent.test(1, 2); +} + +//CHECK:static func Parent.test(vector v, int m) -> void \ No newline at end of file diff --git a/tests/language-server/generic-signature-2.slang b/tests/language-server/generic-signature-2.slang new file mode 100644 index 000000000..2acbf4113 --- /dev/null +++ b/tests/language-server/generic-signature-2.slang @@ -0,0 +1,15 @@ +//TEST:LANG_SERVER(filecheck=CHECK): +struct Parent +{ + static void test(vector v, int m) + {} + static void test(){} +} + +void use() +{ +//SIGNATURE:12,22 + Parent.test< +} + +//CHECK:static func Parent.test -> void \ No newline at end of file diff --git a/tests/language-server/generic-signature-3.slang b/tests/language-server/generic-signature-3.slang new file mode 100644 index 000000000..e379245ea --- /dev/null +++ b/tests/language-server/generic-signature-3.slang @@ -0,0 +1,14 @@ +//TEST:LANG_SERVER(filecheck=CHECK): +struct Parent +{ + static void test(vector v, int m) + {} +} + +void use() +{ +//SIGNATURE:11,22 + Parent.test +} + +//CHECK:static func Parent.test -> void \ No newline at end of file diff --git a/tests/language-server/generic-signature.slang b/tests/language-server/generic-signature.slang new file mode 100644 index 000000000..9e5e67a00 --- /dev/null +++ b/tests/language-server/generic-signature.slang @@ -0,0 +1,15 @@ +//TEST:LANG_SERVER(filecheck=CHECK): +struct Parent +{ + static void test(vector v, int m) + {} + static void test(){} +} + +void use() +{ +//SIGNATURE:12,14 + Parent.test(1, 2); +} + +//CHECK: struct Parent \ No newline at end of file diff --git a/tests/language-server/robustness-6.slang b/tests/language-server/robustness-6.slang index ef5924cf3..9208b7969 100644 --- a/tests/language-server/robustness-6.slang +++ b/tests/language-server/robustness-6.slang @@ -1,4 +1,4 @@ -//TEST:LANG_SERVER: +//TEST:LANG_SERVER(filecheck=CHECK): //HOVER:4,8 float dsqr(T obj, float x) { return no_diff(obj.calc(x)) + x * x; } + +// CHECK: dsqr \ No newline at end of file diff --git a/tests/language-server/tuple-completion.slang b/tests/language-server/tuple-completion.slang new file mode 100644 index 000000000..d4a02a04f --- /dev/null +++ b/tests/language-server/tuple-completion.slang @@ -0,0 +1,11 @@ +//TEST:LANG_SERVER(filecheck=CHECK): +void f() +{ + Tuple v; +//COMPLETE:6,7 + v. +} + +// CHECK: _0 +// CHECK: _1 +// CHECK: equals \ No newline at end of file -- cgit v1.2.3