aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java21
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java12
-rw-r--r--src/main/java/com/google/devtools/build/skydoc/rendering/AttributeInfo.java2
-rw-r--r--src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt46
-rw-r--r--src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl36
5 files changed, 94 insertions, 23 deletions
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
index cdf8ef1f6e..01b64c1b4d 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeProviderApi.java
@@ -16,11 +16,28 @@ package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.devtools.build.lib.skylarkbuildapi.ProviderApi;
import com.google.devtools.build.lib.skylarkinterface.SkylarkPrinter;
+import com.google.devtools.build.lib.syntax.BaseFunction;
+import com.google.devtools.build.lib.syntax.Environment;
+import com.google.devtools.build.lib.syntax.EvalException;
+import com.google.devtools.build.lib.syntax.FuncallExpression;
+import com.google.devtools.build.lib.syntax.FunctionSignature;
+import javax.annotation.Nullable;
/**
- * Fake implementation of {@link ProviderApi}.
+ * Fake implementation of {@link ProviderApi}. This fake is a subclass of {@link BaseFunction},
+ * as providers are themselves callable.
*/
-public class FakeProviderApi implements ProviderApi {
+public class FakeProviderApi extends BaseFunction implements ProviderApi {
+
+ public FakeProviderApi() {
+ super("ProviderFunction", FunctionSignature.WithValues.create(FunctionSignature.KWARGS));
+ }
+
+ @Override
+ protected Object call(Object[] args, @Nullable FuncallExpression ast, Environment env)
+ throws EvalException, InterruptedException {
+ return new FakeStructApi();
+ }
@Override
public void repr(SkylarkPrinter printer) {}
diff --git a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
index e75a483829..f86c455f45 100644
--- a/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
+++ b/src/main/java/com/google/devtools/build/skydoc/fakebuildapi/FakeSkylarkRuleFunctionsApi.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.skydoc.fakebuildapi;
import com.google.common.collect.ImmutableMap;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.cmdline.LabelSyntaxException;
import com.google.devtools.build.lib.events.Location;
import com.google.devtools.build.lib.skylarkbuildapi.FileApi;
import com.google.devtools.build.lib.skylarkbuildapi.FileTypeApi;
@@ -61,7 +62,7 @@ public class FakeSkylarkRuleFunctionsApi implements SkylarkRuleFunctionsApi<File
@Override
public ProviderApi provider(String doc, Object fields, Location location) throws EvalException {
- return null;
+ return new FakeProviderApi();
}
@Override
@@ -97,7 +98,14 @@ public class FakeSkylarkRuleFunctionsApi implements SkylarkRuleFunctionsApi<File
@Override
public Label label(String labelString, Boolean relativeToCallerRepository, Location loc,
Environment env) throws EvalException {
- return null;
+ try {
+ return Label.parseAbsolute(
+ labelString,
+ /* defaultToMain= */ false,
+ /* repositoryMapping= */ ImmutableMap.of());
+ } catch (LabelSyntaxException e) {
+ throw new EvalException(loc, "Illegal absolute label syntax: " + labelString);
+ }
}
@Override
diff --git a/src/main/java/com/google/devtools/build/skydoc/rendering/AttributeInfo.java b/src/main/java/com/google/devtools/build/skydoc/rendering/AttributeInfo.java
index 696fe2deb6..3824696527 100644
--- a/src/main/java/com/google/devtools/build/skydoc/rendering/AttributeInfo.java
+++ b/src/main/java/com/google/devtools/build/skydoc/rendering/AttributeInfo.java
@@ -26,7 +26,7 @@ public class AttributeInfo {
public AttributeInfo(String name, String docString, String typeString, boolean mandatory) {
this.name = name;
- this.docString = docString;
+ this.docString = docString.trim();
this.typeString = typeString;
this.mandatory = mandatory;
}
diff --git a/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt
index 810c90bfb7..6ce7cdfb54 100644
--- a/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt
+++ b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/golden.txt
@@ -2,7 +2,7 @@
## my_rule
<pre>
-my_rule(name, first, fourth, second, third)
+my_rule(name, deps, extra_arguments, out, src, tool)
</pre>
This rule exercises some of the build API.
@@ -24,28 +24,48 @@ This rule exercises some of the build API.
</p>
</td>
</tr>
- <tr id="#my_rule_first">
- <td><code>first</code></td>
+ <tr id="#my_rule_deps">
+ <td><code>deps</code></td>
<td>
- Label; required
+ List of labels; optional
+ <p>
+ A list of dependencies.
+These dependencies better provide MyInfo!
+...or else.
+ </p>
</td>
</tr>
- <tr id="#my_rule_fourth">
- <td><code>fourth</code></td>
+ <tr id="#my_rule_extra_arguments">
+ <td><code>extra_arguments</code></td>
<td>
- Boolean; optional
+ List of strings; optional
</td>
</tr>
- <tr id="#my_rule_second">
- <td><code>second</code></td>
+ <tr id="#my_rule_out">
+ <td><code>out</code></td>
<td>
- Dictionary: String -> String; required
+ Label; required
+ <p>
+ The output file.
+ </p>
</td>
</tr>
- <tr id="#my_rule_third">
- <td><code>third</code></td>
+ <tr id="#my_rule_src">
+ <td><code>src</code></td>
<td>
- Label; required
+ Label; optional
+ <p>
+ The source file.
+ </p>
+ </td>
+ </tr>
+ <tr id="#my_rule_tool">
+ <td><code>tool</code></td>
+ <td>
+ Label; optional
+ <p>
+ The location of the tool to use.
+ </p>
</td>
</tr>
</tbody>
diff --git a/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl
index 39ca085697..10ef29d783 100644
--- a/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl
+++ b/src/test/java/com/google/devtools/build/skydoc/testdata/misc_apis_test/input.bzl
@@ -9,13 +9,39 @@ def exercise_the_api():
exercise_the_api()
+MyInfo = provider(
+ fields = {
+ "foo": "Something foo-related.",
+ "bar": "Something bar-related.",
+ },
+)
+
+my_info = MyInfo(foo="x", bar="y")
+
my_rule = rule(
implementation = my_rule_impl,
doc = "This rule exercises some of the build API.",
attrs = {
- "first": attr.label(mandatory = True, allow_files = True, single_file = True),
- "second": attr.string_dict(mandatory = True),
- "third": attr.output(mandatory = True),
- "fourth": attr.bool(default = False, mandatory = False),
- },
+ "src": attr.label(
+ doc = "The source file.",
+ allow_files = [".bzl"]),
+ "deps": attr.label_list(
+ doc = """
+A list of dependencies.
+These dependencies better provide MyInfo!
+...or else.
+""",
+ providers = [MyInfo],
+ allow_files = False),
+ "tool": attr.label(
+ doc = "The location of the tool to use.",
+ allow_files = True,
+ default = Label("//foo/bar/baz:target",),
+ cfg = "host",
+ executable = True),
+ "out": attr.output(
+ doc = "The output file.",
+ mandatory = True),
+ "extra_arguments": attr.string_list(default = []),
+ }
)