From 123605f21b4cfe31310acf51fc164d7fe4dc4bb0 Mon Sep 17 00:00:00 2001 From: Tim Schaub Date: Sun, 7 Aug 2016 17:51:23 -0600 Subject: [PATCH] Make no-unused-requires rule fixable --- test/rules/no-unused-requires.js | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/test/rules/no-unused-requires.js b/test/rules/no-unused-requires.js index 663d1d63d2..1606d68ad4 100644 --- a/test/rules/no-unused-requires.js +++ b/test/rules/no-unused-requires.js @@ -29,6 +29,7 @@ exports.rule = { docs: { description: 'disallow unused goog.require() calls' }, + fixable: 'code', schema: [] }, create: function(context) { @@ -55,7 +56,15 @@ exports.rule = { if (name in requireNodes) { return context.report(node, `Duplicate goog.require('${name}')`); } - requireNodes[name] = node; + const ancestors = context.getAncestors(); + const parent = ancestors[ancestors.length - 1]; + if (!parent || parent.type !== 'ExpressionStatement') { + return context.report(node, 'Expected goog.require() to be in an expression statement'); + } + requireNodes[name] = { + expression: node, + statement: parent + }; } }, @@ -90,7 +99,18 @@ exports.rule = { for (let name in requireNodes) { if (!usedNames[name]) { const unusedRequire = requireNodes[name]; - context.report(unusedRequire, `Unused ${source.getText(unusedRequire)}`); + context.report({ + node: unusedRequire.expression, + message: `Unused ${source.getText(unusedRequire.expression)}`, + fix: function(fixer) { + const afterToken = source.getTokenAfter(unusedRequire.statement); + const range = [ + unusedRequire.statement.range[0], + afterToken ? afterToken.range[0] : unusedRequire.statement.range[1] + ]; + return fixer.removeRange(range); + } + }); } } }