Show "did you mean" suggestion for `{override,inject}_repo`
Fixes #23981
Closes #23982.
PiperOrigin-RevId: 686486627
Change-Id: I5f03b63601a535f8d551c005b00bf040846a324d
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD
index d422935..8edaa29 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/BUILD
@@ -191,6 +191,7 @@
"//src/main/java/com/google/devtools/build/skyframe:skyframe-objects",
"//src/main/java/net/starlark/java/annot",
"//src/main/java/net/starlark/java/eval",
+ "//src/main/java/net/starlark/java/spelling",
"//src/main/java/net/starlark/java/syntax",
"//src/main/protobuf:failure_details_java_proto",
"//third_party:auto_value",
diff --git a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java
index 20cb8d2..98067f0 100644
--- a/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java
+++ b/src/main/java/com/google/devtools/build/lib/bazel/bzlmod/ModuleThreadContext.java
@@ -38,6 +38,7 @@
import net.starlark.java.eval.EvalException;
import net.starlark.java.eval.Starlark;
import net.starlark.java.eval.StarlarkThread;
+import net.starlark.java.spelling.SpellChecker;
import net.starlark.java.syntax.Location;
/** Context object for a Starlark thread evaluating the MODULE.bazel file and files it includes. */
@@ -255,8 +256,11 @@
if (!context.repoNameUsages.containsKey(overridingRepoName)) {
throw Starlark.errorf(
"The repo exported as '%s' by module extension '%s' is overridden with '%s', but"
- + " no repo is visible under this name",
- overriddenRepoName, extensionName, overridingRepoName)
+ + " no repo is visible under this name%s",
+ overriddenRepoName,
+ extensionName,
+ overridingRepoName,
+ SpellChecker.didYouMean(overridingRepoName, context.repoNameUsages.keySet()))
.withCallStack(override.getValue().stack);
}
String importedAs = imports.inverse().get(overriddenRepoName);