Add support for additional edge cases to RuleLinkExpander.
* Add support for rules with capital letters, such as Fileset
* Add support for static page headings with periods.
* Run the expander on the HTML doc for the name attribute.
* Add functions to initial rule index.
--
MOS_MIGRATED_REVID=115925884
diff --git a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
index d50a299..da7a1da 100644
--- a/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
+++ b/src/main/java/com/google/devtools/build/docgen/DocgenConsts.java
@@ -100,7 +100,7 @@
* (e.g. common-definitions.label-expansion).
*/
public static final Pattern BLAZE_RULE_LINK = Pattern.compile(
- "\\$\\{link (([a-z_-]+)(\\.([a-z_-]+))?)\\}");
+ "\\$\\{link (([a-zA-Z_-]+)(\\.([a-zA-Z_\\.-]+))?)\\}");
/**
* i.e. <!-- #BLAZE_RULE(NAME = RULE_NAME, TYPE = RULE_TYPE, FAMILY = RULE_FAMILY) -->
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java
index 2fec7c4..f173bdf 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentation.java
@@ -209,10 +209,18 @@
* Returns a string containing any extra documentation for the name attribute for this
* rule.
*/
- public String getNameExtraHtmlDoc() {
- return docVariables.containsKey(DocgenConsts.VAR_NAME)
+ public String getNameExtraHtmlDoc() throws BuildEncyclopediaDocException {
+ String expandedDoc = docVariables.containsKey(DocgenConsts.VAR_NAME)
? docVariables.get(DocgenConsts.VAR_NAME)
: "";
+ if (linkExpander != null) {
+ try {
+ expandedDoc = linkExpander.expand(expandedDoc);
+ } catch (IllegalArgumentException e) {
+ throw new BuildEncyclopediaDocException(fileName, startLineCount, e.getMessage());
+ }
+ }
+ return expandedDoc;
}
/**
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java b/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
index 8ac8cbc..65147d0 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleLinkExpander.java
@@ -13,8 +13,10 @@
// limitations under the License.
package com.google.devtools.build.docgen;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
+import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
@@ -28,16 +30,32 @@
class RuleLinkExpander {
private static final String EXAMPLES_SUFFIX = "_examples";
private static final String ARGS_SUFFIX = "_args";
+ private static final String FUNCTIONS_PAGE = "functions";
private static final Set<String> STATIC_PAGES = ImmutableSet.<String>of(
"common-definitions",
"make-variables",
"predefined-python-variables");
+ private static final Map<String, String> FUNCTIONS = ImmutableMap.<String, String>builder()
+ .put("load", FUNCTIONS_PAGE)
+ .put("subinclude", FUNCTIONS_PAGE)
+ .put("PYTHON-PREPROCESSING-REQUIRED", FUNCTIONS_PAGE)
+ .put("package", FUNCTIONS_PAGE)
+ .put("package_group", FUNCTIONS_PAGE)
+ .put("description", FUNCTIONS_PAGE)
+ .put("distribs", FUNCTIONS_PAGE)
+ .put("licenses", FUNCTIONS_PAGE)
+ .put("exports_files", FUNCTIONS_PAGE)
+ .put("glob", FUNCTIONS_PAGE)
+ .put("select", FUNCTIONS_PAGE)
+ .put("workspace", FUNCTIONS_PAGE)
+ .build();
- private final Map<String, String> ruleIndex;
+ private final Map<String, String> ruleIndex = new HashMap<>();
RuleLinkExpander(Map<String, String> ruleIndex) {
- this.ruleIndex = ruleIndex;
+ this.ruleIndex.putAll(ruleIndex);
+ this.ruleIndex.putAll(FUNCTIONS);
}
private void appendRuleLink(Matcher matcher, StringBuffer sb, String ruleName, String ref) {
diff --git a/src/test/java/com/google/devtools/build/docgen/RuleLinkExpanderTest.java b/src/test/java/com/google/devtools/build/docgen/RuleLinkExpanderTest.java
index 2694b0e..60e6377 100644
--- a/src/test/java/com/google/devtools/build/docgen/RuleLinkExpanderTest.java
+++ b/src/test/java/com/google/devtools/build/docgen/RuleLinkExpanderTest.java
@@ -32,6 +32,7 @@
.put("cc_library", "c-cpp")
.put("cc_binary", "c-cpp")
.put("java_binary", "java")
+ .put("Fileset", "fileset")
.put("proto_library", "protocol-buffer")
.build());
}
@@ -48,6 +49,12 @@
assertEquals(expected, expander.expand(docs));
}
+ @Test public void testUpperCaseRule() {
+ String docs = "<a href=\"${link Fileset.entries}\">entries</a>";
+ String expected = "<a href=\"fileset.html#Fileset.entries\">entries</a>";
+ assertEquals(expected, expander.expand(docs));
+ }
+
@Test public void testRuleExamples() {
String docs = "<a href=\"${link cc_binary_examples}\">examples</a>";
String expected = "<a href=\"c-cpp.html#cc_binary_examples\">examples</a>";
@@ -72,6 +79,14 @@
assertEquals(expected, expander.expand(docs));
}
+ @Test public void testStaticPageWithPeriodsInHeading() {
+ String docs =
+ "<a href=\"${link make-variables.predefined_variables.genrule.cmd}\">genrule cmd</a>";
+ String expected =
+ "<a href=\"make-variables.html#predefined_variables.genrule.cmd\">genrule cmd</a>";
+ assertEquals(expected, expander.expand(docs));
+ }
+
@Test(expected = IllegalArgumentException.class)
public void testRefNotFound() {
String docs = "<a href=\"${link foo.bar}\">bar</a>";