feat: warn when it looks like you're using ignore instead of exclude directive (#1955)
**What type of PR is this?**
Feature
**What package or component does this PR mostly affect?**
all
**What does this PR do? Why is it needed?**
`ignore` and `exclude` are somewhat confusing directive names, and are
easily mixed up. Show a warning when using the `gazelle:ignore`
directive with an argument.
I've seen many places where people do something like `# gazelle:ignore
testdata` and accidentally disable gazelle for the entire directory and
subdirectories. This can be seen in [many public github
repos](https://github.com/search?q=%2F%23+gazelle%3Aignore+.%2F+language%3AStarlark&type=code&l=Starlark).
**Other notes for review**
Add a new generated test directory to assert that the warning is shown
correctly.
diff --git a/tests/warns_on_invalid_directive_use/BUILD.in b/tests/warns_on_invalid_directive_use/BUILD.in
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/BUILD.in
diff --git a/tests/warns_on_invalid_directive_use/BUILD.out b/tests/warns_on_invalid_directive_use/BUILD.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/BUILD.out
diff --git a/tests/warns_on_invalid_directive_use/README.md b/tests/warns_on_invalid_directive_use/README.md
new file mode 100644
index 0000000..eb7a1d5
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/README.md
@@ -0,0 +1 @@
+# Gazelle warns on invalid directive use
diff --git a/tests/warns_on_invalid_directive_use/WORKSPACE b/tests/warns_on_invalid_directive_use/WORKSPACE
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/WORKSPACE
diff --git a/tests/warns_on_invalid_directive_use/arguments.txt b/tests/warns_on_invalid_directive_use/arguments.txt
new file mode 100644
index 0000000..06ec517
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/arguments.txt
@@ -0,0 +1,2 @@
+-lang
+nolang
diff --git a/tests/warns_on_invalid_directive_use/expectedExitCode.txt b/tests/warns_on_invalid_directive_use/expectedExitCode.txt
new file mode 100644
index 0000000..c227083
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/expectedExitCode.txt
@@ -0,0 +1 @@
+0
\ No newline at end of file
diff --git a/tests/warns_on_invalid_directive_use/expectedStderr.txt b/tests/warns_on_invalid_directive_use/expectedStderr.txt
new file mode 100644
index 0000000..d05bbc2
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/expectedStderr.txt
@@ -0,0 +1 @@
+gazelle: the ignore directive does not take any arguments. Did you mean to use gazelle:exclude instead? in //ignore_directive '# gazelle:ignore *.go'
diff --git a/tests/warns_on_invalid_directive_use/ignore_directive/BUILD.in b/tests/warns_on_invalid_directive_use/ignore_directive/BUILD.in
new file mode 100644
index 0000000..dd13206
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/ignore_directive/BUILD.in
@@ -0,0 +1,4 @@
+# gazelle:ignore *.go
+
+# valid use, but trailing whitespace should not warn
+# gazelle:ignore
diff --git a/tests/warns_on_invalid_directive_use/ignore_directive/BUILD.out b/tests/warns_on_invalid_directive_use/ignore_directive/BUILD.out
new file mode 100644
index 0000000..dd13206
--- /dev/null
+++ b/tests/warns_on_invalid_directive_use/ignore_directive/BUILD.out
@@ -0,0 +1,4 @@
+# gazelle:ignore *.go
+
+# valid use, but trailing whitespace should not warn
+# gazelle:ignore
diff --git a/walk/config.go b/walk/config.go
index 4fecedd..a439127 100644
--- a/walk/config.go
+++ b/walk/config.go
@@ -95,6 +95,9 @@
}
wcCopy.follow = append(wcCopy.follow, path.Join(rel, d.Value))
case "ignore":
+ if d.Value != "" {
+ log.Printf("the ignore directive does not take any arguments. Did you mean to use gazelle:exclude instead? in //%s '# gazelle:ignore %s'", f.Pkg, d.Value)
+ }
wcCopy.ignore = true
}
}