Report Latex Log errors as diagnostics per file

This commit is contained in:
James Booth 2017-03-24 13:43:22 +00:00
parent 0fe21a78d1
commit c0a36161e7

View File

@ -66,9 +66,7 @@ export async function compile(here = false) {
}); });
// Wait command finish // Wait command finish
await promise.catch((err) => { await promise.catch((err) => {
latex_workshop.workshop_output.append(String(err)); vscode.window.setStatusBarMessage(`Step ${cmd_idx + 1} failed (exit code: ${err.code}).`, 6000);
latex_workshop.workshop_output.show();
vscode.window.showErrorMessage(`Step ${cmd_idx + 1} exited with code ${err.code}. See LaTeX Workshop and Compiler log for details.`);
error_occurred = true; error_occurred = true;
}); });
@ -81,22 +79,38 @@ export async function compile(here = false) {
var LatexLogParser = require(latex_workshop.find_path('lib/latex-log-parser')); var LatexLogParser = require(latex_workshop.find_path('lib/latex-log-parser'));
var entries = LatexLogParser.parse(log_content); var entries = LatexLogParser.parse(log_content);
var entry_tag = { const diagnositic_severity = {
'typesetting': 'T', 'typesetting': vscode.DiagnosticSeverity.Hint,
'warning': 'W', 'warning': vscode.DiagnosticSeverity.Warning,
'error': 'E' 'error': vscode.DiagnosticSeverity.Error,
} };
const diagnostics = vscode.languages.createDiagnosticCollection('latex');
var log_level = configuration.get('log_level'); var log_level = configuration.get('log_level');
if (entries.all.length > 0) { if (entries.all.length > 0) {
latex_workshop.workshop_output.append('\n------------\nLaTeX Log Parser Result\n'); const diags_per_file: {[key:string]:vscode.Diagnostic[]} = {}
for (var entry of entries.all) { for (var entry of entries.all) {
if ((entry.level == 'typesetting' && log_level == 'all') || if ((entry.level == 'typesetting' && log_level == 'all') ||
(entry.level == 'warning' && log_level != 'error') || (entry.level == 'warning' && log_level != 'error') ||
(entry.level == 'error')) { (entry.level == 'error')) {
latex_workshop.workshop_output.append(`[${entry_tag[entry.level]}][${entry.file}:${entry.line}] ${entry.message}\n`); const range = new vscode.Range(new vscode.Position(entry.line - 1, 0),
latex_workshop.workshop_output.show(); new vscode.Position(entry.line - 1, 0));
const diag = new vscode.Diagnostic(range, entry.message, diagnositic_severity[entry.level]);
if (diags_per_file[entry.file] === undefined) {
diags_per_file[entry.file] = [];
}
diags_per_file[entry.file].push(diag);
} }
} }
// clear any previous run LaTeX diagnostics...
diagnostics.clear();
// ...and map over all diagnostics per file and set them.
Object.keys(diags_per_file).forEach(path => {
const diags = diags_per_file[path];
const uri = vscode.Uri.file(vscode.workspace.rootPath + '/' + vscode.workspace.asRelativePath(path));
diagnostics.set(uri, diags);
})
} }
// Succeed in all steps // Succeed in all steps