diff options
author | Googler <noreply@google.com> | 2018-07-17 03:50:24 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-07-17 03:51:47 -0700 |
commit | 715a7728e7e4a427c8d76545933f86bce5ddfbd9 (patch) | |
tree | 7919b33176e9cf1bd762c446b899768acd625e89 /src/main/java/com/google | |
parent | 0451f1b3e8fe11dc6da021c9c137ae68255aa472 (diff) |
Expose BUILD and Starlark symbols.
PiperOrigin-RevId: 204889082
Diffstat (limited to 'src/main/java/com/google')
-rw-r--r-- | src/main/java/com/google/devtools/build/docgen/ApiExporter.java | 102 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/docgen/BUILD | 1 |
2 files changed, 103 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/docgen/ApiExporter.java b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java new file mode 100644 index 0000000000..2c6e59cf6f --- /dev/null +++ b/src/main/java/com/google/devtools/build/docgen/ApiExporter.java @@ -0,0 +1,102 @@ +// Copyright 2018 The Bazel Authors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package com.google.devtools.build.docgen; + +import com.google.devtools.build.docgen.builtin.BuiltinProtos.Builtins; +import com.google.devtools.build.docgen.builtin.BuiltinProtos.Callable; +import com.google.devtools.build.docgen.builtin.BuiltinProtos.Param; +import com.google.devtools.build.docgen.builtin.BuiltinProtos.Type; +import com.google.devtools.build.docgen.builtin.BuiltinProtos.Value; +import com.google.devtools.build.docgen.skylark.SkylarkBuiltinMethodDoc; +import com.google.devtools.build.docgen.skylark.SkylarkMethodDoc; +import com.google.devtools.build.docgen.skylark.SkylarkModuleDoc; +import com.google.devtools.build.docgen.skylark.SkylarkParamDoc; +import com.google.devtools.build.lib.util.Classpath.ClassPathException; +import java.io.BufferedOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Map; + +/** The main class for the Skylark documentation generator. */ +public class ApiExporter { + + private static void appendBuiltins(String builtinsFile) { + try (BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(builtinsFile))) { + Builtins.Builder builtins = Builtins.newBuilder(); + + Map<String, SkylarkModuleDoc> allTypes = SkylarkDocumentationCollector.collectModules(); + for (Map.Entry<String, SkylarkModuleDoc> modEntry : allTypes.entrySet()) { + SkylarkModuleDoc mod = modEntry.getValue(); + + // Include SkylarkModuleDoc in Builtins as a Type. + Type.Builder type = Type.newBuilder(); + type.setName(mod.getName()); + type.setDoc(mod.getDocumentation()); + for (SkylarkMethodDoc meth : mod.getJavaMethods()) { + type.addField(collectFieldInfo(meth)); + } + builtins.addType(type); + + // Include SkylarkModuleDoc in Builtins as a Value. + Value.Builder value = Value.newBuilder(); + value.setName(mod.getName()); + value.setDoc(mod.getDocumentation()); + builtins.addGlobal(value); + + // Add all global variables and functions in Builtins as Values. + for (Map.Entry<String, SkylarkBuiltinMethodDoc> methEntry : + mod.getBuiltinMethods().entrySet()) { + SkylarkBuiltinMethodDoc meth = methEntry.getValue(); + builtins.addGlobal(collectFieldInfo(meth)); + } + } + Builtins build = builtins.build(); + build.writeTo(out); + } catch (IOException | ClassPathException e) { + System.err.println(e); + } + } + + private static Value.Builder collectFieldInfo(SkylarkMethodDoc meth) { + Value.Builder field = Value.newBuilder(); + field.setName(meth.getName()); + field.setDoc(meth.getDocumentation()); + // TODO(andreeabican): Add type string. + + if (!meth.getParams().isEmpty()) { + Callable.Builder callable = Callable.newBuilder(); + for (SkylarkParamDoc par : meth.getParams()) { + Param.Builder param = Param.newBuilder(); + param.setName(par.getName()); + param.setType(par.getType()); + param.setDoc(par.getDocumentation()); + callable.addParam(param); + } + // TODO(andreeabican): Add type string. + field.setCallable(callable); + } + return field; + } + + public static void main(String[] args) { + if (args.length != 1) { + throw new IllegalArgumentException( + "Expected one argument. Usage:\n" + "{api_exporter_bin} {builtin_output_file}"); + } + + String builtinsProtoFile = args[0]; + + appendBuiltins(builtinsProtoFile); + } +} diff --git a/src/main/java/com/google/devtools/build/docgen/BUILD b/src/main/java/com/google/devtools/build/docgen/BUILD index b62b58348a..7ea02a4784 100644 --- a/src/main/java/com/google/devtools/build/docgen/BUILD +++ b/src/main/java/com/google/devtools/build/docgen/BUILD @@ -24,6 +24,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/rules/objc", "//src/main/java/com/google/devtools/build/lib/rules/platform", "//src/main/java/com/google/devtools/common/options", + "//src/main/protobuf:builtin_java_proto", "//third_party:apache_velocity", "//third_party:guava", "//third_party:jsr305", |