diff --git a/d2js/d2wasm/functions.go b/d2js/d2wasm/functions.go index 10706fb750..25250880f0 100644 --- a/d2js/d2wasm/functions.go +++ b/d2js/d2wasm/functions.go @@ -159,3 +159,37 @@ func Decode(args []js.Value) (interface{}, error) { func GetVersion(args []js.Value) (interface{}, error) { return version.Version, nil } + +func GetCompletions(args []js.Value) (interface{}, error) { + if len(args) < 3 { + return nil, &WASMError{Message: "missing required arguments", Code: 400} + } + + text := args[0].String() + line := args[1].Int() + column := args[2].Int() + + completions, err := d2lsp.GetCompletionItems(text, line, column) + if err != nil { + return nil, &WASMError{Message: err.Error(), Code: 500} + } + + // Convert to map for JSON serialization + items := make([]map[string]interface{}, len(completions)) + for i, completion := range completions { + items[i] = map[string]interface{}{ + "label": completion.Label, + "kind": int(completion.Kind), + "detail": completion.Detail, + "insertText": completion.InsertText, + } + } + + return CompletionResponse{ + Items: items, + }, nil +} + +type CompletionResponse struct { + Items []map[string]interface{} `json:"items"` +} diff --git a/d2js/js.go b/d2js/js.go index c1461b5df8..50280194c6 100644 --- a/d2js/js.go +++ b/d2js/js.go @@ -11,6 +11,7 @@ import ( func main() { api := d2wasm.NewD2API() + api.Register("getCompletions", d2wasm.GetCompletions) api.Register("getParentID", d2wasm.GetParentID) api.Register("getObjOrder", d2wasm.GetObjOrder) api.Register("getRefRanges", d2wasm.GetRefRanges)