@eagleoutice/flowr
Version:
Static Dataflow Analyzer and Program Slicer for the R Programming Language
42 lines • 1.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeLintingRule = executeLintingRule;
const linter_rules_1 = require("./linter-rules");
const flowr_search_executor_1 = require("../search/flowr-search-executor");
const objects_1 = require("../util/objects");
/**
* Executes a specific linting rule on the given analysis provider input.
*/
async function executeLintingRule(ruleName, input, lintingRuleConfig) {
try {
const rule = linter_rules_1.LintingRules[ruleName];
const fullConfig = (0, objects_1.deepMergeObject)(rule.info.defaultConfig, lintingRuleConfig);
const ruleSearch = rule.createSearch(fullConfig);
const searchStart = Date.now();
const searchResult = await (0, flowr_search_executor_1.runSearch)(ruleSearch, input);
const searchTime = Date.now() - searchStart;
const processStart = Date.now();
const result = await rule.processSearchResult(searchResult, fullConfig, {
/* we currently await them here for simplicity (no redundant awaits in the linting rules), but they could be passed as promises too */
dataflow: await input.dataflow(),
normalize: await input.normalize(),
cfg: await input.controlflow(),
analyzer: input
});
const processTime = Date.now() - processStart;
return {
...result,
'.meta': {
...result['.meta'],
searchTimeMs: searchTime,
processTimeMs: processTime
}
};
}
catch (e) {
return {
error: e
};
}
}
//# sourceMappingURL=linter-executor.js.map