debt-collector
Version:
a nodejs tool to identify, track and mesure technical debt
85 lines (84 loc) • 2.91 kB
JavaScript
import fs from 'fs';
import { getRulesForFile } from '../filters/filterRules.js';
import getfileRulesErrors from './getFileRulesErrors.js';
import { truncateString, getConfigRuleById } from '../utils/index.js';
import getAdoptionRulesResults from './getAdoptionRulesResults.js';
const updateResults = (config, brokenRules, fileResults, key = 'brokenRules') => {
const updatedFileResults = {
...fileResults,
};
if (brokenRules.length > 0) {
brokenRules.forEach(({ ruleId, occurences }) => {
if (ruleId === undefined || occurences === undefined)
return;
let rule;
if (key === 'adoptionRules') {
rule = config.adoptionRules?.find((r) => r.id === ruleId);
}
else {
rule = getConfigRuleById(config, ruleId);
}
const ruleTotalSore = (rule?.debtScore ?? 0) * occurences;
updatedFileResults[key].push({
ruleTitle: rule?.title ?? '',
ruleId,
occurences,
ruleTotalSore,
});
if (key === 'brokenRules') {
updatedFileResults.totalScore += ruleTotalSore;
}
});
}
return updatedFileResults;
};
const runFileChecks = async (config, filePath) => {
let fileResults = {
filePath,
fileShortPath: truncateString(filePath, 80),
brokenRules: [],
adoptionRules: [],
totalScore: 0,
};
if ((config.fileRules?.length ?? 0) === 0 &&
(config.adoptionRules?.length ?? 0) === 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, 'brokenRules');
}
else {
fileResults = updateResults(config, [], fileResults, 'brokenRules');
}
}
if (!!config.adoptionRules?.length) {
if (data) {
const adoptionRules = getAdoptionRulesResults(config, filePath, data);
fileResults = updateResults(config, adoptionRules, fileResults, 'adoptionRules');
}
else {
fileResults = updateResults(config, [], fileResults, 'adoptionRules');
}
}
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;