mirror of
https://github.com/James-Yu/LaTeX-Workshop.git
synced 2024-10-04 15:17:59 +03:00
Report Latex Log errors as diagnostics per file
This commit is contained in:
parent
0fe21a78d1
commit
c0a36161e7
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user