@barecheck/scanner
Version:
Barecheck scanner to run static code analysis
74 lines (59 loc) • 2.07 kB
JavaScript
const { info, table } = require('../../../output');
const buildTrendValue = (value) => {
if (parseInt(value, 10) === 0) return value;
return `${value > 0 ? '+' : ''}${value}`;
};
const buildDetails = (clones, changedFiles) => {
const duplicatesTable = clones.reduce(
(acc, { duplicationA, duplicationB }) => {
const buildLine = (duplication) => {
const path = duplication.sourceId;
const startLine = duplication.start.line;
const endLine = duplication.end.line;
return `${path}:${startLine}-${endLine}`;
};
// show report only with changed files
if (changedFiles.includes(duplicationB.sourceId)) {
const index = buildLine(duplicationB);
const defaultDuplicatedBlock = {
duplicates: []
};
const duplicatedBlock = acc[index] || defaultDuplicatedBlock;
duplicatedBlock.duplicates.push(buildLine(duplicationA));
acc[index] = duplicatedBlock;
}
return acc;
},
{}
);
return duplicatesTable;
};
const buildBody = ({ linesDiff, tokensDiff, totalPercentage, totalTokens }) => {
const trendLinesOutput = buildTrendValue(linesDiff);
const trendBranchesOutput = buildTrendValue(tokensDiff);
const totalPercentageOutput = `Total: ${totalPercentage}%`;
const totalTokensOutput = `Total Branches: ${totalTokens}%`;
const deescriptionLines = `Percentage of duplicated lines diff: ${trendLinesOutput}`;
const deescriptionBranches = `Percentage of duplicated branches diff: ${trendBranchesOutput}`;
const body = `${totalPercentageOutput}\n${totalTokensOutput}\n\n${deescriptionLines}\n${deescriptionBranches}`;
return body;
};
const buildFullMessage = ({
linesDiff,
tokensDiff,
totalPercentage,
totalTokens,
clones,
changedFiles
}) => {
const body = buildBody({
linesDiff,
tokensDiff,
totalPercentage,
totalTokens
});
const details = buildDetails(clones, changedFiles);
info(body);
if (Object.values(details).length > 0) table(details);
};
module.exports = buildFullMessage;