From eab2d8ad2970f157f7234e3897ba60c73841bc05 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Wed, 14 Aug 2024 19:52:40 +0200 Subject: [PATCH] feat: Improvements; Add wireguard --- root-handler/handler.go | 1 + root-handler/lsp-utils.go | 11 +++++++++++ root-handler/shared.go | 5 +++++ root-handler/text-document-completion.go | 3 +++ root-handler/text-document-did-change.go | 3 +++ root-handler/text-document-did-close.go | 25 ++++++++++++++++++++++++ root-handler/text-document-did-open.go | 10 +++++++--- utils/common.go | 20 +++++++++++++++++++ 8 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 root-handler/shared.go create mode 100644 root-handler/text-document-did-close.go diff --git a/root-handler/handler.go b/root-handler/handler.go index 49cb882..96ec971 100644 --- a/root-handler/handler.go +++ b/root-handler/handler.go @@ -25,6 +25,7 @@ func SetUpRootHandler() { TextDocumentDidChange: TextDocumentDidChange, TextDocumentCompletion: TextDocumentCompletion, TextDocumentHover: TextDocumentHover, + TextDocumentDidClose: TextDocumentDidClose, } server := server.NewServer(&lspHandler, lsName, false) diff --git a/root-handler/lsp-utils.go b/root-handler/lsp-utils.go index b714340..2074510 100644 --- a/root-handler/lsp-utils.go +++ b/root-handler/lsp-utils.go @@ -15,11 +15,13 @@ type SupportedLanguage string const ( LanguageSSHDConfig SupportedLanguage = "sshd_config" LanguageFstab SupportedLanguage = "fstab" + LanguageWireguard SupportedLanguage = "languagewireguard" ) var AllSupportedLanguages = []string{ string(LanguageSSHDConfig), string(LanguageFstab), + string(LanguageWireguard), } type FatalFileNotReadableError struct { @@ -53,9 +55,14 @@ var valueToLanguageMap = map[string]SupportedLanguage{ "fstab": LanguageFstab, "etc/fstab": LanguageFstab, + + "wireguard": LanguageWireguard, + "wg": LanguageWireguard, + "languagewireguard": LanguageWireguard, } var typeOverwriteRegex = regexp.MustCompile(`^#\?\s*lsp\.language\s*=\s*(\w+)\s*$`) +var wireguardPattern = regexp.MustCompile(`/wg\d+\.conf$`) func DetectLanguage( content string, @@ -94,6 +101,10 @@ func DetectLanguage( return LanguageFstab, nil } + if strings.HasPrefix(uri, "file:///etc/wireguard/") || wireguardPattern.MatchString(uri) { + return LanguageWireguard, nil + } + return "", common.ParseError{ Line: 0, Err: LanguageUndetectableError{}, diff --git a/root-handler/shared.go b/root-handler/shared.go new file mode 100644 index 0000000..e0575e0 --- /dev/null +++ b/root-handler/shared.go @@ -0,0 +1,5 @@ +package roothandler + +import protocol "github.com/tliron/glsp/protocol_3_16" + +var openedFiles = make(map[protocol.DocumentUri]struct{}) diff --git a/root-handler/text-document-completion.go b/root-handler/text-document-completion.go index bd6478a..24adf54 100644 --- a/root-handler/text-document-completion.go +++ b/root-handler/text-document-completion.go @@ -2,6 +2,7 @@ package roothandler import ( "config-lsp/handlers/fstab" + "config-lsp/handlers/wireguard" "github.com/tliron/glsp" protocol "github.com/tliron/glsp/protocol_3_16" @@ -15,6 +16,8 @@ func TextDocumentCompletion(context *glsp.Context, params *protocol.CompletionPa return fstab.TextDocumentCompletion(context, params) case LanguageSSHDConfig: return nil, nil + case LanguageWireguard: + return wireguard.TextDocumentCompletion(context, params) } panic("root-handler/TextDocumentCompletion: unexpected language" + language) diff --git a/root-handler/text-document-did-change.go b/root-handler/text-document-did-change.go index 573459e..21d51fc 100644 --- a/root-handler/text-document-did-change.go +++ b/root-handler/text-document-did-change.go @@ -2,6 +2,7 @@ package roothandler import ( "config-lsp/handlers/fstab" + "config-lsp/handlers/wireguard" "github.com/tliron/glsp" protocol "github.com/tliron/glsp/protocol_3_16" @@ -15,6 +16,8 @@ func TextDocumentDidChange(context *glsp.Context, params *protocol.DidChangeText return fstab.TextDocumentDidChange(context, params) case LanguageSSHDConfig: return nil + case LanguageWireguard: + return wireguard.TextDocumentDidChange(context, params) } panic("root-handler/TextDocumentDidChange: unexpected language" + language) diff --git a/root-handler/text-document-did-close.go b/root-handler/text-document-did-close.go new file mode 100644 index 0000000..47943f4 --- /dev/null +++ b/root-handler/text-document-did-close.go @@ -0,0 +1,25 @@ +package roothandler + +import ( + "config-lsp/handlers/wireguard" + + "github.com/tliron/glsp" + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func TextDocumentDidClose(context *glsp.Context, params *protocol.DidCloseTextDocumentParams) error { + language := rootHandler.GetLanguageForDocument(params.TextDocument.URI) + + delete(openedFiles, params.TextDocument.URI) + rootHandler.RemoveDocument(params.TextDocument.URI) + + switch language { + case LanguageFstab: + case LanguageSSHDConfig: + case LanguageWireguard: + return wireguard.TextDocumentDidClose(context, params) + default: + } + + return nil +} diff --git a/root-handler/text-document-did-open.go b/root-handler/text-document-did-open.go index 8228249..befd8c7 100644 --- a/root-handler/text-document-did-open.go +++ b/root-handler/text-document-did-open.go @@ -3,6 +3,7 @@ package roothandler import ( "config-lsp/common" fstab "config-lsp/handlers/fstab" + "config-lsp/handlers/wireguard" "fmt" "github.com/tliron/glsp" @@ -27,6 +28,8 @@ func TextDocumentDidOpen(context *glsp.Context, params *protocol.DidOpenTextDocu return parseError.Err } + openedFiles[params.TextDocument.URI] = struct{}{} + // Everything okay, now we can handle the file rootHandler.AddDocument(params.TextDocument.URI, language) @@ -34,11 +37,12 @@ func TextDocumentDidOpen(context *glsp.Context, params *protocol.DidOpenTextDocu case LanguageFstab: return fstab.TextDocumentDidOpen(context, params) case LanguageSSHDConfig: - default: - panic(fmt.Sprintf("unexpected roothandler.SupportedLanguage: %#v", language)) + break + case LanguageWireguard: + return wireguard.TextDocumentDidOpen(context, params) } - return nil + panic(fmt.Sprintf("unexpected roothandler.SupportedLanguage: %#v", language)) } func showParseError( diff --git a/utils/common.go b/utils/common.go index 3b2defc..e972a0b 100644 --- a/utils/common.go +++ b/utils/common.go @@ -29,6 +29,26 @@ func Map[T any, O any](values []T, f func(T) O) []O { return result } +func MapMap[T comparable, O any, P any](values map[T]O, f func(T, O) P) map[T]P { + result := make(map[T]P) + + for key, value := range values { + result[key] = f(key, value) + } + + return result +} + +func MapMapToSlice[T comparable, O any, P any](values map[T]O, f func(T, O) P) []P { + result := make([]P, 0) + + for key, value := range values { + result = append(result, f(key, value)) + } + + return result +} + func SliceToSet[T comparable](values []T) map[T]struct{} { set := make(map[T]struct{})