From 839f0ba2174e89426d8a0da9622431310b050191 Mon Sep 17 00:00:00 2001 From: kaz-on <58929100+kaz-on@users.noreply.github.com> Date: Sun, 4 Apr 2021 22:10:00 +0900 Subject: [PATCH 1/2] Fix linters --- package.json | 2 +- src/extension.ts | 2 +- src/linter/LintManager.ts | 5 +++++ src/linter/VerilatorLinter.ts | 2 +- src/linter/XvlogLinter.ts | 19 ++++++++++--------- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 609817f6..fb700cd5 100644 --- a/package.json +++ b/package.json @@ -175,7 +175,7 @@ "scope": "window", "type": "string", "default": "", - "description": "Add Modelsim arguments here. They will be added to xvlog while linting." + "description": "Add xvlog arguments here. They will be added to xvlog while linting." }, "verilog.linting.iverilog.arguments": { "scope": "window", diff --git a/src/extension.ts b/src/extension.ts index d758a33b..81a7d1e4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -74,7 +74,7 @@ export function activate(context: ExtensionContext) { // Configure command to instantiate a module commands.registerCommand("verilog.instantiateModule", ModuleInstantiation.instantiateModuleInteract); // Register command for manual linting - commands.registerCommand("verilog.lint", lintManager.RunLintTool); + commands.registerCommand("verilog.lint", lintManager.RunLintTool, lintManager); // Configure svls language server configLanguageServer(); diff --git a/src/linter/LintManager.ts b/src/linter/LintManager.ts index edcdcba6..f12a041f 100644 --- a/src/linter/LintManager.ts +++ b/src/linter/LintManager.ts @@ -22,6 +22,11 @@ export default class LintManager { workspace.onDidChangeConfiguration(this.configLinter, this, this.subscriptions); this.configLinter(); + + // Run linting for open documents on launch + window.visibleTextEditors.forEach(editor => { + this.lint(editor.document); + }); } configLinter() { diff --git a/src/linter/VerilatorLinter.ts b/src/linter/VerilatorLinter.ts index df6c1ef8..21d19165 100644 --- a/src/linter/VerilatorLinter.ts +++ b/src/linter/VerilatorLinter.ts @@ -89,7 +89,7 @@ export default class VerilatorLinter extends BaseLinter { // Parse output lines lines.forEach((line, i) => { // Error for our file - if (line.startsWith('%') && line.search(docUri) > 0) { + if (line.startsWith('%') && line.indexOf(docUri) > 0) { let rex = line.match(/%(\w+)(-[A-Z0-9_]+)?:\s*(\w+:)?(?:[^:]+):\s*(\d+):(?:\s*(\d+):)?\s*(\s*.+)/); if (rex && rex[0].length > 0) { diff --git a/src/linter/XvlogLinter.ts b/src/linter/XvlogLinter.ts index 3ba8686d..0542292f 100644 --- a/src/linter/XvlogLinter.ts +++ b/src/linter/XvlogLinter.ts @@ -22,7 +22,7 @@ export default class XvlogLinter extends BaseLinter { protected lint(doc: TextDocument) { this.logger.log('xvlog lint requested'); let svArgs: string = (doc.languageId == "systemverilog") ? "-sv" : ""; //Systemverilog args - let command = "xvlog " + svArgs + " -nolog " + this.xvlogArgs + "\"" + doc.fileName + "\""; + let command = "xvlog " + svArgs + " -nolog " + this.xvlogArgs + " \"" + doc.fileName + "\""; this.logger.log(command, Log_Severity.Command); let process: ChildProcess = exec(command, (error: Error, stdout: string, stderr: string) => { @@ -31,24 +31,25 @@ export default class XvlogLinter extends BaseLinter { let lines = stdout.split(/\r?\n/g); lines.forEach((line) => { - let tokens = line.split(/:?\s*(?:\[|\])\s*/).filter(Boolean); - if (tokens.length < 4 - || tokens[0] != "ERROR" - || !tokens[1].startsWith("VRFC")) { + let match = line.match(/^(ERROR|WARNING):\s+\[(VRFC\b[^\]]*)\]\s+(.*\S)\s+\[(.*):(\d+)\]\s*$/); + if (!match) { return; } + let severity = (match[1] === "ERROR") ? DiagnosticSeverity.Error : DiagnosticSeverity.Warning; + // Get filename and line number - let [filename, lineno_str] = tokens[3].split(/:(\d+)/); + let filename = match[4]; + let lineno_str = match[5]; let lineno = parseInt(lineno_str) - 1; // if (filename != doc.fileName) // Check that filename matches // return; let diagnostic: Diagnostic = { - severity: DiagnosticSeverity.Error, - code: tokens[1], - message: "[" + tokens[1] + "] " + tokens[2], + severity: severity, + code: match[2], + message: "[" + match[2] + "] " + match[3], range: new Range(lineno, 0, lineno, Number.MAX_VALUE), source: "xvlog", } From 9c755733a8040c8cc16e49e4d0342883945eaf99 Mon Sep 17 00:00:00 2001 From: kaz-on <58929100+kaz-on@users.noreply.github.com> Date: Sun, 4 Apr 2021 22:11:52 +0900 Subject: [PATCH 2/2] Fix some errors in Developer Tools --- src/ctags.ts | 4 ++-- src/providers/DefinitionProvider.ts | 2 +- src/providers/HoverProvider.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/ctags.ts b/src/ctags.ts index 67f8e474..da07410c 100644 --- a/src/ctags.ts +++ b/src/ctags.ts @@ -244,8 +244,8 @@ export class CtagsManager { commands.executeCommand('vscode.executeDocumentSymbolProvider', doc.uri); } - onDidChangeActiveTextEditor(editor: TextEditor) { - if (!this.isOutputPanel(editor.document.uri)) { + onDidChangeActiveTextEditor(editor: TextEditor | undefined) { + if (editor && !this.isOutputPanel(editor.document.uri)) { console.log("on open"); CtagsManager.ctags.setDocument(editor.document); CtagsManager.ctags.index(); diff --git a/src/providers/DefinitionProvider.ts b/src/providers/DefinitionProvider.ts index 9372b457..cd0480d9 100644 --- a/src/providers/DefinitionProvider.ts +++ b/src/providers/DefinitionProvider.ts @@ -15,7 +15,7 @@ export default class VerilogDefinitionProvider implements DefinitionProvider { return new Promise((resolve, reject) => { // get word start and end let textRange = document.getWordRangeAtPosition(position); - if (textRange.isEmpty) + if (!textRange || textRange.isEmpty) return; // hover word let targetText = document.getText(textRange); diff --git a/src/providers/HoverProvider.ts b/src/providers/HoverProvider.ts index d34c8b06..5365c04a 100644 --- a/src/providers/HoverProvider.ts +++ b/src/providers/HoverProvider.ts @@ -15,7 +15,7 @@ export default class VerilogHoverProvider implements HoverProvider { this.logger.log("Hover requested"); // get word start and end let textRange = document.getWordRangeAtPosition(position); - if (textRange.isEmpty) + if (!textRange || textRange.isEmpty) return; // hover word let targetText = document.getText(textRange);