From fcfac88fd53369192779621020759df115f258f3 Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Sat, 15 Feb 2025 01:37:02 +0400 Subject: [PATCH 1/2] feat(inlay-hints): don't show inlay hints in some cases Fixes #154 --- .../e2e/suite/testcases/inlayHints/calls.test | 2 +- .../suite/testcases/inlayHints/contract.test | 32 +++---------------- .../suite/testcases/inlayHints/initOf.test | 23 +++++++++++++ .../testcases/inlayHints/parameters.test | 18 +++++++++++ .../suite/testcases/inlayHints/variables.test | 19 +++++++++++ server/src/inlays/collect.ts | 9 ++++++ 6 files changed, 75 insertions(+), 28 deletions(-) create mode 100644 server/src/e2e/suite/testcases/inlayHints/parameters.test diff --git a/server/src/e2e/suite/testcases/inlayHints/calls.test b/server/src/e2e/suite/testcases/inlayHints/calls.test index fe708275..84099551 100644 --- a/server/src/e2e/suite/testcases/inlayHints/calls.test +++ b/server/src/e2e/suite/testcases/inlayHints/calls.test @@ -40,7 +40,7 @@ fun foo(bar: Int) {} struct Bar { bar: Int/* as int257 */ } fun test() { - let instance/* : Bar */ = Bar { bar: 10 }; + let instance = Bar { bar: 10 }; foo(instance.bar); // no hint here } diff --git a/server/src/e2e/suite/testcases/inlayHints/contract.test b/server/src/e2e/suite/testcases/inlayHints/contract.test index 1589edda..097a5558 100644 --- a/server/src/e2e/suite/testcases/inlayHints/contract.test +++ b/server/src/e2e/suite/testcases/inlayHints/contract.test @@ -111,43 +111,21 @@ contract Foo { Show parameter name hints in function calls ======================================================================== contract Foo { - - internal fun test1(x: Int) { - return x; - } - - external fun test2(x: Int) { - return x; - } - - get fun test3(x: Int) { - return x; + get fun test1(value: Int) { + return value; } init() { const a = self.test1(42); - const b = self.test2(42); - const c = self.test3(42); } } ------------------------------------------------------------------------ contract Foo { - - internal fun test1(x: Int) { - return x; - } - - external fun test2(x: Int) { - return x; - } - - get/* (0x1091c) */ fun test3(x: Int) { - return x; + get/* (0x1c89d) */ fun test1(value: Int) { + return value; } init() { - const a = self.test1(/* x: */42); - const b = self.test2(/* x: */42); - const c = self.test3(/* x: */42); + const a = self.test1(/* value: */42); } } diff --git a/server/src/e2e/suite/testcases/inlayHints/initOf.test b/server/src/e2e/suite/testcases/inlayHints/initOf.test index 86de5e1e..7cb9ac43 100644 --- a/server/src/e2e/suite/testcases/inlayHints/initOf.test +++ b/server/src/e2e/suite/testcases/inlayHints/initOf.test @@ -66,3 +66,26 @@ contract Counter { initOf Counter(/* some: */10, /* other: */"hello"); } } + +======================================================================== +initOf with one parameter single letter parameter +======================================================================== +primitive Int; + +contract Counter { + init(s: Int) {} + + fun test() { + initOf Counter(10); + } +} +------------------------------------------------------------------------ +primitive Int; + +contract Counter { + init(s: Int) {} + + fun test() { + initOf Counter(10); + } +} diff --git a/server/src/e2e/suite/testcases/inlayHints/parameters.test b/server/src/e2e/suite/testcases/inlayHints/parameters.test new file mode 100644 index 00000000..06407f86 --- /dev/null +++ b/server/src/e2e/suite/testcases/inlayHints/parameters.test @@ -0,0 +1,18 @@ +======================================================================== +Single letter parameter +======================================================================== +primitive Int; + +fun foo(a: int, b: Int) {} + +fun test() { + foo(1, 2); +} +------------------------------------------------------------------------ +primitive Int; + +fun foo(a: int, b: Int) {} + +fun test() { + foo(1, 2); +} diff --git a/server/src/e2e/suite/testcases/inlayHints/variables.test b/server/src/e2e/suite/testcases/inlayHints/variables.test index ca401302..ca9123d8 100644 --- a/server/src/e2e/suite/testcases/inlayHints/variables.test +++ b/server/src/e2e/suite/testcases/inlayHints/variables.test @@ -31,3 +31,22 @@ fun foo() { let a: map = emptyMap(); foreach (key/* : Int */, value/* : String */ in a) {} } + +======================================================================== +Local variable initialized with struct init +======================================================================== +primitive Int; + +struct Foo { value: Int } + +fun foo() { + let a = Foo { value: 10 }; +} +------------------------------------------------------------------------ +primitive Int; + +struct Foo { value: Int/* as int257 */ } + +fun foo() { + let a = Foo { value: 10 }; +} diff --git a/server/src/inlays/collect.ts b/server/src/inlays/collect.ts index 237ecbd0..0163b380 100644 --- a/server/src/inlays/collect.ts +++ b/server/src/inlays/collect.ts @@ -21,6 +21,11 @@ function processParameterHints( const arg = args[i] const paramName = param.name() + if (paramName.length === 1) { + // don't show hints for single letter parameters + continue + } + if (arg.text === paramName || arg.text.endsWith(`.${paramName}`)) { // no need to add hint for `takeFoo(foo)` or `takeFoo(val.foo)` continue @@ -93,6 +98,10 @@ export function collect( const expr = decl.value() if (!expr) return true + // don't show hint for: + // let params = SomeParams{} + if (expr.node.type === "instance_expression") return true + const name = decl.nameIdentifier() if (!name) return true From f2fc2219856a6dfc38237d4c2a4d4fc6d1173dad Mon Sep 17 00:00:00 2001 From: i582 <51853996+i582@users.noreply.github.com> Date: Sat, 15 Feb 2025 01:37:49 +0400 Subject: [PATCH 2/2] fix --- server/src/e2e/suite/testcases/inlayHints/initOf.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/e2e/suite/testcases/inlayHints/initOf.test b/server/src/e2e/suite/testcases/inlayHints/initOf.test index 7cb9ac43..4fba57bf 100644 --- a/server/src/e2e/suite/testcases/inlayHints/initOf.test +++ b/server/src/e2e/suite/testcases/inlayHints/initOf.test @@ -68,7 +68,7 @@ contract Counter { } ======================================================================== -initOf with one parameter single letter parameter +initOf with single letter parameter ======================================================================== primitive Int;