debt-collector
Version:
a nodejs tool to identify, track and mesure technical debt
60 lines (59 loc) • 2.59 kB
JavaScript
import { minimatch } from 'minimatch';
export const formatWalkResults = ({ config, results, globFilter, hasPackagesConfig, }) => {
const { fileRules = [] } = config;
const allRulesIdInConfig = fileRules.map((rule) => rule);
const revisionResultsArr = results.map(({ rev, results: filesResults }) => {
let filteredResults = filesResults;
if (hasPackagesConfig) {
const fileNames = Object.keys(filesResults);
filteredResults = fileNames
.filter((filePath) => typeof globFilter === 'string'
? minimatch(filePath, globFilter.replace(/^\.\//, ''))
: globFilter.some((pattern) => minimatch(filePath, pattern.replace(/^\.\//, ''))))
.reduce((acc, filePath) => {
if (filePath in filesResults && !!filesResults[filePath]) {
acc[filePath] = filesResults[filePath];
}
return acc;
}, {});
}
let totalScore = 0;
const rulesScores = allRulesIdInConfig.reduce((acc, rule) => {
acc[rule.id] = {
ruleId: rule.id,
ruleTitle: rule.title,
debtScore: rule.debtScore,
ruleTotalSore: 0,
occurences: 0,
};
return acc;
}, {});
Object.keys(filteredResults).forEach((filePath) => {
const fileResults = filteredResults[filePath];
// console.log('formatWalkResults fileResults', fileResults)
if (fileResults?.brokenRules && fileResults.brokenRules.length > 0) {
// console.log(
// 'formatWalkResults fileResults.brokenRules',
// fileResults.brokenRules
// )
fileResults.brokenRules.forEach((brokenRule) => {
const { ruleId, occurences, ruleTotalSore } = brokenRule;
if (rulesScores[ruleId]) {
rulesScores[ruleId].occurences += occurences;
rulesScores[ruleId].ruleTotalSore += ruleTotalSore;
}
});
}
totalScore += fileResults?.totalScore ?? 0;
});
const brokenRules = Object.values(rulesScores);
// console.log('formatWalkResults brokenRules', brokenRules)
return {
...rev,
totalScore,
brokenRules,
};
});
// console.log('formatWalkResults revisionResultsArr', revisionResultsArr)
return revisionResultsArr;
};