Added information about function params in builtin proto file.
RELNOTES: None
PiperOrigin-RevId: 212796678
diff --git a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
index c4b9327..af055ae 100644
--- a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
+++ b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java
@@ -140,11 +140,41 @@
Value.Builder value = Value.newBuilder();
value.setName(func.getName());
Callable.Builder callable = Callable.newBuilder();
- ImmutableList<String> paramNames = func.getSignature().getSignature().getNames();
- for (int i = 0; i < paramNames.size(); i++) {
+ ImmutableList<String> paramNames = func.getSignature().getSignature().getNames();
+ List<Object> defaultValues = func.getSignature().getDefaultValues();
+ int positionals = func.getSignature().getSignature().getShape().getMandatoryPositionals();
+ int optionals = func.getSignature().getSignature().getShape().getOptionals();
+ int nameIndex = 0;
+
+ for (int i = 0; i < positionals; i++) {
Param.Builder param = Param.newBuilder();
- param.setName(paramNames.get(i));
+ param.setName(paramNames.get(nameIndex));
+ param.setIsMandatory(true);
+ callable.addParam(param);
+ nameIndex++;
+ }
+
+ for (int i = 0; i < optionals; i++) {
+ Param.Builder param = Param.newBuilder();
+ param.setName(paramNames.get(nameIndex));
+ param.setIsMandatory(false);
+ param.setDefaultValue(defaultValues.get(i).toString());
+ callable.addParam(param);
+ nameIndex++;
+ }
+
+ if (func.getSignature().getSignature().getShape().hasStarArg()) {
+ Param.Builder param = Param.newBuilder();
+ param.setName("*" + paramNames.get(nameIndex));
+ param.setIsMandatory(false);
+ nameIndex++;
+ callable.addParam(param);
+ }
+ if (func.getSignature().getSignature().getShape().hasKwArg()) {
+ Param.Builder param = Param.newBuilder();
+ param.setIsMandatory(false);
+ param.setName("**" + paramNames.get(nameIndex));
callable.addParam(param);
}
if (func.getObjectType() != null) {
@@ -165,6 +195,7 @@
param.setName(par.getName());
param.setType(par.getType());
param.setDoc(par.getDocumentation());
+ param.setIsMandatory(par.getDefaultValue().isEmpty());
param.setDefaultValue(par.getDefaultValue());
callable.addParam(param);
}
@@ -185,6 +216,7 @@
for (RuleDocumentationAttribute attr : rule.getAttributes()) {
Param.Builder param = Param.newBuilder();
param.setName(attr.getAttributeName());
+ param.setIsMandatory(attr.isMandatory());
callable.addParam(param);
}
value.setCallable(callable);
diff --git a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
index 5f543f9..cac1303 100644
--- a/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
+++ b/src/main/java/com/google/devtools/build/docgen/RuleDocumentationAttribute.java
@@ -147,6 +147,14 @@
return expandedHtmlDoc;
}
+ /** Returns whether the param is required or optional. */
+ public boolean isMandatory() {
+ if (attribute == null) {
+ return false;
+ }
+ return attribute.isMandatory();
+ }
+
private String getDefaultValue() {
if (attribute == null) {
return "";
diff --git a/src/main/protobuf/builtin.proto b/src/main/protobuf/builtin.proto
index 9ca7f54..10e3711 100644
--- a/src/main/protobuf/builtin.proto
+++ b/src/main/protobuf/builtin.proto
@@ -96,4 +96,7 @@
// Default value for the parameter, written as Skylark expression (e.g.
// "False", "True", "[]", "None")
string default_value = 4;
+
+ // Whether the param is mandatory or optional.
+ bool is_mandatory = 5;
}