diff --git a/handlers/sshd_config/analyzer/analyzer.go b/handlers/sshd_config/analyzer/analyzer.go new file mode 100644 index 0000000..4635a05 --- /dev/null +++ b/handlers/sshd_config/analyzer/analyzer.go @@ -0,0 +1,12 @@ +package analyzer + +import ( + "config-lsp/handlers/sshd_config" + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func Analyze( + d *sshdconfig.SSHDocument, +) []protocol.Diagnostic { + return nil +} diff --git a/handlers/sshd_config/lsp/text-document-code-action.go b/handlers/sshd_config/lsp/text-document-code-action.go new file mode 100644 index 0000000..37950bd --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-code-action.go @@ -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 +} diff --git a/handlers/sshd_config/lsp/text-document-completion.go b/handlers/sshd_config/lsp/text-document-completion.go new file mode 100644 index 0000000..5c5b64a --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-completion.go @@ -0,0 +1,10 @@ +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) { + return nil, nil +} diff --git a/handlers/sshd_config/lsp/text-document-did-change.go b/handlers/sshd_config/lsp/text-document-did-change.go new file mode 100644 index 0000000..bed7156 --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-did-change.go @@ -0,0 +1,42 @@ +package lsp + +import ( + "config-lsp/common" + "config-lsp/handlers/sshd_config/analyzer" + "config-lsp/handlers/sshd_config" + "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 := sshdconfig.DocumentParserMap[params.TextDocument.URI] + document.Config.Clear() + + diagnostics := make([]protocol.Diagnostic, 0) + errors := document.Config.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 +} diff --git a/handlers/sshd_config/lsp/text-document-did-close.go b/handlers/sshd_config/lsp/text-document-did-close.go new file mode 100644 index 0000000..52834b0 --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-did-close.go @@ -0,0 +1,13 @@ +package lsp + +import ( + "config-lsp/handlers/sshd_config" + "github.com/tliron/glsp" + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func TextDocumentDidClose(context *glsp.Context, params *protocol.DidCloseTextDocumentParams) error { + delete(sshdconfig.DocumentParserMap, params.TextDocument.URI) + + return nil +} diff --git a/handlers/sshd_config/lsp/text-document-did-open.go b/handlers/sshd_config/lsp/text-document-did-open.go new file mode 100644 index 0000000..7906931 --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-did-open.go @@ -0,0 +1,45 @@ +package lsp + +import ( + "config-lsp/common" + "config-lsp/handlers/sshd_config" + "config-lsp/handlers/sshd_config/analyzer" + "config-lsp/handlers/sshd_config/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.NewSSHConfig() + document := sshdconfig.SSHDocument{ + Config: parser, + } + sshdconfig.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 +} diff --git a/handlers/sshd_config/lsp/text-document-hover.go b/handlers/sshd_config/lsp/text-document-hover.go new file mode 100644 index 0000000..61d19cd --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-hover.go @@ -0,0 +1,13 @@ +package lsp + +import ( + "github.com/tliron/glsp" + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func TextDocumentHover( + context *glsp.Context, + params *protocol.HoverParams, +) (*protocol.Hover, error) { + return nil, nil +} diff --git a/handlers/sshd_config/lsp/text-document-signature-help.go b/handlers/sshd_config/lsp/text-document-signature-help.go new file mode 100644 index 0000000..eff0052 --- /dev/null +++ b/handlers/sshd_config/lsp/text-document-signature-help.go @@ -0,0 +1,10 @@ +package lsp + +import ( + "github.com/tliron/glsp" + protocol "github.com/tliron/glsp/protocol_3_16" +) + +func TextDocumentSignatureHelp(context *glsp.Context, params *protocol.SignatureHelpParams) (*protocol.SignatureHelp, error) { + return nil, nil +} diff --git a/handlers/sshd_config/lsp/workspace-execute-command.go b/handlers/sshd_config/lsp/workspace-execute-command.go new file mode 100644 index 0000000..f2f39d0 --- /dev/null +++ b/handlers/sshd_config/lsp/workspace-execute-command.go @@ -0,0 +1,10 @@ +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) { + return nil, nil +} diff --git a/handlers/sshd_config/shared.go b/handlers/sshd_config/shared.go new file mode 100644 index 0000000..e5503b7 --- /dev/null +++ b/handlers/sshd_config/shared.go @@ -0,0 +1,14 @@ +package sshdconfig + +import ( + "config-lsp/handlers/sshd_config/ast" + + protocol "github.com/tliron/glsp/protocol_3_16" +) + +type SSHDocument struct { + Config *ast.SSHConfig +} + +var DocumentParserMap = map[protocol.DocumentUri]*SSHDocument{} + diff --git a/root-handler/text-document-code-action.go b/root-handler/text-document-code-action.go index f1da029..a9d3d33 100644 --- a/root-handler/text-document-code-action.go +++ b/root-handler/text-document-code-action.go @@ -3,6 +3,7 @@ package roothandler import ( aliases "config-lsp/handlers/aliases/lsp" hosts "config-lsp/handlers/hosts/lsp" + sshdconfig "config-lsp/handlers/sshd_config/lsp" wireguard "config-lsp/handlers/wireguard/lsp" "github.com/tliron/glsp" @@ -28,7 +29,7 @@ func TextDocumentCodeAction(context *glsp.Context, params *protocol.CodeActionPa case LanguageHosts: return hosts.TextDocumentCodeAction(context, params) case LanguageSSHDConfig: - return nil, nil + return sshdconfig.TextDocumentCodeAction(context, params) case LanguageWireguard: return wireguard.TextDocumentCodeAction(context, params) case LanguageAliases: diff --git a/root-handler/text-document-completion.go b/root-handler/text-document-completion.go index 160bcb2..6b5a2f2 100644 --- a/root-handler/text-document-completion.go +++ b/root-handler/text-document-completion.go @@ -4,6 +4,7 @@ import ( aliases "config-lsp/handlers/aliases/lsp" fstab "config-lsp/handlers/fstab/lsp" hosts "config-lsp/handlers/hosts/lsp" + sshdconfig "config-lsp/handlers/sshd_config/lsp" wireguard "config-lsp/handlers/wireguard/lsp" "github.com/tliron/glsp" @@ -27,7 +28,7 @@ func TextDocumentCompletion(context *glsp.Context, params *protocol.CompletionPa case LanguageFstab: return fstab.TextDocumentCompletion(context, params) case LanguageSSHDConfig: - return nil, nil + return sshdconfig.TextDocumentCompletion(context, params) case LanguageWireguard: return wireguard.TextDocumentCompletion(context, params) case LanguageHosts: diff --git a/root-handler/text-document-hover.go b/root-handler/text-document-hover.go index dfc15c6..da9a971 100644 --- a/root-handler/text-document-hover.go +++ b/root-handler/text-document-hover.go @@ -4,6 +4,7 @@ import ( aliases "config-lsp/handlers/aliases/lsp" fstab "config-lsp/handlers/fstab/lsp" hosts "config-lsp/handlers/hosts/lsp" + sshdconfig "config-lsp/handlers/sshd_config/lsp" wireguard "config-lsp/handlers/wireguard/lsp" "github.com/tliron/glsp" @@ -27,7 +28,7 @@ func TextDocumentHover(context *glsp.Context, params *protocol.HoverParams) (*pr case LanguageHosts: return hosts.TextDocumentHover(context, params) case LanguageSSHDConfig: - return nil, nil + return sshdconfig.TextDocumentHover(context, params) case LanguageFstab: return fstab.TextDocumentHover(context, params) case LanguageWireguard: diff --git a/root-handler/text-document-signature-help.go b/root-handler/text-document-signature-help.go index a3a7396..3fb742e 100644 --- a/root-handler/text-document-signature-help.go +++ b/root-handler/text-document-signature-help.go @@ -2,6 +2,7 @@ package roothandler import ( aliases "config-lsp/handlers/aliases/lsp" + sshdconfig "config-lsp/handlers/sshd_config/lsp" "github.com/tliron/glsp" protocol "github.com/tliron/glsp/protocol_3_16" @@ -24,7 +25,7 @@ func TextDocumentSignatureHelp(context *glsp.Context, params *protocol.Signature case LanguageHosts: return nil, nil case LanguageSSHDConfig: - return nil, nil + return sshdconfig.TextDocumentSignatureHelp(context, params) case LanguageFstab: return nil, nil case LanguageWireguard: diff --git a/root-handler/workspace-execute-command.go b/root-handler/workspace-execute-command.go index e159353..dd7f906 100644 --- a/root-handler/workspace-execute-command.go +++ b/root-handler/workspace-execute-command.go @@ -3,6 +3,7 @@ package roothandler import ( hosts "config-lsp/handlers/hosts/lsp" wireguard "config-lsp/handlers/wireguard/lsp" + "strings" "github.com/tliron/glsp"