From 8f274b0a8aaf43ad65418057e321cde32d7a5141 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Tue, 20 Jun 2017 14:39:46 +0300 Subject: [PATCH 1/7] common/files: unique number id for files --- lib/common/files.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/common/files.js b/lib/common/files.js index 6b518bc..292a1dd 100644 --- a/lib/common/files.js +++ b/lib/common/files.js @@ -57,12 +57,14 @@ function getRef(seed, type){ return seed[type].toString(36) + type; } +var lastFileId = 0; /** * @class File */ function File(manager, cfg){ + this.uniqueId = lastFileId++; this.manager = manager; this.linkTo = []; this.linkBack = []; @@ -296,6 +298,10 @@ var FileManager = function(baseURI, relBaseURI, console, flow){ this.warns = []; this.readInfo = []; + + // helpers + this.unixpath = unixpath; + this.abspath = abspath; }; FileManager.prototype = { From 010cf6f7912b8f9c9bbf8dbe6c1f3cbc21483ec1 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Tue, 20 Jun 2017 14:45:01 +0300 Subject: [PATCH 2/7] lint: added --warn-unused-files parameter --- lib/lint/command.js | 1 + lib/lint/index.js | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/lint/command.js b/lib/lint/command.js index 37ed6a1..90eb9da 100644 --- a/lib/lint/command.js +++ b/lib/lint/command.js @@ -20,6 +20,7 @@ module.exports = clap.create('lint', '[fileOrPreset]') .option('--no-color', 'Suppress color output') .option('--silent', 'No any output') + .option('--warn-unused-files ', 'Warn about unused files in specified path. Do not use with --js-cut-dev. It might cause incorrect result') .option('--filter ', 'Show warnings only for specified file', resolveCwd) .option('-r, --reporter ', 'Reporter console (default), checkstyle, junit', function(reporter){ diff --git a/lib/lint/index.js b/lib/lint/index.js index 8a73339..b6d213b 100644 --- a/lib/lint/index.js +++ b/lib/lint/index.js @@ -7,6 +7,9 @@ var extract = require('../extract'); var command = require('./command'); var chalk = require('chalk'); var isChildProcess = typeof process.send == 'function'; // child process has send method +var collectUsed = { + files: require('./collectUsed/files') +}; if (isChildProcess) process.on('uncaughtException', function(error){ @@ -91,7 +94,11 @@ function lint(config){ l10nInfo: true }).concat([ function(flow){ - flow.result = require('./reporter/process-warns')(flow.warns, options.filter); + if (options.warnUnusedFiles) + collectUsed.files(flow); + }, + function(flow){ + flow.result = require('./reporter/process-warns')(flow, options); } ]); @@ -148,6 +155,7 @@ function lint(config){ event: 'done', success: !flow.warns.length, warnings: flow.warns, + usedFiles: flow.usedFiles, result: flow.result }); }); From 83602eac9c7d2eebd13e58c14e644fa397bc99f5 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Tue, 20 Jun 2017 14:43:31 +0300 Subject: [PATCH 3/7] lint: added files collector --- lib/lint/collectUsed/fileCollector.js | 21 +++++++++++ lib/lint/collectUsed/files.js | 51 +++++++++++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 lib/lint/collectUsed/fileCollector.js create mode 100644 lib/lint/collectUsed/files.js diff --git a/lib/lint/collectUsed/fileCollector.js b/lib/lint/collectUsed/fileCollector.js new file mode 100644 index 0000000..04e2a4c --- /dev/null +++ b/lib/lint/collectUsed/fileCollector.js @@ -0,0 +1,21 @@ +module.exports = function collectFiles(flow, callback){ + var stack = [flow.files.queue[0]]; + var collectedFiles = {}; + var handled = {}; + var cursor; + + while (cursor = stack.pop()) + { + // mark file as handled + handled[cursor.uniqueId] = true; + callback(cursor); + cursor.linkTo.forEach(function(link){ + // prevent handling files that are already handled + if (link[0] && !handled[link[0].uniqueId]) { + stack.push(link[0]); + } + }); + } + + return collectedFiles; +}; diff --git a/lib/lint/collectUsed/files.js b/lib/lint/collectUsed/files.js new file mode 100644 index 0000000..f8c93e3 --- /dev/null +++ b/lib/lint/collectUsed/files.js @@ -0,0 +1,51 @@ +var collect = require('./fileCollector'); + +function isTarget(basePath, collectPath, file){ + return file.filename && (basePath + file.filename).indexOf(collectPath + '/') === 0; +} + +module.exports = function collectUsedFiles(flow){ + var options = flow.options; + var basePath = options.base; + var collectPath = flow.files.abspath(basePath, options.warnUnusedFiles); + var usedFiles = {}; + + collect(flow, function(file){ + if (isTarget(basePath, collectPath, file)) + usedFiles[file.filename] = true; + + if (file.type == 'template') + { + if (file.decl.deps) + { + file.decl.deps.forEach(function(resource){ + if (!resource.virtual && isTarget(basePath, collectPath, { filename: resource.url })) + usedFiles[resource.url] = true; + }); + } + if (file.decl.l10n) + { + file.decl.l10n.forEach(function(item){ + var l10nInfo = item.split('@'); + var dictFilename = l10nInfo[1]; + + if (isTarget(basePath, collectPath, { filename: dictFilename })) + usedFiles[dictFilename] = true; + }); + } + if (file.decl.styles) + { + file.decl.styles.forEach(function(style){ + if (!style.resource && isTarget(basePath, collectPath, { filename: style.sourceUrl })) + usedFiles[style.sourceUrl] = true; + }); + } + } + }); + + flow.usedFiles = { + basePath: basePath, + collectPath: collectPath, + items: Object.keys(usedFiles) + }; +}; From 8460b42b0ff8df972d4be17ef3b4b63184abd0f2 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Tue, 20 Jun 2017 14:41:20 +0300 Subject: [PATCH 4/7] lint/reporter: collect and output unused files --- lib/lint/reporter/collectFiles.js | 44 +++++++++++++++++++++ lib/lint/reporter/parallel-process-warns.js | 37 +++++++++++++++++ lib/lint/reporter/process-warns.js | 38 +++++++++++++++++- 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 lib/lint/reporter/collectFiles.js diff --git a/lib/lint/reporter/collectFiles.js b/lib/lint/reporter/collectFiles.js new file mode 100644 index 0000000..33a17e1 --- /dev/null +++ b/lib/lint/reporter/collectFiles.js @@ -0,0 +1,44 @@ +var path = require('path'); +var fs = require('fs'); + +module.exports = function(base, extFilter){ + var stack = [base]; + var cursor; + var collectedFiles = {}; + + while (cursor = stack.pop()) + { + if (!fs.existsSync(cursor)) + continue; + + var stat = fs.lstatSync(cursor); + + if (stat.isSymbolicLink()) + { + var resolvedLink = path.resolve(cursor, fs.readlinkSync(cursor)); + + stack.push(resolvedLink); + } + else if (stat.isDirectory()) + { + var items = fs.readdirSync(cursor); + + for (var i = 0; i < items.length; i++) + stack.push(path.join(cursor, items[i])); + } + else + { + if (extFilter) + { + var fileExt = path.extname(cursor); + + if (fileExt.toLowerCase() === extFilter.toLowerCase()) + collectedFiles[cursor] = true; + } + else + collectedFiles[cursor] = true; + } + } + + return collectedFiles; +}; diff --git a/lib/lint/reporter/parallel-process-warns.js b/lib/lint/reporter/parallel-process-warns.js index 70f3309..37ca62f 100644 --- a/lib/lint/reporter/parallel-process-warns.js +++ b/lib/lint/reporter/parallel-process-warns.js @@ -1,5 +1,10 @@ +var collectFiles = require('./collectFiles'); + module.exports = function(tasks){ var result = {}; + var basePaths = {}; + var usedFiles = {}; + var collectedFiles = {}; tasks.forEach(function(task){ var failures = result[task.name] = []; @@ -20,7 +25,39 @@ module.exports = function(tasks){ message: warn.message + ' at ' + filename }); }); + + if (task.result.usedFiles) + { + basePaths[task.result.usedFiles.collectPath] = true; + task.result.usedFiles.items.forEach(function(filename){ + usedFiles[task.result.usedFiles.basePath + filename] = true; + }); + } }); + if (Object.keys(basePaths).length) + { + for (var basePath in basePaths) + { + var files = collectFiles(basePath); + + for (var fileName in files) + collectedFiles[fileName] = true; + } + + for (var usedFile in usedFiles) + delete collectedFiles[usedFile]; + + for (var unusedName in collectedFiles) + { + unusedName = unusedName.slice(process.cwd().length); + result['unused files'] = result['unused files'] || []; + result['unused files'].push({ + loc: unusedName, + message: unusedName + }); + } + } + return result; }; diff --git a/lib/lint/reporter/process-warns.js b/lib/lint/reporter/process-warns.js index 9c1ecd3..e4a5c4e 100644 --- a/lib/lint/reporter/process-warns.js +++ b/lib/lint/reporter/process-warns.js @@ -1,5 +1,10 @@ -module.exports = function(warns, fileFilter){ +var isChildProcess = typeof process.send == 'function'; // child process has send method +var collectFiles = require('./collectFiles'); + +module.exports = function(flow, options){ var result = {}; + var warns = flow.warns; + var fileFilter = options.filter; warns.forEach(function(warn){ var filename = warn.file || ''; @@ -16,5 +21,36 @@ module.exports = function(warns, fileFilter){ }); }); + if (!isChildProcess) + { + var basePath; + var collectedFiles; + + if (options.warnUnusedFiles && flow.usedFiles) + { + var usedFilesInfo = flow.usedFiles; + var usedFiles = {}; + + basePath = usedFilesInfo.collectPath; + collectedFiles = collectFiles(basePath); + + usedFilesInfo.items.forEach(function(filename){ + usedFiles[usedFilesInfo.basePath + filename] = true; + }); + + for (var usedFile in usedFiles) + delete collectedFiles[usedFile]; + + for (var unusedName in collectedFiles) { + unusedName = unusedName.slice(process.cwd().length); + result['unused files'] = result['unused files'] || []; + result['unused files'].push({ + loc: unusedName, + message: unusedName + }); + } + } + } + return result; }; From 02a4c9a60b83753d33678c98ef0dcd5daf71c607 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Wed, 21 Jun 2017 12:55:18 +0300 Subject: [PATCH 5/7] pr comments: - decoupled flow and collectors - clear reporters --- lib/common/files.js | 4 -- lib/lint/command.js | 48 ++++++++++++++++++- .../flow-file-collector.js} | 6 +-- .../fs-files-collector.js} | 0 lib/lint/index.js | 15 +++--- lib/lint/reporter/parallel-process-warns.js | 39 +-------------- lib/lint/reporter/process-warns.js | 38 +-------------- lib/lint/{collectUsed => unused}/files.js | 34 +++++++++++-- 8 files changed, 90 insertions(+), 94 deletions(-) rename lib/lint/{collectUsed/fileCollector.js => helpers/flow-file-collector.js} (78%) rename lib/lint/{reporter/collectFiles.js => helpers/fs-files-collector.js} (100%) rename lib/lint/{collectUsed => unused}/files.js (60%) diff --git a/lib/common/files.js b/lib/common/files.js index 292a1dd..13303f3 100644 --- a/lib/common/files.js +++ b/lib/common/files.js @@ -57,14 +57,11 @@ function getRef(seed, type){ return seed[type].toString(36) + type; } -var lastFileId = 0; - /** * @class File */ function File(manager, cfg){ - this.uniqueId = lastFileId++; this.manager = manager; this.linkTo = []; this.linkBack = []; @@ -300,7 +297,6 @@ var FileManager = function(baseURI, relBaseURI, console, flow){ this.readInfo = []; // helpers - this.unixpath = unixpath; this.abspath = abspath; }; diff --git a/lib/lint/command.js b/lib/lint/command.js index 90eb9da..057310a 100644 --- a/lib/lint/command.js +++ b/lib/lint/command.js @@ -2,6 +2,7 @@ var path = require('path'); var clap = require.main.require('clap'); var common = require('../common/command'); var isChildProcess = typeof process.send == 'function'; // child process has send method +var collectFiles = require('./helpers/fs-files-collector'); function resolveCwd(value){ return path.resolve(process.env.PWD || process.cwd(), value); @@ -13,6 +14,49 @@ function normOptions(options){ return options; } +function handleUnusedFiles(tasks){ + var basePaths = {}; + var usedFiles = {}; + var unusedFiles = {}; + + // merge used files from tasks + tasks.forEach(function(task){ + if (task.result.usedFiles) + { + basePaths[task.result.usedFiles.collectPath] = true; + task.result.usedFiles.items.forEach(function(filename){ + usedFiles[task.result.usedFiles.basePath + filename] = true; + }); + } + }); + + if (Object.keys(basePaths).length) + { + var task = { name: 'unused files', result: { warnings: [] } }; + + // collect unused files + for (var basePath in basePaths) + { + var files = collectFiles(basePath); + + for (var fileName in files) + if (!usedFiles.hasOwnProperty(fileName)) + unusedFiles[fileName] = true; + } + + // warn about unused files + for (var unusedFile in unusedFiles) + { + unusedFile = unusedFile.slice(process.cwd().length); + task.result.warnings.push({ + file: unusedFile + }); + } + + tasks.push(task); + } +} + module.exports = clap.create('lint', '[fileOrPreset]') .description('Lint source code and output report') .extend(common, { preset: true }) @@ -20,7 +64,7 @@ module.exports = clap.create('lint', '[fileOrPreset]') .option('--no-color', 'Suppress color output') .option('--silent', 'No any output') - .option('--warn-unused-files ', 'Warn about unused files in specified path. Do not use with --js-cut-dev. It might cause incorrect result') + .option('--warn-unused-files ', 'Warn about unused files for specified path. Avoid using with --js-cut-dev since it might cause to incorrect results') .option('--filter ', 'Show warnings only for specified file', resolveCwd) .option('-r, --reporter ', 'Reporter console (default), checkstyle, junit', function(reporter){ @@ -54,6 +98,8 @@ module.exports.getParallelOptions = function(){ return { silent: true, callback: function(res){ + handleUnusedFiles(res); + var reporter = require(require('./reporter')[command.values.reporter]); var data = require('./reporter/parallel-process-warns.js')(res); console.log(reporter(data)); diff --git a/lib/lint/collectUsed/fileCollector.js b/lib/lint/helpers/flow-file-collector.js similarity index 78% rename from lib/lint/collectUsed/fileCollector.js rename to lib/lint/helpers/flow-file-collector.js index 04e2a4c..8659381 100644 --- a/lib/lint/collectUsed/fileCollector.js +++ b/lib/lint/helpers/flow-file-collector.js @@ -1,17 +1,17 @@ module.exports = function collectFiles(flow, callback){ var stack = [flow.files.queue[0]]; var collectedFiles = {}; - var handled = {}; + var handled = new WeakSet(); var cursor; while (cursor = stack.pop()) { // mark file as handled - handled[cursor.uniqueId] = true; + handled.add(cursor); callback(cursor); cursor.linkTo.forEach(function(link){ // prevent handling files that are already handled - if (link[0] && !handled[link[0].uniqueId]) { + if (link[0] && !handled.has(link[0])) { stack.push(link[0]); } }); diff --git a/lib/lint/reporter/collectFiles.js b/lib/lint/helpers/fs-files-collector.js similarity index 100% rename from lib/lint/reporter/collectFiles.js rename to lib/lint/helpers/fs-files-collector.js diff --git a/lib/lint/index.js b/lib/lint/index.js index b6d213b..a38423b 100644 --- a/lib/lint/index.js +++ b/lib/lint/index.js @@ -7,9 +7,7 @@ var extract = require('../extract'); var command = require('./command'); var chalk = require('chalk'); var isChildProcess = typeof process.send == 'function'; // child process has send method -var collectUsed = { - files: require('./collectUsed/files') -}; +var unusedFiles = require('./unused/files'); if (isChildProcess) process.on('uncaughtException', function(error){ @@ -95,10 +93,13 @@ function lint(config){ }).concat([ function(flow){ if (options.warnUnusedFiles) - collectUsed.files(flow); - }, - function(flow){ - flow.result = require('./reporter/process-warns')(flow, options); + { + flow.usedFiles = unusedFiles.collectUsed(flow); + if (!isChildProcess) + unusedFiles.warn(flow); + } + + flow.result = require('./reporter/process-warns')(flow.warns, options.filter); } ]); diff --git a/lib/lint/reporter/parallel-process-warns.js b/lib/lint/reporter/parallel-process-warns.js index 37ca62f..66bdc89 100644 --- a/lib/lint/reporter/parallel-process-warns.js +++ b/lib/lint/reporter/parallel-process-warns.js @@ -1,10 +1,5 @@ -var collectFiles = require('./collectFiles'); - module.exports = function(tasks){ var result = {}; - var basePaths = {}; - var usedFiles = {}; - var collectedFiles = {}; tasks.forEach(function(task){ var failures = result[task.name] = []; @@ -22,42 +17,10 @@ module.exports = function(tasks){ failures.push({ loc: warn.loc, - message: warn.message + ' at ' + filename + message: warn.message ? warn.message + ' at ' + filename : filename }); }); - - if (task.result.usedFiles) - { - basePaths[task.result.usedFiles.collectPath] = true; - task.result.usedFiles.items.forEach(function(filename){ - usedFiles[task.result.usedFiles.basePath + filename] = true; - }); - } }); - if (Object.keys(basePaths).length) - { - for (var basePath in basePaths) - { - var files = collectFiles(basePath); - - for (var fileName in files) - collectedFiles[fileName] = true; - } - - for (var usedFile in usedFiles) - delete collectedFiles[usedFile]; - - for (var unusedName in collectedFiles) - { - unusedName = unusedName.slice(process.cwd().length); - result['unused files'] = result['unused files'] || []; - result['unused files'].push({ - loc: unusedName, - message: unusedName - }); - } - } - return result; }; diff --git a/lib/lint/reporter/process-warns.js b/lib/lint/reporter/process-warns.js index e4a5c4e..9c1ecd3 100644 --- a/lib/lint/reporter/process-warns.js +++ b/lib/lint/reporter/process-warns.js @@ -1,10 +1,5 @@ -var isChildProcess = typeof process.send == 'function'; // child process has send method -var collectFiles = require('./collectFiles'); - -module.exports = function(flow, options){ +module.exports = function(warns, fileFilter){ var result = {}; - var warns = flow.warns; - var fileFilter = options.filter; warns.forEach(function(warn){ var filename = warn.file || ''; @@ -21,36 +16,5 @@ module.exports = function(flow, options){ }); }); - if (!isChildProcess) - { - var basePath; - var collectedFiles; - - if (options.warnUnusedFiles && flow.usedFiles) - { - var usedFilesInfo = flow.usedFiles; - var usedFiles = {}; - - basePath = usedFilesInfo.collectPath; - collectedFiles = collectFiles(basePath); - - usedFilesInfo.items.forEach(function(filename){ - usedFiles[usedFilesInfo.basePath + filename] = true; - }); - - for (var usedFile in usedFiles) - delete collectedFiles[usedFile]; - - for (var unusedName in collectedFiles) { - unusedName = unusedName.slice(process.cwd().length); - result['unused files'] = result['unused files'] || []; - result['unused files'].push({ - loc: unusedName, - message: unusedName - }); - } - } - } - return result; }; diff --git a/lib/lint/collectUsed/files.js b/lib/lint/unused/files.js similarity index 60% rename from lib/lint/collectUsed/files.js rename to lib/lint/unused/files.js index f8c93e3..4f1e7ac 100644 --- a/lib/lint/collectUsed/files.js +++ b/lib/lint/unused/files.js @@ -1,16 +1,17 @@ -var collect = require('./fileCollector'); +var flowFilesCollector = require('../helpers/flow-file-collector'); +var collectFiles = require('../helpers/fs-files-collector'); function isTarget(basePath, collectPath, file){ return file.filename && (basePath + file.filename).indexOf(collectPath + '/') === 0; } -module.exports = function collectUsedFiles(flow){ +exports.collectUsed = function(flow){ var options = flow.options; var basePath = options.base; var collectPath = flow.files.abspath(basePath, options.warnUnusedFiles); var usedFiles = {}; - collect(flow, function(file){ + flowFilesCollector(flow, function(file){ if (isTarget(basePath, collectPath, file)) usedFiles[file.filename] = true; @@ -43,9 +44,34 @@ module.exports = function collectUsedFiles(flow){ } }); - flow.usedFiles = { + return { basePath: basePath, collectPath: collectPath, items: Object.keys(usedFiles) }; }; + +exports.warn = function(flow){ + if (flow.options.warnUnusedFiles && flow.usedFiles) + { + var usedFilesInfo = flow.usedFiles; + var usedFiles = {}; + var basePath = usedFilesInfo.collectPath; + var collectedFiles = collectFiles(basePath); + + usedFilesInfo.items.forEach(function(filename){ + usedFiles[usedFilesInfo.basePath + filename] = true; + }); + + for (var usedFile in usedFiles) + delete collectedFiles[usedFile]; + + for (var unusedName in collectedFiles) { + unusedName = unusedName.slice(process.cwd().length); + flow.warn({ + file: 'unused files', + message: unusedName + }); + } + } +}; From 07ed3a8f228cd58bc890ff4037845dfd24a40745 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Thu, 22 Jun 2017 19:02:34 +0300 Subject: [PATCH 6/7] lint: moved parellel unused files reporter to separate module --- lib/lint/command.js | 45 +------------------ .../reporter/parallel-process-unused-files.js | 44 ++++++++++++++++++ 2 files changed, 45 insertions(+), 44 deletions(-) create mode 100644 lib/lint/reporter/parallel-process-unused-files.js diff --git a/lib/lint/command.js b/lib/lint/command.js index 057310a..27c9ecb 100644 --- a/lib/lint/command.js +++ b/lib/lint/command.js @@ -2,7 +2,7 @@ var path = require('path'); var clap = require.main.require('clap'); var common = require('../common/command'); var isChildProcess = typeof process.send == 'function'; // child process has send method -var collectFiles = require('./helpers/fs-files-collector'); +var handleUnusedFiles = require('./reporter/parallel-process-unused-files'); function resolveCwd(value){ return path.resolve(process.env.PWD || process.cwd(), value); @@ -14,49 +14,6 @@ function normOptions(options){ return options; } -function handleUnusedFiles(tasks){ - var basePaths = {}; - var usedFiles = {}; - var unusedFiles = {}; - - // merge used files from tasks - tasks.forEach(function(task){ - if (task.result.usedFiles) - { - basePaths[task.result.usedFiles.collectPath] = true; - task.result.usedFiles.items.forEach(function(filename){ - usedFiles[task.result.usedFiles.basePath + filename] = true; - }); - } - }); - - if (Object.keys(basePaths).length) - { - var task = { name: 'unused files', result: { warnings: [] } }; - - // collect unused files - for (var basePath in basePaths) - { - var files = collectFiles(basePath); - - for (var fileName in files) - if (!usedFiles.hasOwnProperty(fileName)) - unusedFiles[fileName] = true; - } - - // warn about unused files - for (var unusedFile in unusedFiles) - { - unusedFile = unusedFile.slice(process.cwd().length); - task.result.warnings.push({ - file: unusedFile - }); - } - - tasks.push(task); - } -} - module.exports = clap.create('lint', '[fileOrPreset]') .description('Lint source code and output report') .extend(common, { preset: true }) diff --git a/lib/lint/reporter/parallel-process-unused-files.js b/lib/lint/reporter/parallel-process-unused-files.js new file mode 100644 index 0000000..b82465c --- /dev/null +++ b/lib/lint/reporter/parallel-process-unused-files.js @@ -0,0 +1,44 @@ +var collectFiles = require('../helpers/fs-files-collector'); + +module.exports = function handleUnusedFiles(tasks){ + var basePaths = {}; + var usedFiles = {}; + var unusedFiles = {}; + + // merge used files from tasks + tasks.forEach(function(task){ + if (task.result.usedFiles) + { + basePaths[task.result.usedFiles.collectPath] = true; + task.result.usedFiles.items.forEach(function(filename){ + usedFiles[task.result.usedFiles.basePath + filename] = true; + }); + } + }); + + if (Object.keys(basePaths).length) + { + var task = { name: 'unused files', result: { warnings: [] } }; + + // collect unused files + for (var basePath in basePaths) + { + var files = collectFiles(basePath); + + for (var fileName in files) + if (!usedFiles.hasOwnProperty(fileName)) + unusedFiles[fileName] = true; + } + + // warn about unused files + for (var unusedFile in unusedFiles) + { + unusedFile = unusedFile.slice(process.cwd().length); + task.result.warnings.push({ + file: unusedFile + }); + } + + tasks.push(task); + } +}; From 20de27512b3fdda1004a3a546fa70b7e86a51220 Mon Sep 17 00:00:00 2001 From: Sergey Melyukov Date: Thu, 29 Jun 2017 11:39:05 +0300 Subject: [PATCH 7/7] lint: minor improvements to unused-files reporter --- .../reporter/parallel-process-unused-files.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/lib/lint/reporter/parallel-process-unused-files.js b/lib/lint/reporter/parallel-process-unused-files.js index b82465c..1e6db89 100644 --- a/lib/lint/reporter/parallel-process-unused-files.js +++ b/lib/lint/reporter/parallel-process-unused-files.js @@ -1,9 +1,9 @@ +var path = require('path'); var collectFiles = require('../helpers/fs-files-collector'); module.exports = function handleUnusedFiles(tasks){ var basePaths = {}; var usedFiles = {}; - var unusedFiles = {}; // merge used files from tasks tasks.forEach(function(task){ @@ -27,16 +27,13 @@ module.exports = function handleUnusedFiles(tasks){ for (var fileName in files) if (!usedFiles.hasOwnProperty(fileName)) - unusedFiles[fileName] = true; - } - - // warn about unused files - for (var unusedFile in unusedFiles) - { - unusedFile = unusedFile.slice(process.cwd().length); - task.result.warnings.push({ - file: unusedFile - }); + { + // warm about unused file + fileName = path.relative(process.cwd(), fileName); + task.result.warnings.push({ + file: fileName + }); + } } tasks.push(task);