Skip to content

Commit 81722ce

Browse files
committed
d2lsp: autocomplete
1 parent d8b2c3b commit 81722ce

File tree

5 files changed

+930
-1
lines changed

5 files changed

+930
-1
lines changed

d2ast/keywords.go

-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ var ReservedKeywords map[string]struct{}
88
// Non Style/Holder keywords.
99
var SimpleReservedKeywords = map[string]struct{}{
1010
"label": {},
11-
"desc": {},
1211
"shape": {},
1312
"icon": {},
1413
"constraint": {},

d2js/d2wasm/functions.go

+34
Original file line numberDiff line numberDiff line change
@@ -159,3 +159,37 @@ func Decode(args []js.Value) (interface{}, error) {
159159
func GetVersion(args []js.Value) (interface{}, error) {
160160
return version.Version, nil
161161
}
162+
163+
func GetCompletions(args []js.Value) (interface{}, error) {
164+
if len(args) < 3 {
165+
return nil, &WASMError{Message: "missing required arguments", Code: 400}
166+
}
167+
168+
text := args[0].String()
169+
line := args[1].Int()
170+
column := args[2].Int()
171+
172+
completions, err := d2lsp.GetCompletionItems(text, line, column)
173+
if err != nil {
174+
return nil, &WASMError{Message: err.Error(), Code: 500}
175+
}
176+
177+
// Convert to map for JSON serialization
178+
items := make([]map[string]interface{}, len(completions))
179+
for i, completion := range completions {
180+
items[i] = map[string]interface{}{
181+
"label": completion.Label,
182+
"kind": int(completion.Kind),
183+
"detail": completion.Detail,
184+
"insertText": completion.InsertText,
185+
}
186+
}
187+
188+
return CompletionResponse{
189+
Items: items,
190+
}, nil
191+
}
192+
193+
type CompletionResponse struct {
194+
Items []map[string]interface{} `json:"items"`
195+
}

d2js/js.go

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
func main() {
1212
api := d2wasm.NewD2API()
1313

14+
api.Register("getCompletions", d2wasm.GetCompletions)
1415
api.Register("getParentID", d2wasm.GetParentID)
1516
api.Register("getObjOrder", d2wasm.GetObjOrder)
1617
api.Register("getRefRanges", d2wasm.GetRefRanges)

0 commit comments

Comments
 (0)