// lsp_definition — Go to definition of symbol at position. package main import ( "encoding/json" "fmt" "ollie/tools/lsp/internal/lsp" "ollie/tools/lsp/internal/cmdutil" ) func main() { cmdutil.Run("definition", func(result json.RawMessage) { var locations []struct { URI string `json:"uri"` TargetURI string `json:"targetUri"` Range *rang `json:"range"` TargetRange *rang `json:"targetRange"` } if err := json.Unmarshal(result, &locations); err != nil { var single struct { URI string `json:"uri"` TargetURI string `json:"targetUri"` Range *rang `json:"range"` TargetRange *rang `json:"targetRange"` } if err := json.Unmarshal(result, &single); err != nil { fmt.Println("(no definition found)") return } locations = append(locations, single) } for _, loc := range locations { uri := loc.URI if uri == "" { uri = loc.TargetURI } path := lsp.URIToPath(uri) r := loc.Range if r == nil { r = loc.TargetRange } if r == nil { fmt.Println(path) continue } fmt.Printf("%s:%d:%d\n", path, r.Start.Line+1, r.Start.Character+1) } }) } type rang struct { Start position `json:"start"` } type position struct { Line int `json:"line"` Character int `json:"character"` }