Skip to content

Commit b895c99

Browse files
committed
Errors in VS Code
1 parent b6cd354 commit b895c99

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

vscode/src/extension.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,13 @@ export async function activate(context: vscode.ExtensionContext) {
1919
const evtTarget = new QscEventTarget(false);
2020
const compiler = await getCompiler(evtTarget);
2121

22+
// send document updates
23+
vscode.workspace.onDidChangeTextDocument((evt) => {
24+
if (vscode.languages.match("qsharp", evt.document)) {
25+
compiler.updateCode(evt.document.getText());
26+
}
27+
});
28+
2229
// completions
2330
vscode.languages.registerCompletionItemProvider(
2431
"qsharp",
@@ -38,6 +45,44 @@ export async function activate(context: vscode.ExtensionContext) {
3845
createDefinitionProvider(compiler)
3946
);
4047

48+
const diagCollection = vscode.languages.createDiagnosticCollection("qsharp");
49+
evtTarget.addEventListener("diagnostics", (evt) => {
50+
const diagnostics = evt.detail;
51+
// Of course the uri should come from the event
52+
const document = vscode.window.activeTextEditor?.document;
53+
if (document) {
54+
diagCollection.clear();
55+
diagCollection.set(
56+
document.uri,
57+
diagnostics.map((d) => {
58+
let severity;
59+
switch (d.severity) {
60+
case 0:
61+
severity = vscode.DiagnosticSeverity.Information;
62+
break;
63+
case 1:
64+
severity = vscode.DiagnosticSeverity.Warning;
65+
break;
66+
case 2:
67+
severity = vscode.DiagnosticSeverity.Error;
68+
break;
69+
default:
70+
severity = vscode.DiagnosticSeverity.Error;
71+
output.appendLine(`Unknown severity: ${d.severity}`);
72+
}
73+
return new vscode.Diagnostic(
74+
new vscode.Range(
75+
document.positionAt(d.start_pos),
76+
document.positionAt(d.end_pos)
77+
),
78+
d.message,
79+
severity
80+
);
81+
})
82+
);
83+
}
84+
});
85+
4186
// notebooks
4287
registerQSharpNotebookHandlers(context);
4388
}

0 commit comments

Comments
 (0)