mirror of
https://github.com/Myzel394/config-lsp.git
synced 2025-06-18 23:15:26 +02:00
feat: Add aliases lsp handlers
This commit is contained in:
parent
4ea6f9f160
commit
4c2422c3da
@ -29,7 +29,7 @@ func analyzeValuesAreValid(
|
||||
if entry.Separator == nil {
|
||||
errors = append(errors, common.LSPError{
|
||||
Range: entry.Location,
|
||||
Err: ers.New("The separator is required"),
|
||||
Err: ers.New("A ':' is required as a separator"),
|
||||
})
|
||||
|
||||
continue
|
||||
|
@ -26,7 +26,7 @@ func CreateIndexes(parser ast.AliasesParser) (AliasesIndexes, []common.LSPError)
|
||||
|
||||
if existingEntry, found := indexes.Keys[normalizedAlias]; found {
|
||||
errors = append(errors, common.LSPError{
|
||||
Range: entry.Location,
|
||||
Range: entry.Key.Location,
|
||||
Err: shared.DuplicateKeyEntry{
|
||||
AlreadyFoundAt: existingEntry.Location.Start.Line,
|
||||
Key: entry.Key.Value,
|
||||
|
14
handlers/aliases/lsp/text-document-code-action.go
Normal file
14
handlers/aliases/lsp/text-document-code-action.go
Normal file
@ -0,0 +1,14 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func TextDocumentCodeAction(context *glsp.Context, params *protocol.CodeActionParams) ([]protocol.CodeAction, error) {
|
||||
// document := hosts.DocumentParserMap[params.TextDocument.URI]
|
||||
//
|
||||
// actions := make([]protocol.CodeAction, 0, 1)
|
||||
|
||||
return nil, nil
|
||||
}
|
12
handlers/aliases/lsp/text-document-completion.go
Normal file
12
handlers/aliases/lsp/text-document-completion.go
Normal file
@ -0,0 +1,12 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func TextDocumentCompletion(context *glsp.Context, params *protocol.CompletionParams) (any, error) {
|
||||
// p := documentParserMap[params.TextDocument.URI]
|
||||
|
||||
return nil, nil
|
||||
}
|
42
handlers/aliases/lsp/text-document-did-change.go
Normal file
42
handlers/aliases/lsp/text-document-did-change.go
Normal file
@ -0,0 +1,42 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"config-lsp/common"
|
||||
"config-lsp/handlers/aliases"
|
||||
"config-lsp/handlers/aliases/analyzer"
|
||||
"config-lsp/utils"
|
||||
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func TextDocumentDidChange(
|
||||
context *glsp.Context,
|
||||
params *protocol.DidChangeTextDocumentParams,
|
||||
) error {
|
||||
content := params.ContentChanges[0].(protocol.TextDocumentContentChangeEventWhole).Text
|
||||
common.ClearDiagnostics(context, params.TextDocument.URI)
|
||||
|
||||
document := aliases.DocumentParserMap[params.TextDocument.URI]
|
||||
document.Parser.Clear()
|
||||
|
||||
diagnostics := make([]protocol.Diagnostic, 0)
|
||||
errors := document.Parser.Parse(content)
|
||||
|
||||
if len(errors) > 0 {
|
||||
diagnostics = append(diagnostics, utils.Map(
|
||||
errors,
|
||||
func(err common.LSPError) protocol.Diagnostic {
|
||||
return err.ToDiagnostic()
|
||||
},
|
||||
)...)
|
||||
}
|
||||
|
||||
diagnostics = append(diagnostics, analyzer.Analyze(document)...)
|
||||
|
||||
if len(diagnostics) > 0 {
|
||||
common.SendDiagnostics(context, params.TextDocument.URI, diagnostics)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
13
handlers/aliases/lsp/text-document-did-close.go
Normal file
13
handlers/aliases/lsp/text-document-did-close.go
Normal file
@ -0,0 +1,13 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"config-lsp/handlers/hosts"
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func TextDocumentDidClose(context *glsp.Context, params *protocol.DidCloseTextDocumentParams) error {
|
||||
delete(hosts.DocumentParserMap, params.TextDocument.URI)
|
||||
|
||||
return nil
|
||||
}
|
45
handlers/aliases/lsp/text-document-did-open.go
Normal file
45
handlers/aliases/lsp/text-document-did-open.go
Normal file
@ -0,0 +1,45 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"config-lsp/common"
|
||||
"config-lsp/handlers/aliases"
|
||||
"config-lsp/handlers/aliases/analyzer"
|
||||
"config-lsp/handlers/aliases/ast"
|
||||
"config-lsp/utils"
|
||||
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func TextDocumentDidOpen(
|
||||
context *glsp.Context,
|
||||
params *protocol.DidOpenTextDocumentParams,
|
||||
) error {
|
||||
common.ClearDiagnostics(context, params.TextDocument.URI)
|
||||
|
||||
parser := ast.NewAliasesParser()
|
||||
document := aliases.AliasesDocument{
|
||||
Parser: &parser,
|
||||
}
|
||||
aliases.DocumentParserMap[params.TextDocument.URI] = &document
|
||||
|
||||
errors := parser.Parse(params.TextDocument.Text)
|
||||
|
||||
diagnostics := utils.Map(
|
||||
errors,
|
||||
func(err common.LSPError) protocol.Diagnostic {
|
||||
return err.ToDiagnostic()
|
||||
},
|
||||
)
|
||||
|
||||
diagnostics = append(
|
||||
diagnostics,
|
||||
analyzer.Analyze(&document)...,
|
||||
)
|
||||
|
||||
if len(diagnostics) > 0 {
|
||||
common.SendDiagnostics(context, params.TextDocument.URI, diagnostics)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
86
handlers/aliases/lsp/text-document-hover.go
Normal file
86
handlers/aliases/lsp/text-document-hover.go
Normal file
@ -0,0 +1,86 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"config-lsp/handlers/hosts"
|
||||
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func TextDocumentHover(
|
||||
context *glsp.Context,
|
||||
params *protocol.HoverParams,
|
||||
) (*protocol.Hover, error) {
|
||||
document := hosts.DocumentParserMap[params.TextDocument.URI]
|
||||
|
||||
line := params.Position.Line
|
||||
// character := params.Position.Character
|
||||
|
||||
if _, found := document.Parser.CommentLines[line]; found {
|
||||
// Comment
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// entry, found := document.Parser.Tree.Entries[line]
|
||||
//
|
||||
// if !found {
|
||||
// // Empty line
|
||||
// return nil, nil
|
||||
// }
|
||||
//
|
||||
// target := handlers.GetHoverTargetInEntry(*entry, character)
|
||||
//
|
||||
// var hostname *ast.HostsHostname
|
||||
//
|
||||
// switch *target {
|
||||
// case handlers.HoverTargetIPAddress:
|
||||
// relativeCursor := character - entry.IPAddress.Location.Start.Character
|
||||
// hover := fields.IPAddressField.FetchHoverInfo(entry.IPAddress.Value.String(), relativeCursor)
|
||||
//
|
||||
// return &protocol.Hover{
|
||||
// Contents: hover,
|
||||
// }, nil
|
||||
// case handlers.HoverTargetHostname:
|
||||
// hostname = entry.Hostname
|
||||
// case handlers.HoverTargetAlias:
|
||||
// for _, alias := range entry.Aliases {
|
||||
// if alias.Location.Start.Character <= character && character <= alias.Location.End.Character {
|
||||
// hostname = alias
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if hostname != nil {
|
||||
// contents := []string{
|
||||
// "## Hostname",
|
||||
// }
|
||||
// contents = append(
|
||||
// contents,
|
||||
// fields.HostnameField.GetTypeDescription()...,
|
||||
// )
|
||||
// contents = append(
|
||||
// contents,
|
||||
// []string{
|
||||
// "",
|
||||
// }...,
|
||||
// )
|
||||
// contents = append(
|
||||
// contents,
|
||||
// fields.HostnameField.Documentation,
|
||||
// )
|
||||
// contents = append(
|
||||
// contents,
|
||||
// handlers.GetHoverInfoForHostname(*document, *hostname, character)...,
|
||||
// )
|
||||
//
|
||||
// return &protocol.Hover{
|
||||
// Contents: &protocol.MarkupContent{
|
||||
// Kind: protocol.MarkupKindMarkdown,
|
||||
// Value: strings.Join(contents, "\n"),
|
||||
// },
|
||||
// }, nil
|
||||
// }
|
||||
|
||||
return nil, nil
|
||||
}
|
21
handlers/aliases/lsp/workspace-execute-command.go
Normal file
21
handlers/aliases/lsp/workspace-execute-command.go
Normal file
@ -0,0 +1,21 @@
|
||||
package lsp
|
||||
|
||||
import (
|
||||
"github.com/tliron/glsp"
|
||||
protocol "github.com/tliron/glsp/protocol_3_16"
|
||||
)
|
||||
|
||||
func WorkspaceExecuteCommand(context *glsp.Context, params *protocol.ExecuteCommandParams) (*protocol.ApplyWorkspaceEditParams, error) {
|
||||
// _, command, _ := strings.Cut(params.Command, ".")
|
||||
//
|
||||
// switch command {
|
||||
// case string(handlers.CodeActionInlineAliases):
|
||||
// args := handlers.CodeActionInlineAliasesArgsFromArguments(params.Arguments[0].(map[string]any))
|
||||
//
|
||||
// document := hosts.DocumentParserMap[args.URI]
|
||||
//
|
||||
// return args.RunCommand(*document.Parser)
|
||||
// }
|
||||
|
||||
return nil, nil
|
||||
}
|
@ -17,6 +17,7 @@ const (
|
||||
LanguageFstab SupportedLanguage = "fstab"
|
||||
LanguageWireguard SupportedLanguage = "languagewireguard"
|
||||
LanguageHosts SupportedLanguage = "hosts"
|
||||
LanguageAliases SupportedLanguage = "aliases"
|
||||
)
|
||||
|
||||
var AllSupportedLanguages = []string{
|
||||
@ -24,6 +25,7 @@ var AllSupportedLanguages = []string{
|
||||
string(LanguageFstab),
|
||||
string(LanguageWireguard),
|
||||
string(LanguageHosts),
|
||||
string(LanguageAliases),
|
||||
}
|
||||
|
||||
type FatalFileNotReadableError struct {
|
||||
@ -64,6 +66,9 @@ var valueToLanguageMap = map[string]SupportedLanguage{
|
||||
"host": LanguageHosts,
|
||||
"hosts": LanguageHosts,
|
||||
"etc/hosts": LanguageHosts,
|
||||
|
||||
"aliases": LanguageAliases,
|
||||
"etc/aliases": LanguageAliases,
|
||||
}
|
||||
|
||||
var typeOverwriteRegex = regexp.MustCompile(`#\?\s*lsp\.language\s*=\s*(\w+)\s*`)
|
||||
@ -111,6 +116,8 @@ func DetectLanguage(
|
||||
return LanguageFstab, nil
|
||||
case "file:///etc/hosts":
|
||||
return LanguageHosts, nil
|
||||
case "file:///etc/aliases":
|
||||
return LanguageAliases, nil
|
||||
}
|
||||
|
||||
if strings.HasPrefix(uri, "file:///etc/wireguard/") || wireguardPattern.MatchString(uri) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package roothandler
|
||||
|
||||
import (
|
||||
aliases "config-lsp/handlers/aliases/lsp"
|
||||
hosts "config-lsp/handlers/hosts/lsp"
|
||||
wireguard "config-lsp/handlers/wireguard/lsp"
|
||||
|
||||
@ -30,6 +31,8 @@ func TextDocumentCodeAction(context *glsp.Context, params *protocol.CodeActionPa
|
||||
return nil, nil
|
||||
case LanguageWireguard:
|
||||
return wireguard.TextDocumentCodeAction(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentCodeAction(context, params)
|
||||
}
|
||||
|
||||
panic("root-handler/TextDocumentCompletion: unexpected language" + *language)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package roothandler
|
||||
|
||||
import (
|
||||
aliases "config-lsp/handlers/aliases/lsp"
|
||||
"config-lsp/handlers/fstab"
|
||||
hosts "config-lsp/handlers/hosts/lsp"
|
||||
wireguard "config-lsp/handlers/wireguard/lsp"
|
||||
@ -31,6 +32,8 @@ func TextDocumentCompletion(context *glsp.Context, params *protocol.CompletionPa
|
||||
return wireguard.TextDocumentCompletion(context, params)
|
||||
case LanguageHosts:
|
||||
return hosts.TextDocumentCompletion(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentCompletion(context, params)
|
||||
}
|
||||
|
||||
panic("root-handler/TextDocumentCompletion: unexpected language" + *language)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package roothandler
|
||||
|
||||
import (
|
||||
aliases "config-lsp/handlers/aliases/lsp"
|
||||
"config-lsp/handlers/fstab"
|
||||
hosts "config-lsp/handlers/hosts/lsp"
|
||||
wireguard "config-lsp/handlers/wireguard/lsp"
|
||||
@ -45,6 +46,8 @@ func TextDocumentDidChange(context *glsp.Context, params *protocol.DidChangeText
|
||||
return wireguard.TextDocumentDidOpen(context, params)
|
||||
case LanguageHosts:
|
||||
return hosts.TextDocumentDidOpen(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentDidOpen(context, params)
|
||||
}
|
||||
}
|
||||
|
||||
@ -57,6 +60,8 @@ func TextDocumentDidChange(context *glsp.Context, params *protocol.DidChangeText
|
||||
return wireguard.TextDocumentDidChange(context, params)
|
||||
case LanguageHosts:
|
||||
return hosts.TextDocumentDidChange(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentDidChange(context, params)
|
||||
}
|
||||
|
||||
panic("root-handler/TextDocumentDidChange: unexpected language" + *language)
|
||||
|
@ -1,6 +1,7 @@
|
||||
package roothandler
|
||||
|
||||
import (
|
||||
aliases "config-lsp/handlers/aliases/lsp"
|
||||
hosts "config-lsp/handlers/hosts/lsp"
|
||||
wireguard "config-lsp/handlers/wireguard/lsp"
|
||||
|
||||
@ -31,6 +32,8 @@ func TextDocumentDidClose(context *glsp.Context, params *protocol.DidCloseTextDo
|
||||
return wireguard.TextDocumentDidClose(context, params)
|
||||
case LanguageHosts:
|
||||
return hosts.TextDocumentDidClose(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentDidClose(context, params)
|
||||
default:
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,7 @@ package roothandler
|
||||
|
||||
import (
|
||||
"config-lsp/common"
|
||||
aliases "config-lsp/handlers/aliases/lsp"
|
||||
fstab "config-lsp/handlers/fstab"
|
||||
hosts "config-lsp/handlers/hosts/lsp"
|
||||
wireguard "config-lsp/handlers/wireguard/lsp"
|
||||
@ -36,6 +37,8 @@ func TextDocumentDidOpen(context *glsp.Context, params *protocol.DidOpenTextDocu
|
||||
return wireguard.TextDocumentDidOpen(context, params)
|
||||
case LanguageHosts:
|
||||
return hosts.TextDocumentDidOpen(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentDidOpen(context, params)
|
||||
}
|
||||
|
||||
panic(fmt.Sprintf("unexpected roothandler.SupportedLanguage: %#v", language))
|
||||
|
@ -1,6 +1,7 @@
|
||||
package roothandler
|
||||
|
||||
import (
|
||||
aliases "config-lsp/handlers/aliases/lsp"
|
||||
"config-lsp/handlers/fstab"
|
||||
hosts "config-lsp/handlers/hosts/lsp"
|
||||
wireguard "config-lsp/handlers/wireguard/lsp"
|
||||
@ -31,6 +32,8 @@ func TextDocumentHover(context *glsp.Context, params *protocol.HoverParams) (*pr
|
||||
return fstab.TextDocumentHover(context, params)
|
||||
case LanguageWireguard:
|
||||
return wireguard.TextDocumentHover(context, params)
|
||||
case LanguageAliases:
|
||||
return aliases.TextDocumentHover(context, params)
|
||||
}
|
||||
|
||||
panic("root-handler/TextDocumentHover: unexpected language" + *language)
|
||||
|
Loading…
x
Reference in New Issue
Block a user