diff --git a/nvim-lsp-debug.lua b/nvim-lsp-debug.lua deleted file mode 100644 index 20bc0b2..0000000 --- a/nvim-lsp-debug.lua +++ /dev/null @@ -1,5 +0,0 @@ -vim.lsp.start { - name = "config-lsp", - cmd = { "./result/bin/config-lsp" }, - root_dir = vim.fn.getcwd(), -}; diff --git a/server/doc-values/base-value.go b/server/doc-values/base-value.go index 01cfa7b..c5bba59 100644 --- a/server/doc-values/base-value.go +++ b/server/doc-values/base-value.go @@ -31,7 +31,7 @@ func (v *InvalidValue) GetRange(line uint32, characterStart uint32) protocol.Ran }, End: protocol.Position{ Line: line, - Character: characterStart + v.End, + Character: characterStart + v.End + 1, }, } } diff --git a/server/handlers/ssh_config/analyzer/options.go b/server/handlers/ssh_config/analyzer/options.go index e3efbf5..5161592 100644 --- a/server/handlers/ssh_config/analyzer/options.go +++ b/server/handlers/ssh_config/analyzer/options.go @@ -2,7 +2,6 @@ package analyzer import ( "config-lsp/common" - docvalues "config-lsp/doc-values" "config-lsp/handlers/ssh_config/ast" "config-lsp/handlers/ssh_config/fields" "config-lsp/utils" @@ -41,7 +40,7 @@ func checkOption( checkIsUsingDoubleQuotes(ctx, option.Key.Value, option.Key.LocationRange) checkQuotesAreClosed(ctx, option.Key.Value, option.Key.LocationRange) - docOption, found := fields.Options[option.Key.Key] + _, found := fields.Options[option.Key.Key] if !found { ctx.diagnostics = append(ctx.diagnostics, protocol.Diagnostic{ @@ -67,19 +66,6 @@ func checkOption( if option.OptionValue != nil { checkIsUsingDoubleQuotes(ctx, option.OptionValue.Value, option.OptionValue.LocationRange) checkQuotesAreClosed(ctx, option.OptionValue.Value, option.OptionValue.LocationRange) - - invalidValues := docOption.DeprecatedCheckIsValid(option.OptionValue.Value.Value) - - for _, invalidValue := range invalidValues { - err := docvalues.LSPErrorFromInvalidValue(option.Start.Line, *invalidValue) - err.ShiftCharacter(option.OptionValue.Start.Character) - - ctx.diagnostics = append(ctx.diagnostics, protocol.Diagnostic{ - Range: err.Range.ToLSPRange(), - Message: err.Err.Error(), - Severity: &common.SeverityError, - }) - } } if option.Separator == nil || option.Separator.Value.Value == "" { diff --git a/server/handlers/ssh_config/analyzer/values.go b/server/handlers/ssh_config/analyzer/values.go index 052ada3..9cc9da2 100644 --- a/server/handlers/ssh_config/analyzer/values.go +++ b/server/handlers/ssh_config/analyzer/values.go @@ -44,7 +44,7 @@ func analyzeValuesAreValid( errs, func(err *docvalues.InvalidValue) protocol.Diagnostic { return protocol.Diagnostic{ - Range: option.OptionValue.ToLSPRange(), + Range: err.GetRange(option.Start.Line, option.OptionValue.Start.Character), Message: err.Err.Error(), Severity: &common.SeverityError, } diff --git a/server/handlers/ssh_config/lsp/text-document-prepare-rename.go b/server/handlers/ssh_config/lsp/text-document-prepare-rename.go index e800b19..9a5e796 100644 --- a/server/handlers/ssh_config/lsp/text-document-prepare-rename.go +++ b/server/handlers/ssh_config/lsp/text-document-prepare-rename.go @@ -11,6 +11,7 @@ import ( func TextDocumentPrepareRename(context *glsp.Context, params *protocol.PrepareRenameParams) (any, error) { d := sshconfig.DocumentParserMap[params.TextDocument.URI] + index := common.LSPCharacterAsIndexPosition(params.Position.Character) line := params.Position.Line option, block := d.Config.FindOption(line) @@ -20,25 +21,27 @@ func TextDocumentPrepareRename(context *glsp.Context, params *protocol.PrepareRe return nil, nil } - if option.Key.Key == tagOption && option.OptionValue != nil { - return option.OptionValue.ToLSPRange(), nil - } - - if option.Key.Key == matchOption { - matchBlock := block.(*ast.SSHMatchBlock) - entry := matchBlock.MatchValue.GetEntryAtPosition(common.LSPCharacterAsIndexPosition(params.Position.Character)) - - if entry == nil { - return nil, nil + if option.OptionValue != nil && option.OptionValue.Value.Value != "" && option.OptionValue.ContainsPosition(index) { + if option.Key.Key == tagOption { + return option.OptionValue.ToLSPRange(), nil } - value := entry.GetValueAtPosition(common.LSPCharacterAsIndexPosition(params.Position.Character)) + if option.Key.Key == matchOption { + matchBlock := block.(*ast.SSHMatchBlock) + entry := matchBlock.MatchValue.GetEntryAtPosition(common.LSPCharacterAsIndexPosition(params.Position.Character)) - if value == nil { - return nil, nil + if entry == nil { + return nil, nil + } + + value := entry.GetValueAtPosition(common.LSPCharacterAsIndexPosition(params.Position.Character)) + + if value == nil { + return nil, nil + } + + return value.ToLSPRange(), nil } - - return value.ToLSPRange(), nil } return nil, nil diff --git a/server/handlers/ssh_config/lsp/text-document-rename.go b/server/handlers/ssh_config/lsp/text-document-rename.go index 5e6dd9f..54e429c 100644 --- a/server/handlers/ssh_config/lsp/text-document-rename.go +++ b/server/handlers/ssh_config/lsp/text-document-rename.go @@ -22,7 +22,7 @@ func TextDocumentRename(context *glsp.Context, params *protocol.RenameParams) (* option, block := d.Config.FindOption(line) - if option != nil && option.OptionValue != nil && option.OptionValue.Value.Value != "" { + if option != nil && option.OptionValue != nil && option.OptionValue.Value.Value != "" && option.OptionValue.ContainsPosition(index) { newName := nameTemplate.Format(formatting.DefaultFormattingOptions, params.NewName) if option.Key.Key == tagOption {