aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/tools/skylark
diff options
context:
space:
mode:
authorGravatar fzaiser <fzaiser@google.com>2017-11-07 20:41:02 +0100
committerGravatar Damien Martin-Guillerez <dmarting@google.com>2017-11-07 20:57:24 +0100
commit7b2045e59a0ee438867acd3b11c9c6d98dcd9690 (patch)
tree471058e11a479d2ae95195a710a05753ce2c8b07 /src/tools/skylark
parent7cca1a83761a2c6e4dfca73fbc762cbe318f410b (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.java26
-rw-r--r--src/tools/skylark/java/com/google/devtools/skylark/skylint/Skylint.java39
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;
+ }
}