plaxtony
Version:
Static code analysis of SC2 Galaxy Script
92 lines • 4.02 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiagnosticsProvider = exports.formatDiagnosticTotal = void 0;
const provider_1 = require("./provider");
const types_1 = require("../compiler/types");
const checker_1 = require("../compiler/checker");
const binder_1 = require("../compiler/binder");
const utils_1 = require("./utils");
const common_1 = require("../common");
const vscode_uri_1 = require("vscode-uri");
function formatDiagnosticTotal(summary) {
const so = [];
for (const [uri, dlist] of summary.diagnostics) {
const qs = summary.sourceFiles.get(uri);
so.push(`"${qs.s2meta.docName}" ${uri}\n`);
for (const dg of dlist) {
so.push(`\n[${types_1.DiagnosticCategory[dg.category].toUpperCase()}] ${dg.messageText}`);
so.push(`\n in ${vscode_uri_1.default.parse(uri).fsPath}:${dg.line + 1}:${dg.col}\n\n`);
}
}
so.push('\n\n');
so.push(`Processed ${summary.filesProcessed} files.\n\n`);
for (const item of Object.keys(types_1.DiagnosticCategory).filter(v => typeof types_1.DiagnosticCategory[v] === 'number')) {
so.push('=');
so.push(summary.issuesTotal[types_1.DiagnosticCategory[item]].toString().padStart(6));
so.push(` ${item}s\n`);
}
return so.join('');
}
exports.formatDiagnosticTotal = formatDiagnosticTotal;
class DiagnosticsProvider extends provider_1.AbstractProvider {
translateDiagnostics(sourceFile, origDiagnostics, source) {
let lspDiagnostics = [];
for (let dg of origDiagnostics) {
const tmp = {
severity: dg.category,
range: {
start: utils_1.getLineAndCharacterOfPosition(sourceFile, dg.start),
end: utils_1.getLineAndCharacterOfPosition(sourceFile, dg.start + dg.length)
},
message: dg.messageText,
source,
};
if (tmp.tags) {
tmp.tags = dg.tags;
}
lspDiagnostics.push(tmp);
}
return lspDiagnostics;
}
subscribe(uri) {
}
checkFile(documentUri) {
const checker = new checker_1.TypeChecker(this.store);
const sourceFile = this.store.documents.get(documentUri);
binder_1.unbindSourceFile(sourceFile, this.store);
sourceFile.additionalSyntacticDiagnostics = checker.checkSourceFile(sourceFile, true);
}
provideDiagnostics(uri) {
const sourceFile = this.store.documents.get(uri);
let parseDiag = sourceFile.parseDiagnostics;
let checkerDiag = sourceFile.additionalSyntacticDiagnostics;
common_1.logger.info(`${uri} - ${parseDiag.length} - ${checkerDiag.length}`);
if (parseDiag.length > 100)
parseDiag = parseDiag.slice(0, 100);
if (checkerDiag.length > 100)
checkerDiag = checkerDiag.slice(0, 100);
return [].concat(this.translateDiagnostics(sourceFile, parseDiag, 'parser'), this.translateDiagnostics(sourceFile, checkerDiag, 'typecheck'));
}
checkFileRecursively(documentUri) {
const checker = new checker_1.TypeChecker(this.store);
const sourceFile = this.store.documents.get(documentUri);
const result = checker.checkSourceFileRecursively(sourceFile);
const dsum = {
diagnostics: result.diagnostics,
sourceFiles: result.sourceFiles,
filesProcessed: result.sourceFiles.size,
issuesTotal: {
[types_1.DiagnosticCategory.Error]: 0,
[types_1.DiagnosticCategory.Warning]: 0,
[types_1.DiagnosticCategory.Message]: 0,
[types_1.DiagnosticCategory.Hint]: 0,
},
};
for (const itDg of result.diagnostics.values()) {
itDg.forEach(v => ++dsum.issuesTotal[v.category]);
}
return dsum;
}
}
exports.DiagnosticsProvider = DiagnosticsProvider;
//# sourceMappingURL=diagnostics.js.map