Skip to content

Commit

Permalink
Collect params to completion items directly
Browse files Browse the repository at this point in the history
  • Loading branch information
kmichaelk committed Sep 13, 2024
1 parent dcc5db0 commit 738068d
Showing 1 changed file with 18 additions and 27 deletions.
45 changes: 18 additions & 27 deletions internal/lsp/completion.go
Original file line number Diff line number Diff line change
Expand Up @@ -768,53 +768,44 @@ func CompletePortTypes(suite *Suite, mname string, sortPref string) []protocol.C
return ret
}

type completionItemData struct {
Name string
Detail string
}

func CollectParamsNames(tgt syntax.Node) []*completionItemData {
var list []*completionItemData
func CollectParams(n syntax.Node) []protocol.CompletionItem {
var list []protocol.CompletionItem

switch tgt := tgt.(type) {
switch n := n.(type) {
case *syntax.FormalPars:
for _, par := range tgt.List {
list = append(list, &completionItemData{Name: par.Name.String(), Detail: syntax.Name(par.Type)})
for _, par := range n.List {
list = append(list, protocol.CompletionItem{Label: par.Name.String(), Detail: syntax.Name(par.Type)})
}
case *syntax.StructTypeDecl:
for _, field := range tgt.Fields {
list = append(list, &completionItemData{Name: field.Name.String(), Detail: syntax.Name(field.Type)})
for _, field := range n.Fields {
list = append(list, protocol.CompletionItem{Label: field.Name.String(), Detail: syntax.Name(field.Type)})
}
}

return list
}

func CompleteParams(tgt syntax.Node, cur int, sortPref string, completeAssign bool) []protocol.CompletionItem {
var list []protocol.CompletionItem

var insertText string
if completeAssign {
insertText = "%s := ${1:}"
} else {
insertText = "%s"
}

items := CollectParamsNames(tgt)
for i := cur; i < len(items); i++ {
item := items[i]
list = append(list, protocol.CompletionItem{
Label: item.Name,
Detail: item.Detail,
Documentation: "",
Kind: protocol.EnumMemberCompletion,
SortText: sortPref + item.Name,
InsertText: fmt.Sprintf(insertText, item.Name),
InsertTextFormat: protocol.SnippetTextFormat,
})
items := CollectParams(tgt)
if len(items) > cur {
items = items[cur:]
}
for i := range items {
items[i].Documentation = ""
items[i].Kind = protocol.EnumMemberCompletion
items[i].SortText = sortPref + items[i].Label
items[i].InsertText = fmt.Sprintf(insertText, items[i].Label)
items[i].InsertTextFormat = protocol.SnippetTextFormat
}

return list
return items
}

func CompleteArgNames(suite *Suite, mname string, n syntax.Expr, sortPref string) []protocol.CompletionItem {
Expand Down

0 comments on commit 738068d

Please sign in to comment.