in experimental/adaptive-tool/server/lg/src/providers/diagnostics.ts [18:126]
export async function updateDiagnostics(document: TextDocument, connection: Connection): Promise<void> {
if(!util.isLgFile(path.basename(document.uri)) )
return;
const confDiagLevel = await connection.workspace.getConfiguration({
scopeUri: document.uri,
section : 'LG.Expression.ignoreUnknownFunction'
}).then(((value: string) => value));
const confCustomFuncListSetting : string = await connection.workspace.getConfiguration({
scopeUri: document.uri,
section: 'LG.Expression.customFunctionList'
}).then(((value: string) => value == null ? '' : value));
const filePath = URI.parse(document.uri).fsPath;
const resource = new LGResource(filePath, filePath, document.getText());
const engine: Templates = Templates.parseResource(resource);
const diagnostics = engine.diagnostics;
TemplatesStatus.templatesMap.set(URI.parse(document.uri).fsPath!, new TemplatesEntity(document.uri, engine));
const lspDiagnostics: Diagnostic[] = [];
let customFunctionList: string[] = [];
if (confCustomFuncListSetting.length >= 1) {
customFunctionList = confCustomFuncListSetting.split(",").map(u => u.trim());
}
diagnostics.forEach(u => {
const isUnkownFuncDiag: boolean = u.message.includes("it's not a built-in function or a custom function");
let severity : DiagnosticSeverity;
switch(u.severity) {
case 0:
severity = DiagnosticSeverity.Error;
break;
case 1:
severity = DiagnosticSeverity.Warning;
break;
case 2:
severity = DiagnosticSeverity.Information;
break;
case 3:
severity = DiagnosticSeverity.Hint;
break;
default:
severity = DiagnosticSeverity.Error;
break;
}
if (isUnkownFuncDiag === true){
let ignored = false;
const funcName = extractFuncName(u.message);
if (customFunctionList.includes(funcName)) {
ignored = true;
} else {
switch (confDiagLevel) {
case "ignore":
if (isUnkownFuncDiag) {
ignored = true;
}
break;
case "warn":
if (isUnkownFuncDiag) {
severity = DiagnosticSeverity.Warning;
}
break;
default:
break;
}
}
if (ignored === false){
const diagItem = Diagnostic.create(
{
start: {
line: u.range.start.line - 1 < 0 ? 0 : u.range.start.line - 1,
character: u.range.start.character
},
end: {
line: u.range.end.line - 1 < 0 ? 0 : u.range.end.line - 1,
character: u.range.end.character
},
},
u.message,
severity
);
lspDiagnostics.push(diagItem);
}
} else {
const diagItem = Diagnostic.create(
{
start: {
line: u.range.start.line - 1 < 0 ? 0 : u.range.start.line - 1,
character: u.range.start.character
},
end: {
line: u.range.end.line - 1 < 0 ? 0 : u.range.end.line - 1,
character: u.range.end.character
}
},
u.message,
severity
);
lspDiagnostics.push(diagItem);
}
});
// Send the computed diagnostics to VSCode.
connection.sendDiagnostics({ uri: document.uri, diagnostics: lspDiagnostics });
}