UNPKG

@eagleoutice/flowr

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

48 lines 2.79 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.LinterQueryDefinition = void 0; const joi_1 = __importDefault(require("joi")); const linter_query_executor_1 = require("./linter-query-executor"); const linter_rules_1 = require("../../../linter/linter-rules"); const linter_format_1 = require("../../../linter/linter-format"); const ansi_1 = require("../../../util/text/ansi"); const time_1 = require("../../../util/text/time"); const doc_code_1 = require("../../../documentation/doc-util/doc-code"); exports.LinterQueryDefinition = { executor: linter_query_executor_1.executeLinterQuery, asciiSummarizer: (formatter, _processed, queryResults, result) => { const out = queryResults; result.push(`Query: ${(0, ansi_1.bold)('linter', formatter)} (${(0, time_1.printAsMs)(out['.meta'].timing, 0)})`); for (const [ruleName, results] of Object.entries(out.results)) { addLintingRuleResult(ruleName, results, result); } return true; }, schema: joi_1.default.object({ type: joi_1.default.string().valid('linter').required().description('The type of the query.'), rules: joi_1.default.array().items(joi_1.default.string().valid(...Object.keys(linter_rules_1.LintingRules)), joi_1.default.object({ name: joi_1.default.string().valid(...Object.keys(linter_rules_1.LintingRules)).required(), config: joi_1.default.object() })).description('The rules to lint for. If unset, all rules will be included.') }).description('The linter query lints for the given set of rules and returns the result.'), flattenInvolvedNodes: () => [] }; function addLintingRuleResult(ruleName, results, result) { const rule = linter_rules_1.LintingRules[ruleName]; result.push(` ╰ **${rule.info.name}** (${ruleName}):`); for (const certainty of [linter_format_1.LintingResultCertainty.Certain, linter_format_1.LintingResultCertainty.Uncertain]) { const certaintyResults = results.results.filter(r => r.certainty === certainty); if (certaintyResults.length) { result.push(` ╰ ${certainty}:`); for (const res of certaintyResults) { const pretty = rule.prettyPrint[linter_format_1.LintingPrettyPrintContext.Query](res, results['.meta']); result.push(` ╰ ${pretty}${res.quickFix ? ` (${res.quickFix.length} quick fix(es) available)` : ''}`); } } } result.push(` ╰ _Metadata_: ${(0, doc_code_1.codeInline)(JSON.stringify(results['.meta']))}`); } //# sourceMappingURL=linter-query-format.js.map