debt-collector
Version:
a nodejs tool to identify, track and mesure technical debt
65 lines (64 loc) • 2.1 kB
JavaScript
import fs from 'fs';
import { getRulesForFile } from '../filters/filterRules.js';
import getfileRulesErrors from './getFileRulesErrors.js';
import { truncateString, getConfigRuleById } from '../utils/index.js';
const updateResults = (config, brokenRules, fileResults) => {
const updatedFileResults = {
...fileResults,
};
if (brokenRules.length > 0) {
brokenRules.forEach(({ ruleId, occurences }) => {
if (ruleId === undefined || occurences === undefined)
return;
const rule = getConfigRuleById(config, ruleId);
const ruleTotalSore = (rule?.debtScore ?? 0) * occurences;
updatedFileResults.brokenRules.push({
ruleTitle: rule?.title ?? '',
ruleId,
occurences,
ruleTotalSore,
});
updatedFileResults.totalScore += ruleTotalSore;
});
}
return updatedFileResults;
};
const runFileChecks = async (config, filePath) => {
let fileResults = {
filePath,
fileShortPath: truncateString(filePath, 80),
brokenRules: [],
totalScore: 0,
};
if (config.fileRules?.length === 0) {
return fileResults;
}
let data = '';
try {
data = fs.readFileSync(filePath).toString();
}
catch (error) {
// console.error(`error while reading file ${filePath} \n ${error.message}`)
data = '';
}
if (!!config.fileRules?.length) {
if (data) {
const brokenRules = getfileRulesErrors(config, filePath, data);
fileResults = updateResults(config, brokenRules, fileResults);
}
else {
fileResults = updateResults(config, [], fileResults);
}
}
return fileResults;
};
const getFileResult = async (config, file, incrementCounter) => {
const rulesForFile = getRulesForFile(config, file);
const fileResult = await runFileChecks({
...config,
...rulesForFile,
}, file);
incrementCounter();
return fileResult;
};
export default getFileResult;