Skip to content

Commit 8460b42

Browse files
author
Sergey Melyukov
committed
lint/reporter: collect and output unused files
1 parent 83602ea commit 8460b42

File tree

3 files changed

+118
-1
lines changed

3 files changed

+118
-1
lines changed

lib/lint/reporter/collectFiles.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
var path = require('path');
2+
var fs = require('fs');
3+
4+
module.exports = function(base, extFilter){
5+
var stack = [base];
6+
var cursor;
7+
var collectedFiles = {};
8+
9+
while (cursor = stack.pop())
10+
{
11+
if (!fs.existsSync(cursor))
12+
continue;
13+
14+
var stat = fs.lstatSync(cursor);
15+
16+
if (stat.isSymbolicLink())
17+
{
18+
var resolvedLink = path.resolve(cursor, fs.readlinkSync(cursor));
19+
20+
stack.push(resolvedLink);
21+
}
22+
else if (stat.isDirectory())
23+
{
24+
var items = fs.readdirSync(cursor);
25+
26+
for (var i = 0; i < items.length; i++)
27+
stack.push(path.join(cursor, items[i]));
28+
}
29+
else
30+
{
31+
if (extFilter)
32+
{
33+
var fileExt = path.extname(cursor);
34+
35+
if (fileExt.toLowerCase() === extFilter.toLowerCase())
36+
collectedFiles[cursor] = true;
37+
}
38+
else
39+
collectedFiles[cursor] = true;
40+
}
41+
}
42+
43+
return collectedFiles;
44+
};

lib/lint/reporter/parallel-process-warns.js

+37
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
var collectFiles = require('./collectFiles');
2+
13
module.exports = function(tasks){
24
var result = {};
5+
var basePaths = {};
6+
var usedFiles = {};
7+
var collectedFiles = {};
38

49
tasks.forEach(function(task){
510
var failures = result[task.name] = [];
@@ -20,7 +25,39 @@ module.exports = function(tasks){
2025
message: warn.message + ' at ' + filename
2126
});
2227
});
28+
29+
if (task.result.usedFiles)
30+
{
31+
basePaths[task.result.usedFiles.collectPath] = true;
32+
task.result.usedFiles.items.forEach(function(filename){
33+
usedFiles[task.result.usedFiles.basePath + filename] = true;
34+
});
35+
}
2336
});
2437

38+
if (Object.keys(basePaths).length)
39+
{
40+
for (var basePath in basePaths)
41+
{
42+
var files = collectFiles(basePath);
43+
44+
for (var fileName in files)
45+
collectedFiles[fileName] = true;
46+
}
47+
48+
for (var usedFile in usedFiles)
49+
delete collectedFiles[usedFile];
50+
51+
for (var unusedName in collectedFiles)
52+
{
53+
unusedName = unusedName.slice(process.cwd().length);
54+
result['unused files'] = result['unused files'] || [];
55+
result['unused files'].push({
56+
loc: unusedName,
57+
message: unusedName
58+
});
59+
}
60+
}
61+
2562
return result;
2663
};

lib/lint/reporter/process-warns.js

+37-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
module.exports = function(warns, fileFilter){
1+
var isChildProcess = typeof process.send == 'function'; // child process has send method
2+
var collectFiles = require('./collectFiles');
3+
4+
module.exports = function(flow, options){
25
var result = {};
6+
var warns = flow.warns;
7+
var fileFilter = options.filter;
38

49
warns.forEach(function(warn){
510
var filename = warn.file || '<UnknownFile>';
@@ -16,5 +21,36 @@ module.exports = function(warns, fileFilter){
1621
});
1722
});
1823

24+
if (!isChildProcess)
25+
{
26+
var basePath;
27+
var collectedFiles;
28+
29+
if (options.warnUnusedFiles && flow.usedFiles)
30+
{
31+
var usedFilesInfo = flow.usedFiles;
32+
var usedFiles = {};
33+
34+
basePath = usedFilesInfo.collectPath;
35+
collectedFiles = collectFiles(basePath);
36+
37+
usedFilesInfo.items.forEach(function(filename){
38+
usedFiles[usedFilesInfo.basePath + filename] = true;
39+
});
40+
41+
for (var usedFile in usedFiles)
42+
delete collectedFiles[usedFile];
43+
44+
for (var unusedName in collectedFiles) {
45+
unusedName = unusedName.slice(process.cwd().length);
46+
result['unused files'] = result['unused files'] || [];
47+
result['unused files'].push({
48+
loc: unusedName,
49+
message: unusedName
50+
});
51+
}
52+
}
53+
}
54+
1955
return result;
2056
};

0 commit comments

Comments
 (0)