Skip to content

Commit c9e82bc

Browse files
authored
fix(completion): add parameters to contract completion inside initOf (#258)
Fixes #254
1 parent 5fb12a8 commit c9e82bc

File tree

3 files changed

+34
-1
lines changed

3 files changed

+34
-1
lines changed

server/src/completion/ReferenceCompletionProcessor.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,8 @@ export class ReferenceCompletionProcessor implements ScopeProcessor {
141141
data: additionalData,
142142
})
143143
} else if (node instanceof Contract) {
144-
const suffix = this.ctx.isInitOfName ? "()" : ""
144+
const parameters = node.initFunction()?.parametersPresentation() ?? "()"
145+
const suffix = this.ctx.isInitOfName ? parameters : ""
145146
const initFunction = node.initFunction()
146147
const needParens = this.ctx.isInitOfName && !this.ctx.beforeParen
147148
const hasParameters = initFunction !== null && initFunction.parameters().length > 0

server/src/e2e/suite/testcases/completion/initOf.test

+26
Original file line numberDiff line numberDiff line change
@@ -54,3 +54,29 @@ fun test() {
5454
------------------------------------------------------------------------
5555
3 Bar()
5656
3 Foo()
57+
58+
========================================================================
59+
initOf contract name completion with parens and init function
60+
========================================================================
61+
contract Foo {
62+
init(age: Int, value: String) {}
63+
}
64+
65+
contract Bar {
66+
init(age: Int) {}
67+
}
68+
69+
contract Baz {
70+
init() {}
71+
}
72+
73+
trait Some {}
74+
trait Some2 {}
75+
76+
fun test() {
77+
initOf <caret>()
78+
}
79+
------------------------------------------------------------------------
80+
3 Bar(age: Int)
81+
3 Baz()
82+
3 Foo(age: Int, value: String)

server/src/psi/Decls.ts

+6
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,12 @@ export class InitFunction extends Node {
162162
return `init${parametersNode.text}`
163163
}
164164

165+
public parametersPresentation(): string {
166+
const parametersNode = this.node.childForFieldName("parameters")
167+
if (!parametersNode) return "()"
168+
return parametersNode.text
169+
}
170+
165171
public endParen(): SyntaxNode | null {
166172
const parametersNode = this.node.childForFieldName("parameters")
167173
if (!parametersNode) return null

0 commit comments

Comments
 (0)