From 14b252874755eed95c49060e541dfa42133a4187 Mon Sep 17 00:00:00 2001 From: Blake Williams Date: Sat, 14 May 2022 12:05:04 +1000 Subject: [PATCH] Fix analyzer not being called when getHighlightParsingError is off --- .tool-versions | 1 + server/src/analyser.ts | 2 +- server/src/server.ts | 11 +++++++++-- 3 files changed, 11 insertions(+), 3 deletions(-) create mode 100644 .tool-versions diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 000000000..961648f0c --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 12.22.12 diff --git a/server/src/analyser.ts b/server/src/analyser.ts index e556ec106..dba8c8ba8 100644 --- a/server/src/analyser.ts +++ b/server/src/analyser.ts @@ -376,7 +376,7 @@ export default class Analyzer { ): Parser.SyntaxNode | null { const document = this.uriToTreeSitterTrees[uri] - if (!document.rootNode) { + if (!document?.rootNode) { // Check for lacking rootNode (due to failed parse?) return null } diff --git a/server/src/server.ts b/server/src/server.ts index 39114d70e..2e1c565fc 100644 --- a/server/src/server.ts +++ b/server/src/server.ts @@ -76,15 +76,20 @@ export default class BashServer { this.documents.listen(this.connection) this.documents.onDidChangeContent(async change => { const { uri } = change.document + + // Load the tree for the modified contents into the analyzer: + const analyzeDiagnostics = this.analyzer.analyze(uri, change.document) + + // Run shellcheck diagnostics: let diagnostics: LSP.Diagnostic[] = [] - // FIXME: re-lint on workspace folder change const folders = await connection.workspace.getWorkspaceFolders() const lintDiagnostics = await this.linter.lint(change.document, folders || []) diagnostics = diagnostics.concat(lintDiagnostics) + // Treesitter's diagnostics can be a bit inaccurate, so we only merge the + // analyzer's diagnostics if the setting is enabled: if (config.getHighlightParsingError()) { - const analyzeDiagnostics = this.analyzer.analyze(uri, change.document) diagnostics = diagnostics.concat(analyzeDiagnostics) } @@ -100,6 +105,8 @@ export default class BashServer { connection.onReferences(this.onReferences.bind(this)) connection.onCompletion(this.onCompletion.bind(this)) connection.onCompletionResolve(this.onCompletionResolve.bind(this)) + + // FIXME: re-lint on workspace folder change } /**