Skip to content
This repository has been archived by the owner on Nov 15, 2018. It is now read-only.

Commit

Permalink
Report to txt file with same layout of cli report.
Browse files Browse the repository at this point in the history
Also some refactor function reuse.
  • Loading branch information
helio-frota committed Sep 15, 2016
1 parent aa31999 commit 91f655b
Show file tree
Hide file tree
Showing 4 changed files with 91 additions and 30 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
node_modules
*.log
.vscode
coverage
coverage
szero.txt
4 changes: 2 additions & 2 deletions bin/szero.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ function run (directory) {
result.push(usage);
}
});
reporter.report(result);
reporter.reportUnused(result, dependencies);
reporter.report(result, dependencies);
reporter.fileReport(result, dependencies);
}

if (process.argv.length === 3) {
Expand Down
94 changes: 68 additions & 26 deletions lib/reporter.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,28 @@
'use strict';

const log = require('./log-color');
const fs = require('fs');

module.exports = {
report: report,
reportUnused: reportUnused
fileReport: fileReport
};

function report (result) {
function flatResult (result) {
let resultFlattened = result.reduce((a, b) => {
return a.concat(b);
}, []);
return resultFlattened;
}

function declarationsOnly (resultFlattened) {
let declarations = resultFlattened.map((m) => {
return m.declaration;
});
return declarations;
}

function groupedResult (resultFlattened, declarations) {
let grouped = resultFlattened.reduce((grouped, r) => {
let key = '';
declarations.forEach(d => {
Expand All @@ -28,39 +35,43 @@ function report (result) {
grouped[key].push(r);
return grouped;
}, {});
return grouped;
}

function header (str) {
log.red('-'.repeat(70));
log.red('[ Declaration and file lines ]');
log.red(str);
log.red('-'.repeat(70));
}

function amountMap (grouped) {
let amount = new Map();
Object.keys(grouped).forEach(key => {
log.red(key + ':');
grouped[key].forEach(x => console.log(x.file.replace('//', '/') + ':' + x.line));
amount.set(key, grouped[key].length);
});

console.log('');
log.red('-'.repeat(70));
log.red('[ Declaration and amount ]');
log.red('-'.repeat(70));

for (let entry of amount.entries()) {
console.log(entry[0] + ' --> ' + log.applyColor(entry[1]));
}
return amount;
}

function reportUnused (result, dependencies) {
let resultFlattened = result.reduce((a, b) => {
return a.concat(b);
}, []);
function logFileLines (grouped) {
Object.keys(grouped).forEach(key => {
log.red(key + ':');
grouped[key].forEach(x => console.log(x.file.replace('//', '/') + ':' + x.line));
});
}

let declarations = resultFlattened.map((m) => {
return m.declaration;
function strFileLines (grouped) {
let content = '';
Object.keys(grouped).forEach(key => {
content += key + ':\n';
grouped[key].forEach(x => {
content += x.file.replace('//', '/') + ':' + x.line + '\n';
});
});
return content;
}

function unused (declarations, dependencies) {
const unused = [];

if (declarations.length) {
dependencies.forEach(dep => {
declarations.forEach(d => {
Expand All @@ -76,11 +87,42 @@ function reportUnused (result, dependencies) {
unused.push(dep);
});
}
return unused;
}

log.red('-'.repeat(70));
log.red('[ Unused dependencies ]');
log.red('-'.repeat(70));
function report (result, dependencies) {
let resultFlattened = flatResult(result);
let declarations = declarationsOnly(resultFlattened);
let grouped = groupedResult(resultFlattened, declarations);

header('[ Declaration and file lines ]');
logFileLines(grouped);
header('[ Declaration and amount ]');

let amount = amountMap(grouped);
for (let entry of amount.entries()) {
console.log(entry[0] + ' --> ' + log.applyColor(entry[1]));
}

header('[ Unused dependencies ]');
log.red(unused(declarations, dependencies));
}

function fileReport (result, dependencies) {
let resultFlattened = flatResult(result);
let declarations = declarationsOnly(resultFlattened);
let grouped = groupedResult(resultFlattened, declarations);

let fileContent = '[ Declaration and file lines ]\n';
fileContent += strFileLines(grouped);
fileContent += '\n[ Declaration and amount ]\n';

let amount = amountMap(grouped);
for (let entry of amount.entries()) {
fileContent += entry[0] + ' --> ' + '[' + entry[1] + ']\n';
}

console.log('');
log.red(unused);
fileContent += '\n[ Unused dependencies ]\n';
fileContent += unused(declarations, dependencies);
fs.writeFileSync('szero.txt', fileContent);
}
20 changes: 19 additions & 1 deletion test/szero-test.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use strict';

const test = require('tape');
const fs = require('fs');
const log = require('../lib/log-color');
const reader = require('../lib/reader');
const searcher = require('../lib/searcher');
Expand Down Expand Up @@ -68,7 +69,24 @@ test('Should report.', t => {
const javascriptLines = reader.read(path.join(__dirname, '/fixtures/foo/x.js'));
const declarations = searcher.searchDeclarations(javascriptLines, dependencies);
const usage = searcher.searchUsage(javascriptLines, 'x.js', declarations);
const resultLogged = stdout.inspectSync(() => reporter.report(usage));
const resultLogged = stdout.inspectSync(() => reporter.report(usage, dependencies));
t.deepEqual(resultLogged.toString().includes('roi'), true);
t.end();
});

test('Should report to file.', t => {
const packageJsonLines = reader.read(path.join(__dirname, '/fixtures/package.json'));
const dependencies = searcher.searchDependencies(packageJsonLines);
const javascriptLines = reader.read(path.join(__dirname, '/fixtures/foo/x.js'));
const declarations = searcher.searchDeclarations(javascriptLines, dependencies);
const usage = searcher.searchUsage(javascriptLines, 'x.js', declarations);
reporter.fileReport(usage, dependencies);
try {
fs.statSync('szero.txt');
t.equal(1, 1);
} catch (e) {
console.error(e);
t.fail(e);
}
t.end();
});

0 comments on commit 91f655b

Please sign in to comment.