From be8c92f605fa68bfdcc8bd7af9b2b3f770287f92 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Sat, 14 Sep 2024 19:30:02 +0200 Subject: [PATCH] fix(sshd_config): Improve include --- handlers/sshd_config/analyzer/include.go | 12 ++++++++++- .../sshd_config/lsp/text-document-did-open.go | 20 ++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/handlers/sshd_config/analyzer/include.go b/handlers/sshd_config/analyzer/include.go index f785df3..04164d8 100644 --- a/handlers/sshd_config/analyzer/include.go +++ b/handlers/sshd_config/analyzer/include.go @@ -71,6 +71,10 @@ func createIncludePaths( func parseFile( filePath string, ) (*sshdconfig.SSHDocument, error) { + if d, ok := sshdconfig.DocumentParserMap[filePath]; ok { + return d, nil + } + c := ast.NewSSHConfig() content, err := os.ReadFile(filePath) @@ -79,7 +83,11 @@ func parseFile( return nil, err } - c.Parse(string(content)) + parseErrors := c.Parse(string(content)) + + if len(parseErrors) > 0 { + return nil, errors.New(fmt.Sprintf("Errors in %s", filePath)) + } d := &sshdconfig.SSHDocument{ Config: c, @@ -91,5 +99,7 @@ func parseFile( return nil, errors.New(fmt.Sprintf("Errors in %s", filePath)) } + sshdconfig.DocumentParserMap[filePath] = d + return d, nil } diff --git a/handlers/sshd_config/lsp/text-document-did-open.go b/handlers/sshd_config/lsp/text-document-did-open.go index 7906931..24bb7c0 100644 --- a/handlers/sshd_config/lsp/text-document-did-open.go +++ b/handlers/sshd_config/lsp/text-document-did-open.go @@ -17,13 +17,19 @@ func TextDocumentDidOpen( ) error { common.ClearDiagnostics(context, params.TextDocument.URI) - parser := ast.NewSSHConfig() - document := sshdconfig.SSHDocument{ - Config: parser, - } - sshdconfig.DocumentParserMap[params.TextDocument.URI] = &document + var document *sshdconfig.SSHDocument - errors := parser.Parse(params.TextDocument.Text) + if foundDocument, ok := sshdconfig.DocumentParserMap[params.TextDocument.URI]; ok { + document = foundDocument + } else { + config := ast.NewSSHConfig() + document = &sshdconfig.SSHDocument{ + Config: config, + } + sshdconfig.DocumentParserMap[params.TextDocument.URI] = document + } + + errors := document.Config.Parse(params.TextDocument.Text) diagnostics := utils.Map( errors, @@ -34,7 +40,7 @@ func TextDocumentDidOpen( diagnostics = append( diagnostics, - analyzer.Analyze(&document)..., + analyzer.Analyze(document)..., ) if len(diagnostics) > 0 {