UNPKG

plaxtony

Version:

Static code analysis of SC2 Galaxy Script

92 lines 4.02 kB
"use strict"; 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