Accept current workspace name as a flag

Stardoc will thus avoid looking for dependencies in the current workspace name within external/.
For example, if the current workspace is "io_bazel", then, when a file loads "@io_bazel//foo:bar.bzl", Stardoc will look to foo/bar.bzl instead of external/io_bazel/foo/bar.bzl

RELNOTES: None.
PiperOrigin-RevId: 239229374
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
index 1c93b24..328babb 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocMain.java
@@ -146,9 +146,11 @@
   private final Map<Path, Environment> loaded = new HashMap<>();
   private final SkylarkFileAccessor fileAccessor;
   private final List<String> depRoots;
+  private final String workspaceName;
 
-  public SkydocMain(SkylarkFileAccessor fileAccessor, List<String> depRoots) {
+  public SkydocMain(SkylarkFileAccessor fileAccessor, String workspaceName, List<String> depRoots) {
     this.fileAccessor = fileAccessor;
+    this.workspaceName = workspaceName;
     if (depRoots.isEmpty()) {
       // For backwards compatibility, if no dep_roots are specified, use the current
       // directory as the only root.
@@ -199,7 +201,7 @@
     ImmutableMap.Builder<String, ProviderInfo> providerInfoMap = ImmutableMap.builder();
     ImmutableMap.Builder<String, UserDefinedFunction> userDefinedFunctions = ImmutableMap.builder();
 
-    new SkydocMain(new FilesystemFileAccessor(), depRoots)
+    new SkydocMain(new FilesystemFileAccessor(), skydocOptions.workspaceName, depRoots)
         .eval(
             semanticsOptions.toSkylarkSemantics(),
             targetFileLabel,
@@ -431,9 +433,10 @@
   }
 
   private Path pathOfLabel(Label label) {
-    String workspacePrefix = label.getWorkspaceRoot().isEmpty()
-        ? ""
-        : label.getWorkspaceRoot() + "/";
+    String workspacePrefix = "";
+    if (!label.getWorkspaceRoot().isEmpty() && !label.getWorkspaceName().equals(workspaceName)) {
+      workspacePrefix = label.getWorkspaceRoot() + "/";
+    }
 
     return Paths.get(workspacePrefix + label.toPathFragment());
   }
diff --git a/src/main/java/com/google/devtools/build/skydoc/SkydocOptions.java b/src/main/java/com/google/devtools/build/skydoc/SkydocOptions.java
index 1a45913..d223e8c 100644
--- a/src/main/java/com/google/devtools/build/skydoc/SkydocOptions.java
+++ b/src/main/java/com/google/devtools/build/skydoc/SkydocOptions.java
@@ -32,6 +32,14 @@
   public String targetFileLabel;
 
   @Option(
+      name = "workspace_name",
+      defaultValue = "",
+      documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
+      effectTags = OptionEffectTag.UNKNOWN,
+      help = "The name of the workspace in which the input file resides")
+  public String workspaceName;
+
+  @Option(
       name = "output",
       defaultValue = "",
       documentationCategory = OptionDocumentationCategory.UNDOCUMENTED,
diff --git a/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java b/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java
index f3a67fc..9e96328 100644
--- a/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java
+++ b/src/test/java/com/google/devtools/build/skydoc/SkydocTest.java
@@ -66,6 +66,7 @@
                 return fileSystem.exists(fileSystem.getPath("/" + pathString));
               }
             },
+            "io_bazel",
             ImmutableList.of("/other_root", "."));
   }
 
@@ -261,6 +262,34 @@
   }
 
   @Test
+  public void testLoadOwnRepository() throws Exception {
+    scratch.file("/deps/foo/dep_rule.bzl", "def rule_impl(ctx):", "  return []");
+
+    scratch.file(
+        "/test/main.bzl",
+        "load('@io_bazel//deps/foo:dep_rule.bzl', 'rule_impl')",
+        "",
+        "main_rule = rule(",
+        "    doc = 'Main rule',",
+        "    implementation = rule_impl,",
+        ")");
+
+    ImmutableMap.Builder<String, RuleInfo> ruleInfoMapBuilder = ImmutableMap.builder();
+
+    skydocMain.eval(
+        StarlarkSemantics.DEFAULT_SEMANTICS,
+        Label.parseAbsoluteUnchecked("//test:main.bzl"),
+        ruleInfoMapBuilder,
+        ImmutableMap.builder(),
+        ImmutableMap.builder());
+
+    Map<String, RuleInfo> ruleInfoMap = ruleInfoMapBuilder.build();
+
+    assertThat(ruleInfoMap.keySet()).containsExactly("main_rule");
+    assertThat(ruleInfoMap.get("main_rule").getDocString()).isEqualTo("Main rule");
+  }
+
+  @Test
   public void testSkydocCrashesOnCycle() throws Exception {
     scratch.file(
         "/dep/dep.bzl",