From 15b732e136daaca86066f228070ded35a8341abb Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Thu, 3 Oct 2024 16:28:19 +0200 Subject: [PATCH] feat(ssh_config): Add rename support; Improvements --- .../ssh_config/handlers/completions_tag.go | 5 +- handlers/ssh_config/handlers/rename.go | 42 ++++++++++++++ handlers/ssh_config/indexes/indexes.go | 9 ++- .../ssh_config/indexes/indexes_handlers.go | 39 ++++++++++++- handlers/ssh_config/indexes/indexes_test.go | 24 ++++++-- .../lsp/text-document-code-action.go | 1 - .../lsp/text-document-definition.go | 4 +- .../lsp/text-document-prepare-rename.go | 45 ++++++++++++++ .../ssh_config/lsp/text-document-rename.go | 58 +++++++++++++++++++ root-handler/text-document-prepare-rename.go | 4 +- root-handler/text-document-rename.go | 4 +- 11 files changed, 218 insertions(+), 17 deletions(-) create mode 100644 handlers/ssh_config/handlers/rename.go create mode 100644 handlers/ssh_config/lsp/text-document-prepare-rename.go create mode 100644 handlers/ssh_config/lsp/text-document-rename.go diff --git a/handlers/ssh_config/handlers/completions_tag.go b/handlers/ssh_config/handlers/completions_tag.go index 724dd05..61e922a 100644 --- a/handlers/ssh_config/handlers/completions_tag.go +++ b/handlers/ssh_config/handlers/completions_tag.go @@ -5,6 +5,7 @@ import ( "config-lsp/common/formatting" sshconfig "config-lsp/handlers/ssh_config" "config-lsp/handlers/ssh_config/ast" + "config-lsp/handlers/ssh_config/indexes" "config-lsp/utils" "fmt" @@ -18,9 +19,9 @@ func getTagCompletions( ) ([]protocol.CompletionItem, error) { return utils.MapMapToSlice( d.Indexes.Tags, - func(name string, block *ast.SSHMatchBlock) protocol.CompletionItem { + func(name string, info indexes.SSHIndexTagInfo) protocol.CompletionItem { kind := protocol.CompletionItemKindModule - text := renderMatchBlock(block) + text := renderMatchBlock(info.Block) return protocol.CompletionItem{ Label: name, Kind: &kind, diff --git a/handlers/ssh_config/handlers/rename.go b/handlers/ssh_config/handlers/rename.go new file mode 100644 index 0000000..6813e66 --- /dev/null +++ b/handlers/ssh_config/handlers/rename.go @@ -0,0 +1,42 @@ +package handlers + +import ( + sshconfig "config-lsp/handlers/ssh_config" + "errors" + + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func RenameTag( + params *protocol.RenameParams, + d *sshconfig.SSHDocument, + oldName string, + newName string, +) (*protocol.WorkspaceEdit, error) { + changes := make([]protocol.TextEdit, 0) + + // tag rename + info, found := d.Indexes.Tags[oldName] + if !found { + return nil, errors.New("Tag could not be found") + } + + changes = append(changes, protocol.TextEdit{ + Range: info.EntryValue.ToLSPRange(), + NewText: newName, + }) + + // Rename all occurrences + for _, option := range d.Indexes.TagImports[oldName] { + changes = append(changes, protocol.TextEdit{ + Range: option.OptionValue.ToLSPRange(), + NewText: newName, + }) + } + + return &protocol.WorkspaceEdit{ + Changes: map[protocol.DocumentUri][]protocol.TextEdit{ + params.TextDocument.URI: changes, + }, + }, nil +} diff --git a/handlers/ssh_config/indexes/indexes.go b/handlers/ssh_config/indexes/indexes.go index e75d0e2..9d0bf78 100644 --- a/handlers/ssh_config/indexes/indexes.go +++ b/handlers/ssh_config/indexes/indexes.go @@ -4,6 +4,7 @@ import ( "config-lsp/common" "config-lsp/handlers/ssh_config/ast" "config-lsp/handlers/ssh_config/fields" + matchparser "config-lsp/handlers/ssh_config/match-parser" ) type ValidPath string @@ -35,6 +36,11 @@ type SSHIndexIgnoredUnknowns struct { IgnoredOptions map[fields.NormalizedOptionName]SSHIndexIgnoredUnknownInfo } +type SSHIndexTagInfo struct { + EntryValue *matchparser.MatchValue + Block *ast.SSHMatchBlock +} + type SSHIndexes struct { AllOptionsPerName map[fields.NormalizedOptionName](map[ast.SSHBlock]([]*ast.SSHOption)) @@ -51,5 +57,6 @@ type SSHIndexes struct { // This is a map of to