diff --git a/handlers/aliases/handlers/go_to_definition.go b/handlers/aliases/handlers/go_to_definition.go index 31d43e7..b4fd44f 100644 --- a/handlers/aliases/handlers/go_to_definition.go +++ b/handlers/aliases/handlers/go_to_definition.go @@ -12,7 +12,7 @@ import ( func GetDefinitionLocationForValue( i indexes.AliasesIndexes, value ast.AliasValueInterface, - params *protocol.DefinitionParams, + documentURI string, ) []protocol.Location { switch value.(type) { case ast.AliasValueUser: @@ -22,7 +22,7 @@ func GetDefinitionLocationForValue( if entry, found := i.Keys[indexes.NormalizeKey(userValue.Value)]; found { return []protocol.Location{ { - URI: params.TextDocument.URI, + URI: documentURI, Range: entry.Key.Location.ToLSPRange(), }, } diff --git a/handlers/aliases/handlers/go_to_definition_test.go b/handlers/aliases/handlers/go_to_definition_test.go new file mode 100644 index 0000000..1961ee7 --- /dev/null +++ b/handlers/aliases/handlers/go_to_definition_test.go @@ -0,0 +1,54 @@ +package handlers + +import ( + "config-lsp/handlers/aliases/ast" + "config-lsp/handlers/aliases/indexes" + "config-lsp/utils" + "testing" +) + +func TestGoToDefinitionSimpleExample( + t *testing.T, +) { + input := utils.Dedent(` +alice: root +bob: root +steve: alice@example.com, bob +david: alice +`) + parser := ast.NewAliasesParser() + errors := parser.Parse(input) + + if len(errors) > 0 { + t.Fatalf("Unexpected errors: %v", errors) + } + + i, errors := indexes.CreateIndexes(parser) + + if len(errors) > 0 { + t.Fatalf("Expected no errors, but got: %v", errors) + } + + rawEntry, _ := parser.Aliases.Get(uint32(3)) + entry := rawEntry.(*ast.AliasEntry) + rawValue := entry.Values.Values[0] + value := rawValue.(ast.AliasValueUser) + + locations := GetDefinitionLocationForValue( + i, + value, + "file:///etc/aliases", + ) + + if !(len(locations) == 1) { + t.Errorf("Expected 1 location, but got %v", len(locations)) + } + + if !(locations[0].URI == "file:///etc/aliases") { + t.Errorf("Unexpected location: %v", locations[0]) + } + + if !(locations[0].Range.Start.Line == 0 && locations[0].Range.Start.Character == 0 && locations[0].Range.End.Line == 0 && locations[0].Range.End.Character == 5) { + t.Errorf("Unexpected location: %v", locations[0]) + } +} diff --git a/handlers/aliases/handlers/rename_test.go b/handlers/aliases/handlers/rename_test.go index 601a37a..eb6606a 100644 --- a/handlers/aliases/handlers/rename_test.go +++ b/handlers/aliases/handlers/rename_test.go @@ -7,7 +7,7 @@ import ( "testing" ) -func TestComplexExample( +func TestRenameSimpleExample( t *testing.T, ) { input := utils.Dedent(` diff --git a/handlers/aliases/lsp/text-document-definition.go b/handlers/aliases/lsp/text-document-definition.go index 67454ae..4798e16 100644 --- a/handlers/aliases/lsp/text-document-definition.go +++ b/handlers/aliases/lsp/text-document-definition.go @@ -32,7 +32,7 @@ func TextDocumentDefinition(context *glsp.Context, params *protocol.DefinitionPa return handlers.GetDefinitionLocationForValue( *d.Indexes, *rawValue, - params, + params.TextDocument.URI, ), nil }