diff options
author | fzaiser <fzaiser@google.com> | 2017-11-07 20:41:02 +0100 |
---|---|---|
committer | Damien Martin-Guillerez <dmarting@google.com> | 2017-11-07 20:57:24 +0100 |
commit | 7b2045e59a0ee438867acd3b11c9c6d98dcd9690 (patch) | |
tree | 471058e11a479d2ae95195a710a05753ce2c8b07 /src/tools/skylark | |
parent | 7cca1a83761a2c6e4dfca73fbc762cbe318f410b (diff) |
Linter: allow disabling individual categories in addition to checks
While at it, I added a flag "--single-file" that turns on single file mode. In this mode, only the specified file will be read (there is no dependency analysis).
RELNOTES: none
PiperOrigin-RevId: 174888506
Diffstat (limited to 'src/tools/skylark')
-rw-r--r-- | src/tools/skylark/java/com/google/devtools/skylark/skylint/Linter.java | 26 | ||||
-rw-r--r-- | src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint.java | 39 |
2 files changed, 48 insertions, 17 deletions
diff --git a/src/tools/skylark/java/com/google/devtools/skylark/skylint/Linter.java b/src/tools/skylark/java/com/google/devtools/skylark/skylint/Linter.java index a97936d6ee..3f4f54467f 100644 --- a/src/tools/skylark/java/com/google/devtools/skylark/skylint/Linter.java +++ b/src/tools/skylark/java/com/google/devtools/skylark/skylint/Linter.java @@ -68,14 +68,16 @@ public class Linter { } }; + private boolean singleFileMode = false; private final Set<String> disabledChecks = new LinkedHashSet<>(); + private final Set<String> disabledCategories = new LinkedHashSet<>(); public Linter setFileContentsReader(FileFacade reader) { this.fileFacade = reader; return this; } - public Linter disable(String checkName) { + public Linter disableCheck(String checkName) { if (!nameToCheck.containsKey(checkName)) { throw new IllegalArgumentException("Unknown check '" + checkName + "' cannot be disabled."); } @@ -83,6 +85,17 @@ public class Linter { return this; } + public Linter disableCategory(String categoryName) { + disabledCategories.add(categoryName); + return this; + } + + /** Disables checks that require analyzing multiple files. */ + public Linter setSingleFileMode() { + singleFileMode = true; + return this; + } + /** * Runs all checks on the given file. * @@ -108,12 +121,15 @@ public class Linter { } issues.addAll(entry.getValue().check(ast)); } - for (Entry<String, MultiFileCheck> entry : nameToMultiFileCheck.entrySet()) { - if (disabledChecks.contains(entry.getKey())) { - continue; + if (!singleFileMode) { + for (Entry<String, MultiFileCheck> entry : nameToMultiFileCheck.entrySet()) { + if (disabledChecks.contains(entry.getKey())) { + continue; + } + issues.addAll(entry.getValue().check(path, ast, fileFacade)); } - issues.addAll(entry.getValue().check(path, ast, fileFacade)); } + issues.removeIf(issue -> disabledCategories.contains(issue.category)); issues.sort(Issue::compareLocation); return issues; } diff --git a/src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint.java b/src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint.java index 010d28460d..4109ad38d2 100644 --- a/src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint.java +++ b/src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint.java @@ -24,26 +24,24 @@ import java.util.List; /** The main class for the skylint binary. */ public class Skylint { public static void main(String[] args) { + Linter linter = new Linter(); List<Path> paths = new ArrayList<>(); - List<String> disabledChecks = new ArrayList<>(); for (String arg : args) { - if (arg.startsWith("--disable=")) { - String[] checks = arg.substring("--disable=".length()).split(","); - for (String check : checks) { - if (check.isEmpty()) { - continue; - } - disabledChecks.add(check); + if (arg.equals("--single-file")) { + linter.setSingleFileMode(); + } else if (arg.startsWith("--disable-categories=")) { + for (String categoryName : parseArgumentList(arg, "--disable-categories=")) { + linter.disableCategory(categoryName); + } + } else if (arg.startsWith("--disable-checks=")) { + for (String checkName : parseArgumentList(arg, "--disable-checks=")) { + linter.disableCheck(checkName); } } else { paths.add(Paths.get(arg)); } } boolean issuesFound = false; - Linter linter = new Linter(); - for (String checkerName : disabledChecks) { - linter.disable(checkerName); - } for (Path path : paths) { List<Issue> issues; try { @@ -67,4 +65,21 @@ public class Skylint { } System.exit(issuesFound ? 1 : 0); } + + /** Removes the prefix from the argument and returns the list of comma-separated items. */ + private static List<String> parseArgumentList(String arg, String prefix) { + if (!arg.startsWith(prefix)) { + throw new IllegalArgumentException("Argument doesn't start with prefix " + prefix); + } + List<String> list = new ArrayList<>(); + String[] items = arg.substring(prefix.length()).split(","); + for (String item : items) { + item = item.trim(); + if (item.isEmpty()) { + continue; + } + list.add(item); + } + return list; + } } |