in src/extension/index.ts [94:124]
function activateDiagnostics(disposables: Disposable[], store: Store, baser: UriRebaser) {
const diagsAll = languages.createDiagnosticCollection('SARIF');
disposables.push(diagsAll);
const setDiags = (doc: TextDocument) => {
// When the user opens a doc, VS Code commonly silently opens the associate `*.git`. We are not interested in these events.
if (doc.fileName.endsWith('.git')) return;
const artifactUri = baser.translateLocalToArtifact(doc.uri.toString(true /* skipEncoding */));
const severities = {
error: DiagnosticSeverity.Error,
warning: DiagnosticSeverity.Warning,
} as Record<string, DiagnosticSeverity>;
const diags = store.results
.filter(result => {
const uri = result._uriContents ?? result._uri;
return uri === artifactUri && !result._fixed;
})
.map(result => new ResultDiagnostic(
regionToSelection(doc, result._region),
result._message ?? '—',
severities[result.level ?? ''] ?? DiagnosticSeverity.Information, // note, none, undefined.
result,
));
diagsAll.set(doc.uri, diags);
};
workspace.textDocuments.forEach(setDiags);
disposables.push(workspace.onDidOpenTextDocument(setDiags));
disposables.push(workspace.onDidCloseTextDocument(doc => diagsAll.delete(doc.uri))); // Spurious *.git deletes don't hurt.
const disposer = observe(store.logs, () => workspace.textDocuments.forEach(setDiags));
disposables.push({ dispose: disposer });
}