function activateDiagnostics()

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 });
}