Remove a number of files related to legacy skydoc (#3)
diff --git a/.gitignore b/.gitignore
index 7c504ec..a7f7d95 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,7 +8,7 @@
/.settings
/WORKSPACE.user.bzl
/base_workspace/*
-/bazel-skydoc
+/bazel-stardoc
/bazel-bin
/bazel-genfiles
/bazel-out
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index e8e0f12..c186cc2 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -9,4 +9,7 @@
# Names should be added to this file as:
# Name <email address>
-David Z. Chen <dzc@google.com>
+Jon Brandvein <brandjon@google.com>
+Chris Parsons <cparsons@google.com>
+Jingwen Chen <jingwen@google.com>
+Laurent Le Brun <laurentlb@google.com>
diff --git a/README.md b/README.md
index b9afc1d..a27ed44 100644
--- a/README.md
+++ b/README.md
@@ -1,31 +1,11 @@
# [Stardoc](https://skydoc.bazel.build) - Starlark Documentation Generator
-[![Build status](https://badge.buildkite.com/c793ed98a3802393dba9813f524bfe28a87da2ab235df38c49.svg)](https://buildkite.com/bazel/skydoc-postsubmit)
-
Stardoc is a documentation generator for [Bazel](https://bazel.build) build rules
written in [Starlark](https://bazel.build/docs/skylark/index.html).
-Stardoc provides a Starlark rule (`stardoc`) that can be used to build documentation
-for Starlark rules in Markdown. Stardoc generates one documentation page per `.bzl` file.
-
-## Skydoc deprecation
-
-NOTE: Stardoc is a replacement for the **deprecated** "Skydoc" documentation generator.
-
-See [Skydoc Deprecation](https://skydoc.bazel.build/docs/skydoc_deprecation.html) for
-details on the deprecation, and for some migration tips.
-
-## Get Started
-
-* How to [set up Stardoc for your project](https://skydoc.bazel.build/docs/getting_started_stardoc.html)
-* Writing [docstrings](https://skydoc.bazel.build/docs/writing_stardoc.html)
-* How to [integrate Stardoc with your build](https://skydoc.bazel.build/docs/generating_stardoc.html).
-
-## About Stardoc
-
-* How to [contribute to Stardoc](https://skydoc.bazel.build/contributing.html)
-* See the [Stardoc roadmap](https://skydoc.bazel.build/roadmap.html)
-
-
-
+This repository is currently in a transitionary state as pieces of the
+[bazelbuild/skydoc](https://github.com/bazelbuild/skydoc) repository
+ are being moved to this one. Use the
+[bazelbuild/skydoc](https://github.com/bazelbuild/skydoc) repository
+for the time being.
diff --git a/WORKSPACE b/WORKSPACE
index 1021b95..d4813e5 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -5,31 +5,11 @@
skydoc_repositories()
-load("@io_bazel_rules_sass//:package.bzl", "rules_sass_dependencies")
-
-rules_sass_dependencies()
-
-load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories")
-
-node_repositories()
-
-load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories")
-
-sass_repositories()
-
#######################################################################
##### MOST USERS SHOULD NOT NEED TO COPY ANYTHING BELOW THIS LINE #####
#######################################################################
load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
-# Needed for skydoc only (not Stardoc), which is deprecated. Users should include
-# this in their WORKSPACE only if they need skydoc.
-git_repository(
- name = "com_google_protobuf",
- commit = "7b28271a61a3da0a37f6fda399b0c4c86464e5b3", # 2018-11-16
- remote = "https://github.com/protocolbuffers/protobuf.git",
-)
-
# Needed for generating the Stardoc release binary.
git_repository(
name = "io_bazel",
@@ -37,15 +17,6 @@
remote = "https://github.com/bazelbuild/bazel.git",
)
-git_repository(
- name = "rules_python",
- remote = "https://github.com/bazelbuild/rules_python.git",
- commit = "4b84ad270387a7c439ebdccfd530e2339601ef27",
-)
-
-load("@rules_python//python:repositories.bzl", "py_repositories")
-py_repositories()
-
# Needed only because of java_tools.
http_archive(
name = "rules_cc",
@@ -58,6 +29,20 @@
)
# Needed as a transitive dependency of @io_bazel
+git_repository(
+ name = "com_google_protobuf",
+ commit = "7b28271a61a3da0a37f6fda399b0c4c86464e5b3", # 2018-11-16
+ remote = "https://github.com/protocolbuffers/protobuf.git",
+)
+
+# Needed as a transitive dependency of @io_bazel
+git_repository(
+ name = "rules_python",
+ remote = "https://github.com/bazelbuild/rules_python.git",
+ commit = "4b84ad270387a7c439ebdccfd530e2339601ef27",
+)
+
+# Needed as a transitive dependency of @io_bazel
http_archive(
name = "rules_pkg",
sha256 = "5bdc04987af79bd27bc5b00fe30f59a858f77ffa0bd2d8143d5b31ad8b1bd71c",
diff --git a/serve-docs.sh b/serve-docs.sh
deleted file mode 100755
index 4674e03..0000000
--- a/serve-docs.sh
+++ /dev/null
@@ -1,103 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2016 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.
-
-set -eu
-
-if [ "${1-}" == "help" ]; then
- cat <<EOF
-Usage:
-$0 [port]
- Builds docs and starts a web server serving docs on localhost:port
- Default port is 12345.
-$0 <target directory> [<serving prefix>]
- Builds docs as static web pages in <target directory>.
- Replaces absolute paths in the resulting HTML with <serving prefix>,
- or, if it is not specified, with <target directory>.
-EOF
- exit 0
-fi
-
-if [[ "${1-}" == [0-9]* ]]; then
- readonly PORT="$1"
- readonly TARGET=''
-else
- readonly PORT="${1-12345}"
- readonly TARGET="${1-}"
-fi
-
-readonly WORKING_DIR=$(mktemp -d)
-readonly SERVING_PREFIX="${2-$TARGET}"
-
-function check {
- which "$1" > /dev/null || (echo "$1 not installed. Please install $1."; exit 1)
-}
-
-function build_and_serve {
- bazel build //site:jekyll-tree.tar
- rm -rf "$WORKING_DIR/*"
- tar -xf bazel-genfiles/site/jekyll-tree.tar -C "$WORKING_DIR"
-
- pkill -9 jekyll || true
-
- if [ -z "$TARGET" ]; then
- echo "Serving skydoc.bazel.build site at port $PORT"
- jekyll serve --detach --quiet --port "$PORT" --source "$WORKING_DIR"
- else
- TMP_TARGET=$(mktemp -d)
- jekyll build --source "$WORKING_DIR" --destination "$TMP_TARGET"
- REPLACEMENT=$(echo "$SERVING_PREFIX" | sed s/\\//\\\\\\//g)
- find "$TMP_TARGET" -name '*.html' | xargs sed -i s/href=\\\"\\//href=\"$REPLACEMENT\\//g
- find "$TMP_TARGET" -name '*.html' | xargs sed -i s/src=\\\"\\//src=\"$REPLACEMENT\\//g
- cp -R $TMP_TARGET/* "$TARGET"
- echo "Static pages copied to $TARGET"
- echo "Should be served from $SERVING_PREFIX"
- fi
-}
-
-function main {
- check jekyll
-
- old_version="Jekyll 0.11.2"
- if expr match "$(jekyll --version)" "$old_version"; then
- # The ancient version that apt-get has.
- echo "ERROR: Running with an old version of Jekyll, update " \
- "to 2.5.3 with \`sudo gem install jekyll -v 2.5.3\`"
- exit 1
- fi
-
- build_and_serve
-
- echo "Type q to quit, r to rebuild docs and restart jekyll"
- while true; do
-
- read -n 1 -s user_input
- if [ "$user_input" == "q" ]; then
- echo "Quitting"
- exit 0
- elif [ "$user_input" == "r" ]; then
- echo "Rebuilding docs and restarting jekyll"
- build_and_serve
- echo "Rebuilt docs and restarted jekyll"
- fi
- done
-}
-
-function cleanup {
- rm -rf "$WORKING_DIR"
- pkill -9 jekyll
-}
-trap cleanup EXIT
-
-main
diff --git a/setup.bzl b/setup.bzl
index 60b787b..47a1df9 100644
--- a/setup.bzl
+++ b/setup.bzl
@@ -21,45 +21,6 @@
if not native.existing_rule(name):
repo_rule(name = name, **kwargs)
-JINJA2_BUILD_FILE = """
-py_library(
- name = "jinja2",
- srcs = glob(["jinja2/*.py"]),
- srcs_version = "PY2AND3",
- deps = [
- "@markupsafe_archive//:markupsafe",
- ],
- visibility = ["//visibility:public"],
-)
-"""
-
-MARKUPSAFE_BUILD_FILE = """
-py_library(
- name = "markupsafe",
- srcs = glob(["markupsafe/*.py"]),
- srcs_version = "PY2AND3",
- visibility = ["//visibility:public"],
-)
-"""
-
-MISTUNE_BUILD_FILE = """
-py_library(
- name = "mistune",
- srcs = ["mistune.py"],
- srcs_version = "PY2AND3",
- visibility = ["//visibility:public"],
-)
-"""
-
-SIX_BUILD_FILE = """
-py_library(
- name = "six",
- srcs = ["six.py"],
- srcs_version = "PY2AND3",
- visibility = ["//visibility:public"],
-)
-"""
-
def skydoc_repositories():
"""Adds the external repositories used by the skylark rules."""
_include_if_not_defined(
@@ -69,63 +30,6 @@
sha256 = "2ef429f5d7ce7111263289644d233707dba35e39696377ebab8b0bc701f7818e",
)
_include_if_not_defined(
- git_repository,
- name = "io_bazel_rules_sass",
- remote = "https://github.com/bazelbuild/rules_sass.git",
- commit = "8ccf4f1c351928b55d5dddf3672e3667f6978d60",
- )
- _include_if_not_defined(
- http_archive,
- name = "markupsafe_archive",
- urls = ["https://pypi.python.org/packages/source/M/MarkupSafe/MarkupSafe-0.23.tar.gz#md5=f5ab3deee4c37cd6a922fb81e730da6e"],
- sha256 = "a4ec1aff59b95a14b45eb2e23761a0179e98319da5a7eb76b56ea8cdc7b871c3",
- build_file_content = MARKUPSAFE_BUILD_FILE,
- strip_prefix = "MarkupSafe-0.23",
- )
- native.bind(
- name = "markupsafe",
- actual = "@markupsafe_archive//:markupsafe",
- )
-
- _include_if_not_defined(
- http_archive,
- name = "jinja2_archive",
- urls = ["https://pypi.python.org/packages/source/J/Jinja2/Jinja2-2.8.tar.gz#md5=edb51693fe22c53cee5403775c71a99e"],
- sha256 = "bc1ff2ff88dbfacefde4ddde471d1417d3b304e8df103a7a9437d47269201bf4",
- build_file_content = JINJA2_BUILD_FILE,
- strip_prefix = "Jinja2-2.8",
- )
- native.bind(
- name = "jinja2",
- actual = "@jinja2_archive//:jinja2",
- )
-
- _include_if_not_defined(
- http_archive,
- name = "mistune_archive",
- urls = ["https://pypi.python.org/packages/source/m/mistune/mistune-0.7.1.tar.gz#md5=057bc28bf629d6a1283d680a34ed9d0f"],
- sha256 = "6076dedf768348927d991f4371e5a799c6a0158b16091df08ee85ee231d929a7",
- build_file_content = MISTUNE_BUILD_FILE,
- strip_prefix = "mistune-0.7.1",
- )
- native.bind(
- name = "mistune",
- actual = "@mistune_archive//:mistune",
- )
-
- _include_if_not_defined(
- http_archive,
- name = "six_archive",
- urls = ["https://pypi.python.org/packages/source/s/six/six-1.10.0.tar.gz#md5=34eed507548117b2ab523ab14b2f8b55"],
- sha256 = "105f8d68616f8248e24bf0e9372ef04d3cc10104f1980f54d57b2ce73a5ad56a",
- build_file_content = SIX_BUILD_FILE,
- strip_prefix = "six-1.10.0",
- )
- native.bind(
- name = "six",
- actual = "@six_archive//:six",
- )
- _include_if_not_defined(
http_archive,
name = "rules_java",
urls = [
diff --git a/site/BUILD b/site/BUILD
deleted file mode 100644
index 6259cba..0000000
--- a/site/BUILD
+++ /dev/null
@@ -1,36 +0,0 @@
-licenses(["notice"]) # Apache 2.0
-
-load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar")
-
-filegroup(
- name = "jekyll-srcs",
- srcs = glob(
- ["**/*"],
- exclude = [
- "BUILD",
- "jekyll-tree.sh",
- "*.swp",
- ],
- ),
-)
-
-pkg_tar(
- name = "jekyll-base",
- srcs = [":jekyll-srcs"],
- strip_prefix = ".",
-)
-
-genrule(
- name = "jekyll-tree",
- srcs = [
- ":jekyll-base",
- "//stardoc:stardoc_doc",
- "//skylark:skylark-docs",
- ],
- outs = ["jekyll-tree.tar"],
- cmd = ("$(location jekyll-tree.sh) $@ " +
- "$(location jekyll-base) " +
- "$(location //skylark:skylark-docs) " +
- "$(location //stardoc:stardoc_doc) "),
- tools = ["jekyll-tree.sh"],
-)
diff --git a/site/CNAME b/site/CNAME
deleted file mode 100644
index 9fce306..0000000
--- a/site/CNAME
+++ /dev/null
@@ -1 +0,0 @@
-skydoc.bazel.build
diff --git a/site/_config.yml b/site/_config.yml
deleted file mode 100755
index 288fa5c..0000000
--- a/site/_config.yml
+++ /dev/null
@@ -1,8 +0,0 @@
-destination: production
-markdown: redcarpet
-paginate: 10
-highlighter: pygments
-sass:
- sass_dir: _sass
- style: compressed
-
diff --git a/site/_includes/drawer.html b/site/_includes/drawer.html
deleted file mode 100644
index 880a6c9..0000000
--- a/site/_includes/drawer.html
+++ /dev/null
@@ -1,40 +0,0 @@
- <div class="mdl-layout__drawer">
- <span class="mdl-layout-title">
- <a href="/">Skydoc</a>
- </span>
- <nav class="drawer-nav">
- <ul>
- <li><a href="/">Home</a></li>
- <li>
- <span class="drawer-nav-title">Stardoc Documentation</span>
- <ul>
- <li><a href="/docs/getting_started_stardoc.html">Getting Started</a></li>
- <li><a href="/docs/writing_stardoc.html">Writing Documentation</a></li>
- <li><a href="/docs/generating_stardoc.html">Generating Documentation</a></li>
- <li><a href="/docs/stardoc_reference.html">Build Rule Reference</a></li>
- </ul>
- </li>
- <li>
- <span class="drawer-nav-title">Skydoc (deprecated)</span>
- <ul>
- <li><a href="/docs/skydoc_deprecation.html">About Skydoc Deprecation</a></li>
- <li><a href="/docs/getting_started.html">Getting Started</a></li>
- <li><a href="/docs/writing.html">Writing Documentation</a></li>
- <li><a href="/docs/generating.html">Generating Documentation</a></li>
- <li><a href="/docs/skylark.html">Build Rule Reference</a></li>
- <li><a href="/docs/faq.html">FAQ</a></li>
- </ul>
- </li>
- <li>
- <span class="drawer-nav-title">Get Involved</span>
- <ul>
- <li><a href="/contributing.html">Contribute to Stardoc</a></li>
- <li><a href="/roadmap.html">Roadmap</a></li>
- <li><a href="https://groups.google.com/forum/#!forum/bazel-discuss">User mailing list</a></li>
- <li><a href="https://github.com/bazelbuild/skydoc/issues">Issue tracker</a></li>
- <li><a href="https://github.com/bazelbuild/skydoc">GitHub</a></li>
- </ul>
- </li>
- </ul>
- </nav>
- </div>
diff --git a/site/_includes/footer.html b/site/_includes/footer.html
deleted file mode 100644
index b68b3e7..0000000
--- a/site/_includes/footer.html
+++ /dev/null
@@ -1,102 +0,0 @@
- <footer class="mdl-mini-footer">
- <div class="mdl-mini-footer__left-section">
- <div class="mdl-logo">© 2016 Google, Inc.</div>
- </div>
- <div class="mdl-mini-footer__right-section">
- <a class="mdl-button mdl-js-button mdl-js-ripple-effect" href="#"
- id="scroll-to-top">
- Back to Top
- </a>
- </div>
- </footer>
-
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
- <script>
- var shiftWindow = function() {
- if (location.hash.length !== 0) {
- window.scrollBy(0, -50);
- }
- };
- window.addEventListener("hashchange", shiftWindow);
-
- var highlightCurrentSidebarNav = function() {
- var href = location.pathname;
- var item = $('.drawer-nav [href$="' + href + '"]');
- if (item) {
- var li = item.parent();
- li.addClass("active");
- }
- };
-
- /**
- * Creates a CSE search form and submits the search query.
- *
- * Since the Material Design Lite header expandable text field does not
- * support having a <form> element around the <input> element, we need to
- * capture the ENTER keypress and then submit the form using this handler.
- */
- var submitSearch = function(query) {
- var form = document.createElement("form");
- form.setAttribute("action", "/search.html");
-
- var cseParams = {
- "cx": "008327220137350982602:0mpaowwcmvg",
- "cof": "FORID:10",
- "ie": "UTF-8",
- };
- for (key in cseParams) {
- var hidden = document.createElement("input");
- hidden.setAttribute("type", "hidden");
- hidden.setAttribute("name", key);
- hidden.setAttribute("value", cseParams[key]);
- form.appendChild(hidden);
- }
-
- var text = document.createElement("input");
- text.setAttribute("type", "text");
- text.setAttribute("name", "q");
- text.setAttribute("value", query);
- form.appendChild(text);
-
- document.body.appendChild(form);
- form.submit();
- };
-
- $(document).ready(function() {
- // Scroll to anchor of location hash, adjusted for fixed navbar.
- window.setTimeout(function() {
- shiftWindow();
- }, 1);
-
- // Highlight the current item on the sidebar.
- highlightCurrentSidebarNav();
-
- // Handler to capture the ENTER keypress for the CSE search input
- // in the page header and then call submitSearch() to submit the search
- // query.
- $("#cse-search-box").keyup(function(e) {
- if (e.keyCode == 13) {
- let query = $("#cse-search-box").val();
- submitSearch(query);
- }
- });
-
- // Handler for the Scroll to Top link in the page footer to scroll the
- // main content back to the top.
- $("#scroll-to-top").click(function() {
- $(".mdl-layout__content").animate({ scrollTop: 0 }, "slow");
- return false;
- });
- });
- </script>
-
- <!-- Google Analytics tracking code -->
- <script>
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
- })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
-
- ga('create', 'UA-61082125-2', 'auto');
- ga('send', 'pageview');
- </script>
diff --git a/site/_includes/head.html b/site/_includes/head.html
deleted file mode 100644
index 26824d4..0000000
--- a/site/_includes/head.html
+++ /dev/null
@@ -1,29 +0,0 @@
- <head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <title>{{ page.title }} - Skydoc</title>
-
- <script>
- var current_url = window.location.href;
- var bad_url = new RegExp("^https?://bazelbuild.github.io/skydoc/");
- if (bad_url.test(current_url)) {
- window.location.replace(current_url.replace(bad_url, "https://skydoc.bazel.build/"));
- }
- </script>
-
- <link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site_root }}">
-
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700" type="text/css">
- <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
- <link rel="stylesheet" href="https://code.getmdl.io/1.1.3/material.green-blue.min.css">
- <script defer src="https://code.getmdl.io/1.1.3/material.min.js"></script>
- <link rel="stylesheet" href="/css/{{ page.stylesheet }}.css">
-
- <link rel="shortcut icon" type="image/png" href="/images/favicon.ico">
-
- <!-- metadata -->
- <meta name="og:title" content="Skydoc"/>
- <meta name="og:description" content="Generate documentation for Bazel Skylark rules."/>
- </head>
-
diff --git a/site/_includes/header.html b/site/_includes/header.html
deleted file mode 100644
index eab757f..0000000
--- a/site/_includes/header.html
+++ /dev/null
@@ -1,23 +0,0 @@
- <header class="mdl-layout__header mdl-layout__header--waterfall">
- <div class="mdl-layout__header-row">
- <span class="mdl-layout-title">{{ page.title }}</span>
- <div class="mdl-layout-spacer"></div>
- <nav class="mdl-navigation mdl-layout--large-screen-only">
- <a class="mdl-navigation__link" href="/docs/getting_started.html">Docs</a>
- <a class="mdl-navigation__link" href="/contributing.html">Contributing</a>
- <a class="mdl-navigation__link" href="https://github.com/bazelbuild/skydoc">GitHub</a>
- </nav>
- <div class="mdl-textfield mdl-js-textfield mdl-textfield--expandable
- mdl-textfield--floating-label mdl-textfield--align-right">
- <label class="mdl-button mdl-js-button mdl-button--icon"
- for="cse-search-box">
- <i class="material-icons">search</i>
- </label>
- <div class="mdl-textfield__expandable-holder">
- <input class="mdl-textfield__input" type="text"
- id="cse-search-box">
- </div>
- </div>
- </div>
- </header>
- {% include drawer.html %}
diff --git a/site/_layouts/default.html b/site/_layouts/default.html
deleted file mode 100644
index 81cd665..0000000
--- a/site/_layouts/default.html
+++ /dev/null
@@ -1,25 +0,0 @@
----
-stylesheet: docs
----
-<!DOCTYPE html>
-<html lang="en" itemscope itemtype="https://schema.org/WebPage">
- {% include head.html %}
- <body>
- <div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer
- mdl-layout--fixed-header">
- {% include header.html %}
-
- <main class="mdl-layout__content">
- <div class="page-content">
- {% if page.title %}
- <h1 class="page-title">{{ page.title }}</h1>
- {% endif %}
-
- {{ content }}
- </div>
- <div class="mdl-layout-spacer"></div>
- {% include footer.html %}
- </main>
- </div>
- </body>
-</html>
diff --git a/site/_layouts/home.html b/site/_layouts/home.html
deleted file mode 100644
index df98d18..0000000
--- a/site/_layouts/home.html
+++ /dev/null
@@ -1,23 +0,0 @@
----
-stylesheet: home
-title: Skydoc
----
-<!DOCTYPE html>
-<html lang="en" itemscope itemtype="https://schema.org/WebPage">
- {% include head.html %}
- <body class="body-home">
- <div class="mdl-layout mdl-js-layout mdl-layout--fixed-header">
- {% include header.html %}
-
- <main class="mdl-layout__content">
- <div class="page-content">
-
- {{ content }}
-
- </div>
- <div class="mdl-layout-spacer"></div>
- {% include footer.html %}
- </main>
- </div>
- </body>
-</html>
diff --git a/site/_sass/base.scss b/site/_sass/base.scss
deleted file mode 100644
index a513a93..0000000
--- a/site/_sass/base.scss
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright 2016 The Skydoc 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.
-
-$primary-color: rgb(76,175,80);
-$body-bg-color: #fafafa;
-$code-bg-color: #fff;
-$code-dark-bg-color: #424242;
-$border-color: #f5f5f5;
-
-body {
- background-color: $body-bg-color;
-}
-
-img.responsive {
- max-width: 100%;
- height: auto;
- border: 1px solid $border-color;
-}
-
-a {
- text-decoration: none;
-}
-
-pre,
-code {
- font-family: 'Liberation Mono', Consolas, Monaco, 'Andale Mono', monospace;
-}
-
-pre,
-pre.term {
- background-color: $code-bg-color;
- padding: 20px;
- overflow-x: auto;
- word-wrap: normal;
- border: 1px solid $border-color;
-
- code {
- overflow-wrap: normal;
- white-space: pre;
- }
-}
-
-pre.term {
- background-color: $code-dark-bg-color;
- color: $code-bg-color;
- font-size: 90%;
-
- span.info {
- color: #81C784;
- }
-}
-
-code {
- display: inline-block;
- font-size: 90%;
- white-space: pre-wrap;
-}
-
-.mdl-layout__content {
- display: -webkit-flex;
- display: -ms-flexbox;
- display: flex;
- -webkit-flex-direction: column;
- -ms-flex-flow: column;
- flex-direction: column;
-}
-
-.mdl-layout__content > *:not(.mdl-layout-spacer) {
- -webkit-flex: none;
- -ms-flex: none;
- flex: none;
-}
-
-$scroll-to-top-color: #fff;
-
-footer {
- #scroll-to-top {
- color: $scroll-to-top-color;
- }
-}
diff --git a/site/_sass/docs.scss b/site/_sass/docs.scss
deleted file mode 100644
index a1008e9..0000000
--- a/site/_sass/docs.scss
+++ /dev/null
@@ -1,168 +0,0 @@
-// Copyright 2016 The Skydoc 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.
-
-p.lead {
- font-size: 20px;
- line-height: 32px;
-}
-
-img {
- margin: 20px 0;
- max-width: 100%;
- height: auto;
-}
-
-$table-bg-color: #fff;
-$table-border-color: #eee;
-$th-bg-color: #fafafa;
-$th-color: #757575;
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
- background-color: $table-bg-color;
- table-layout: auto;
-
- thead {
- th {
- background-color: $th-bg-color;
- border: 1px solid $table-border-color;
- color: $th-color;
- padding: 12px 12px 12px 24px;
- vertical-align: top;
- }
- }
-
- tbody {
- td {
- border: 1px solid $table-border-color;
- padding: 12px 12px 12px 24px;
- vertical-align: top;
- }
- }
-}
-
-table.params-table {
- width: 100%;
-
- col.col-param {
- width: 25%;
- }
-
- col.col-description {
- width: 75%;
- }
-}
-
-hr {
- margin-top: 80px;
- margin-bottom: 80px;
-}
-
-$toc-heading-color: #757575;
-
-nav.toc {
- border-left: 5px solid $primary-color;
- padding-left: 20px;
- margin-bottom: 48px;
-
- h1,
- h2 {
- font-size: 15px;
- line-height: 16px;
- padding-bottom: 12px;
- margin-bottom: 0;
- font-weight: 400;
- color: $toc-heading-color;
- }
-
- ul {
- list-style: none;
- margin-top: 0;
- padding-left: 0;
-
- li {
- font-size: 20px;
- line-height: 40px;
-
- a {
- color: $primary-color;
- }
- }
- }
-}
-
-$h3-color: #757575;
-
-.page-content {
- margin-left: auto;
- margin-right: auto;
- padding-top: 60px;
- padding-bottom: 60px;
- width: 760px;
-
- h1.page-title {
- font-size: 34px;
- font-weight: 400;
- line-height: 40px;
- margin-bottom: 30px;
- color: $primary-color;
- }
-
- h1 {
- font-size: 24px;
- font-weight: 400;
- line-height: 40px;
- margin-bottom: 20px;
- color: $primary-color;
- }
-
- h2 {
- font-size: 20px;
- font-weight: 400;
- line-height: 32px;
- margin-bottom: 20px;
- color: $primary-color;
- }
-
- h3 {
- font-size: 18px;
- font-weight: 400;
- line-height: 32px;
- margin-bottom: 20px;
- color: $h3-color;
- }
-}
-
-@media (max-width: 768px) {
- .page-content {
- width: 360px;
- }
-}
-
-@media (min-width: 768px) {
- .page-content {
- width: 760px;
- }
-}
-
-@media (min-width: 1476px) {
- .page-content {
- width: 1160px;
- }
-}
-
-.mdl-mini-footer {
- padding-left: 40px;
-}
diff --git a/site/_sass/drawer.scss b/site/_sass/drawer.scss
deleted file mode 100644
index 89e7df4..0000000
--- a/site/_sass/drawer.scss
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright 2016 The Skydoc 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.
-
-$drawer-bg-color: #fff;
-$drawer-border-color: #e0e0e0;
-$drawer-heading-color: #757575;
-$drawer-hover-color: #f0f0f0;
-
-.mdl-layout__drawer {
- background-color: $drawer-bg-color;
-
- .mdl-layout-title {
- border-bottom: 1px solid $drawer-border-color;
- padding-left: 24px;
-
- a {
- text-decoration: none;
- color: $drawer-heading-color;
- font-weight: normal;
- }
- }
-}
-
-.drawer-nav {
- ul {
- list-style: none;
- padding-left: 0;
-
- li {
- display: block;
- padding: 0;
-
- ul {
- li {
- a {
- padding-left: 44px;
- font-weight: 400;
- }
- }
- }
-
- span.drawer-nav-title {
- display: block;
- flex-shrink: 0;
- padding: 15px 0 15px 22px;
- margin: 0;
- font-weight: 600;
- color: $drawer-heading-color;
- line-height: 1em;
- text-decoration: none;
- }
-
- a {
- display: block;
- flex-shrink: 0;
- padding: 15px 0 15px 22px;
- margin: 0;
- font-weight: 600;
- color: $drawer-heading-color;
- line-height: 1em;
- text-decoration: none;
- cursor: pointer;
-
- &:active,
- &:hover {
- background-color: $drawer-hover-color;
- }
- }
-
- &.active {
- a {
- color: $primary-color;
- font-weight: 500;
- }
- }
- }
- }
-}
diff --git a/site/_sass/home.scss b/site/_sass/home.scss
deleted file mode 100644
index d01f3d7..0000000
--- a/site/_sass/home.scss
+++ /dev/null
@@ -1,57 +0,0 @@
-// Copyright 2016 The Skydoc 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.
-
-$hero-bg-color: rgb(76,175,80);
-$hero-color: #fff;
-
-.hero {
- background-color: $hero-bg-color;
- color: $hero-color;
- padding-top: 40px;
- padding-bottom: 20px;
-
- .mdl-cell {
- text-align: center;
- }
-
- h1 {
- font-size: 32px;
- font-weight: 300;
- }
-
- p.lead {
- font-size: 18px;
- font-weight: 300;
- }
-
- .mdl-button {
- margin-top: 10px;
- background-color: $body-bg-color;
- }
-}
-
-.feature {
- .mdl-grid {
- max-width: 1230px;
- }
-
- .mdl-cell {
- padding: 10px;
- }
-
- h1 {
- font-size: 28px;
- font-weight: 300;
- }
-}
diff --git a/site/_sass/syntax.scss b/site/_sass/syntax.scss
deleted file mode 100644
index 46dda20..0000000
--- a/site/_sass/syntax.scss
+++ /dev/null
@@ -1,89 +0,0 @@
-//
-// Copyright 2015 Google
-//
-// Generated using Base16 Builder
-// (https://github.com/chriskempson/base16-builder)
-
-$base00: #212121; // ----
-$base01: #424242; // ---
-$base02: #616161; // --
-$base03: #757575; // -
-$base04: #9e9e9e; // +
-$base05: #bdbdbd; // ++
-$base06: #e0e0e0; // +++
-$base07: #eee; // ++++
-
-$base08: #f44336; // red
-$base09: #ff9800; // orange
-$base0A: #ffc107; // yellow
-$base0B: #4caf50; // green
-$base0C: #009688; // aqua
-$base0D: #2196f3; // blue
-$base0E: #9c27b0; // purple
-$base0F: #795548; // brown
-
-.highlight .hll { background-color: $base06 }
-.highlight { background: $base07; color: $base00 }
-.highlight .c { color: $base03 } // Comment
-.highlight .err { color: $base08 } // Error
-.highlight .k { color: $base0E } // Keyword
-.highlight .l { color: $base09 } // Literal
-.highlight .n { color: $base00 } // Name
-.highlight .o { color: $base0C } // Operator
-.highlight .p { color: $base00 } // Punctuation
-.highlight .cm { color: $base03 } // Comment.Multiline
-.highlight .cp { color: $base03 } // Comment.Preproc
-.highlight .c1 { color: $base03 } // Comment.Single
-.highlight .cs { color: $base03 } // Comment.Special
-.highlight .gd { color: $base08 } // Generic.Deleted
-.highlight .ge { font-style: italic } // Generic.Emph
-.highlight .gh { color: $base00; font-weight: bold } // Generic.Heading
-.highlight .gi { color: $base0B } // Generic.Inserted
-.highlight .gp { color: $base03; font-weight: bold } // Generic.Prompt
-.highlight .gs { font-weight: bold } // Generic.Strong
-.highlight .gu { color: $base0C; font-weight: bold } // Generic.Subheading
-.highlight .kc { color: $base0E } // Keyword.Constant
-.highlight .kd { color: $base0E } // Keyword.Declaration
-.highlight .kn { color: $base0C } // Keyword.Namespace
-.highlight .kp { color: $base0E } // Keyword.Pseudo
-.highlight .kr { color: $base0E } // Keyword.Reserved
-.highlight .kt { color: $base0A } // Keyword.Type
-.highlight .ld { color: $base0B } // Literal.Date
-.highlight .m { color: $base09 } // Literal.Number
-.highlight .s { color: $base0B } // Literal.String
-.highlight .na { color: $base0D } // Name.Attribute
-.highlight .nb { color: $base00 } // Name.Builtin
-.highlight .nc { color: $base0A } // Name.Class
-.highlight .no { color: $base08 } // Name.Constant
-.highlight .nd { color: $base0C } // Name.Decorator
-.highlight .ni { color: $base00 } // Name.Entity
-.highlight .ne { color: $base08 } // Name.Exception
-.highlight .nf { color: $base0D } // Name.Function
-.highlight .nl { color: $base00 } // Name.Label
-.highlight .nn { color: $base0A } // Name.Namespace
-.highlight .nx { color: $base0D } // Name.Other
-.highlight .py { color: $base00 } // Name.Property
-.highlight .nt { color: $base0C } // Name.Tag
-.highlight .nv { color: $base08 } // Name.Variable
-.highlight .ow { color: $base0C } // Operator.Word
-.highlight .w { color: $base00 } // Text.Whitespace
-.highlight .mf { color: $base09 } // Literal.Number.Float
-.highlight .mh { color: $base09 } // Literal.Number.Hex
-.highlight .mi { color: $base09 } // Literal.Number.Integer
-.highlight .mo { color: $base09 } // Literal.Number.Oct
-.highlight .sb { color: $base0B } // Literal.String.Backtick
-.highlight .sc { color: $base00 } // Literal.String.Char
-.highlight .sd { color: $base03 } // Literal.String.Doc
-.highlight .s2 { color: $base0B } // Literal.String.Double
-.highlight .se { color: $base09 } // Literal.String.Escape
-.highlight .sh { color: $base0B } // Literal.String.Heredoc
-.highlight .si { color: $base09 } // Literal.String.Interpol
-.highlight .sx { color: $base0B } // Literal.String.Other
-.highlight .sr { color: $base0B } // Literal.String.Regex
-.highlight .s1 { color: $base0B } // Literal.String.Single
-.highlight .ss { color: $base0B } // Literal.String.Symbol
-.highlight .bp { color: $base00 } // Name.Builtin.Pseudo
-.highlight .vc { color: $base08 } // Name.Variable.Class
-.highlight .vg { color: $base08 } // Name.Variable.Global
-.highlight .vi { color: $base08 } // Name.Variable.Instance
-.highlight .il { color: $base09 } // Literal.Number.Integer.Long
diff --git a/site/contributing.md b/site/contributing.md
deleted file mode 100644
index a17a523..0000000
--- a/site/contributing.md
+++ /dev/null
@@ -1,48 +0,0 @@
----
-layout: default
-title: Contributing
-stylesheet: docs
----
-
-We welcome your contributions! To contribute to Stardoc, fork the [Skydoc][repo]
-GitHub repository and start submitting pull requests.
-
-[repo]: https://github.com/bazelbuild/skydoc
-
-## Contributing to Skydoc
-
-In general, we prefer contributions that fix bugs or add features (as opposed to
-purely stylistic, refactoring, or "cleanup" changes). Please check with us on
-the [bazel-dev][bazel-dev] mailing list or open a GitHub Issue before investing
-a lot of time in a patch.
-
-[bazel-dev]: https://groups.google.com/forum/#!forum/bazel-dev
-
-To submit a patch to Skydoc:
-
-* Skydoc is part of the Bazel project. Read the [Bazel governance
- plan](https://www.bazel.build/governance.html) and Skydoc's [contribution
- guidelines](https://github.com/bazelbuild/skydoc/blob/master/CONTRIBUTING.md).
-* Open an [Issue](https://github.com/bazelbuild/skydoc/issues) or discuss your
- plan or design on the [bazel-dev][bazel-dev] mailing list.
-* Prepare a Git commit that implements your feature or bug fix. Don't forget to
- add tests and reference the corresponding bug, if any.
-* Open a [Pull Request][pull-request] on the Skydoc repository. This will
- require that you have signed a [Contributor License Agreement][cla].
-* Complete a code review a [core contributor](#core-contributors). Amend your
- patch by making additional commits or rebasing with HEAD if there are
- conflicts with new commits on the master branch.
-* Once the code review is complete, your reviewer will squash/merge your pull
- request to the master branch.
-
-[pull-request]: https://github.com/bazelbuild/skydoc/pulls
-[cla]: https://cla.developers.google.com/
-
-## Core Contributors
-
-The current group of Stardoc core contributors are:
-
-* [cparsons](https://github.com/c-parsons)
-* [laurentlb](https://github.com/laurentlb)
-
-
diff --git a/site/css/docs.scss b/site/css/docs.scss
deleted file mode 100644
index 7d244a1..0000000
--- a/site/css/docs.scss
+++ /dev/null
@@ -1,7 +0,0 @@
----
----
-
-@import "base.scss";
-@import "docs.scss";
-@import "drawer.scss";
-@import "syntax.scss";
diff --git a/site/css/home.scss b/site/css/home.scss
deleted file mode 100644
index 520cd01..0000000
--- a/site/css/home.scss
+++ /dev/null
@@ -1,7 +0,0 @@
----
----
-
-@import "base.scss";
-@import "home.scss";
-@import "drawer.scss";
-@import "syntax.scss";
diff --git a/site/docs/faq.md b/site/docs/faq.md
deleted file mode 100644
index f73bbec..0000000
--- a/site/docs/faq.md
+++ /dev/null
@@ -1,39 +0,0 @@
----
-layout: default
-title: FAQ
-stylesheet: docs
----
-
-## Why am I getting `TypeError: unsupported operand type(s) for +: 'dict' and 'dict'`?
-
-Skylark currently defines the `+` operator for dictionaries. Because
-Skydoc evaluates `.bzl` files as Python code and because the `+` operator
-for dictionaries may be [removed][dict-op] from Skylark in the future, we
-suggest using the `dict(a.items() + b.items())` syntax instead.
-
-[dict-op]: https://github.com/bazelbuild/bazel/issues/1086
-
-## Is Skydoc used to generate the documentation on [bazel.build](https://bazel.build)?
-
-Not for now. The [Build Encyclopedia](https://bazel.build/docs/be/overview.html)
-documents the set of native Bazel build rules written in Java, and the
-[Skylark Library](https://bazel.build/docs/skylark/lib/globals.html) documents the
-built-in Skylark modules and functions. Because both of these sets of docs are
-generated from Bazel's Java source code, they are generated using a [separate
-documentation generation
-tool](https://github.com/bazelbuild/bazel/tree/master/src/main/java/com/google/devtools/build/docgen).
-
-We are planning to create a catalog of Skylark rule sets to make it easy to
-publish and discover Skylark rule sets and browse their documentation. See
-[bazelbuild/bazel#1046](https://github.com/bazelbuild/bazel/issues/1046) for
-more information.
-
-## Why do the docstrings for rules come after the rule definition?
-
-Unlike in other languages, [Python docstrings
-](https://www.python.org/dev/peps/pep-0257/) are special string literals rather
-than comments. Because Skylark is a subset of Python, we take the same approach
-for Skylark docstrings as well. Because rule declarations are basically global
-variables, we follow the same convention for variable docstrings used by Python
-documentation generation tools, such as
-[epydoc](http://epydoc.sourceforge.net/manual-docstring.html).
diff --git a/site/docs/generating.md b/site/docs/generating.md
deleted file mode 100644
index f27c5be..0000000
--- a/site/docs/generating.md
+++ /dev/null
@@ -1,117 +0,0 @@
----
-layout: default
-title: Generating Documentation
-stylesheet: docs
----
-
-<nav class="toc">
- <h2>Contents</h2>
- <ul>
- <li><a href="#single-target">Single Target</a></li>
- <li><a href="#multiple-targets">Multiple Targets</a></li>
- </ul>
-</nav>
-
-The following are some examples of how to use Skydoc.
-
-<a name="single-target"></a>
-## Single Target
-
-Suppose you have a project containing Skylark rules you want to document:
-
-```
-[workspace]/
- WORKSPACE
- checkstyle/
- BUILD
- checkstyle.bzl
-```
-
-To generate documentation for the rules and macros in `checkstyle.bzl`, add the
-following target to `rules/BUILD`:
-
-```python
-load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc")
-
-skylark_doc(
- name = "checkstyle-docs",
- srcs = ["checkstyle.bzl"],
-)
-```
-
-Running `bazel build //checkstyle:checkstyle-docs` will generate a zip file
-containing documentation for the public rules and macros in `checkstyle.bzl`.
-
-By default, Skydoc will generate documentation in Markdown. To generate
-a set of HTML pages that is ready to be served, set `format = "html"`.
-
-<a name="multiple-targets"></a>
-## Multiple Targets
-
-If you would like to generate documentation for multiple .bzl files in various
-packages in your workspace, you can use the `skylark_library` rule to create
-logical collections of Skylark sources and add a single `skylark_doc` target for
-building documentation for all of the rule sets.
-
-Suppose your project has the following structure:
-
-```
-[workspace]/
- WORKSPACE
- BUILD
- checkstyle/
- BUILD
- checkstyle.bzl
- lua/
- BUILD
- lua.bzl
- luarocks.bzl
-```
-
-In this case, you can have `skylark_library` targets in `checkstyle/BUILD` and
-`lua/BUILD`:
-
-`checkstyle/BUILD`:
-
-```python
-load("@bazel_skylib//:skylark_library.bzl", "skylark_library")
-
-skylark_library(
- name = "checkstyle-rules",
- srcs = ["checkstyle.bzl"],
-)
-```
-
-`lua/BUILD`:
-
-```python
-load("@bazel_skylib//:skylark_library.bzl", "skylark_library")
-
-skylark_library(
- name = "lua-rules",
- srcs = [
- "lua.bzl",
- "luarocks.bzl",
- ],
-)
-```
-
-To build documentation for all the above `.bzl` files at once:
-
-`BUILD`:
-
-```python
-load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc")
-
-skylark_doc(
- name = "docs",
- srcs = [
- "//checkstyle:checkstyle-rules",
- "//lua:lua-rules",
- ],
-)
-```
-
-Running `bazel build //:docs` would build a single zip containing documentation
-for all the `.bzl` files contained in the two `skylark_library` targets' `srcs`.
-
diff --git a/site/docs/generating_stardoc.md b/site/docs/generating_stardoc.md
deleted file mode 100644
index 81f4a5e..0000000
--- a/site/docs/generating_stardoc.md
+++ /dev/null
@@ -1,170 +0,0 @@
----
-layout: default
-title: Generating Documentation
-stylesheet: docs
----
-
-<nav class="toc">
- <h2>Contents</h2>
- <ul>
- <li><a href="#single-file">Single File</a></li>
- <li><a href="#files-with-deps">Files with Dependencies</a></li>
- <li><a href="#multiple-files">Multiple Files</a></li>
- </ul>
-</nav>
-
-The following are some examples of how to use Stardoc.
-
-<a name="single-file"></a>
-## Single File
-
-Suppose you have a project containing Stardoc rules you want to document:
-
-```
-[workspace]/
- WORKSPACE
- checkstyle/
- BUILD
- checkstyle.bzl
-```
-
-To generate documentation for the rules in `checkstyle.bzl`, add the
-following target to `rules/BUILD`:
-
-```python
-load("@io_bazel_skydoc//stardoc:stardoc.bzl", "stardoc")
-
-stardoc(
- name = "checkstyle-docs",
- input = "checkstyle.bzl",
- out = "checkstyle_doc.md",
-)
-```
-
-Running `bazel build //checkstyle:checkstyle-docs` will generate a markdown file
-containing documentation for all Starlark rules defined in `checkstyle.bzl`.
-
-To generate a subset of rules defined in `checkstyle.bzl`, you may specify which
-rule names you specifically want documentation for using the `symbol_names` attribute
-of the `stardoc` rule. If `symbol_names` is specified, only rules matching a name
-in `symbol_names` will be documented:
-
-```python
-load("@io_bazel_skydoc//stardoc:stardoc.bzl", "stardoc")
-
-stardoc(
- name = "checkstyle-docs",
- input = "checkstyle.bzl",
- out = "checkstyle_doc.md",
- symbol_names = ["checkstyle_rule", "other_rule"],
-)
-```
-
-<a name="files-with-deps"></a>
-## Files with Dependencies
-
-If you would like to generate documentation for a `.bzl` with dependencies on
-other `.bzl` files, use the `bzl_library` rule to create logical collections of
-Starlark sources and depend on these libraries via the `deps` attribute of your
-`stardoc` target.
-
-Suppose your project has the following structure:
-
-```
-[workspace]/
- WORKSPACE
- BUILD
- checkstyle/
- BUILD
- checkstyle.bzl
- lua/
- BUILD
- lua.bzl
- luarocks.bzl
-```
-
-...and suppose your target `.bzl` file depends on other `.bzl` files in your workspace:
-
-`checkstyle/checkstyle.bzl`:
-
-```python
-load("//lua:lua.bzl", "lua_utility")
-
-lua_utility()
-
-checkstyle_rule = rule(
- ...
-)
-```
-
-In this case, you can have a `bzl_library` target in `lua/BUILD`:
-
-`lua/BUILD`:
-
-```python
-load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-
-bzl_library(
- name = "lua-rules",
- srcs = [
- "lua.bzl",
- "luarocks.bzl",
- ],
-)
-```
-
-To build documentation for `checkstyle.bzl`, specify the `bzl_library` target
-as a dependency of the `stardoc` target:
-
-`checkstyle/BUILD`:
-
-```python
-load("@io_bazel_skydoc//stardoc:stardoc.bzl", "stardoc")
-
-stardoc(
- name = "checkstyle-docs",
- input = "checkstyle.bzl",
- out = "checkstyle_doc.md",
- deps = ["//lua:lua-rules"],
-)
-```
-
-<a name="multiple-files"></a>
-## Multiple Files
-
-If you would like to generate documentation for multiple .bzl files in various
-packages in your workspace, you will need to create a single `.bzl` file that depends
-on all those `.bzl` files. You can then explicitly whitelist rules for which you would
-like documentation to be generated.
-
-For example, you may want to generate documentation for `foo_rule`, `bar_rule`, and
-`baz_rule`, all in different `.bzl` files. First, you would create a single `.bzl` file
-which loads these files:
-
-`doc_hub.bzl`:
-
-```python
-load("//foo:foo.bzl", "foo_rule")
-load("//bar:bar.bzl", "bar_rule")
-load("//baz:baz.bzl", "baz_rule")
-
-# No need for any implementation here. The rules need only be loaded.
-```
-
-A single `skydoc` target can then be used to generate their documentation:
-
-`BUILD`:
-
-```python
-load("@io_bazel_skydoc//stardoc:stardoc.bzl", "stardoc")
-
-stardoc(
- name = "my-docs",
- input = "doc_hub.bzl",
- out = "docs.md",
- symbol_names = ["foo_rule", "bar_rule", "baz_rule"],
-)
-```
-
-
-
diff --git a/site/docs/getting_started.md b/site/docs/getting_started.md
deleted file mode 100644
index 96d6958..0000000
--- a/site/docs/getting_started.md
+++ /dev/null
@@ -1,73 +0,0 @@
----
-layout: default
-title: Getting started
-stylesheet: docs
----
-
-Skydoc is a documentation generator for [Bazel](https://bazel.build) build rules
-written in [Skylark](https://bazel.build/docs/skylark/index.html).
-
-Skydoc provides a set of Skylark rules (`skylark_library` and `skylark_doc`)
-that can be used to build documentation for Skylark rules in either Markdown or
-HTML. Skydoc generates one documentation page per `.bzl` file.
-
-If you are new to writing build rules for Bazel, please read the Bazel
-documentation on [writing
-extensions](https://www.bazel.build/docs/skylark/concepts.html)
-
-<img src="/images/screenshot.png" class="responsive"
- alt="A screenshot of Skydoc generated HTML documentation">
-
-## Setup
-
-To use Skydoc, add the following to your `WORKSPACE` file:
-
-```python
-git_repository(
- name = "io_bazel_rules_sass",
- remote = "https://github.com/bazelbuild/rules_sass.git",
- tag = "0.0.3",
-)
-load("@io_bazel_rules_sass//sass:sass.bzl", "sass_repositories")
-sass_repositories()
-
-git_repository(
- name = "bazel_skylib",
- remote = "https://github.com/bazelbuild/bazel-skylib.git",
- tag = "0.3.0",
-)
-
-git_repository(
- name = "io_bazel_skydoc",
- remote = "https://github.com/bazelbuild/skydoc.git",
- tag = "0.1.4",
-)
-load("@io_bazel_skydoc//skylark:skylark.bzl", "skydoc_repositories")
-skydoc_repositories()
-```
-
-Note that the Sass repositories also need to be loaded since Skydoc uses the
-Bazel Sass rules.
-
-If you would like to load all Skydoc rules by default using Bazel's prelude, add
-the following to the file `tools/build_rules/prelude_bazel` in your repository:
-
-```python
-load(
- "@io_bazel_skydoc//skylark:skylark.bzl",
- "skydoc_repositories",
- "skylark_doc",
-)
-```
-
-## Next Steps
-
-Now you are ready to document your Skylark rules.
-
-* Learn about the [docstring format][format] used to document Skylark rules,
- macros, and files.
-* Learn about how you can use Skydoc's [build rules][generate] to generate your
- documentation in Markdown or HTML format.
-
-[format]: writing.md
-[generate]: generating.md
diff --git a/site/docs/getting_started_stardoc.md b/site/docs/getting_started_stardoc.md
deleted file mode 100644
index 6326be4..0000000
--- a/site/docs/getting_started_stardoc.md
+++ /dev/null
@@ -1,60 +0,0 @@
----
-layout: default
-title: Getting started
-stylesheet: docs
----
-
-Stardoc is a documentation generator for [Bazel](https://bazel.build) build rules
-written in [Starlark](https://bazel.build/docs/skylark/index.html).
-
-Stardoc provides a Starlark rule (`stardoc`)
-that can be used to build Markdown documentation for Starlark rules, providers,
-and functions.
-Starlark generates one documentation page per `stardoc` target.
-
-If you are new to writing build rules for Bazel, please read the Bazel
-documentation on [writing
-extensions](https://www.bazel.build/docs/skylark/concepts.html)
-
-<img src="/images/screenshot.png" class="responsive"
- alt="A screenshot of Stardoc generated documentation">
-
-## Setup
-
-To use Stardoc, add the following to your `WORKSPACE` file:
-
-```python
-load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository")
-
-git_repository(
- name = "io_bazel_skydoc",
- remote = "https://github.com/bazelbuild/skydoc.git",
- tag = "0.3.0",
-)
-
-load("@io_bazel_skydoc//:setup.bzl", "skydoc_repositories")
-skydoc_repositories()
-
-load("@io_bazel_rules_sass//:package.bzl", "rules_sass_dependencies")
-rules_sass_dependencies()
-
-load("@build_bazel_rules_nodejs//:defs.bzl", "node_repositories")
-node_repositories()
-
-load("@io_bazel_rules_sass//:defs.bzl", "sass_repositories")
-sass_repositories()
-```
-
-The load statements and function calls after the `io_bazel_skydoc` repository
-definition ensure that this repository's dependencies are loaded.
-
-## Next Steps
-
-Now you are ready to document your Starlark rules.
-
-* Learn about the [docstring format][format] used to document Starlark rules.
-* Learn about how you can use Stardoc's [build rules][generate] to generate your
- documentation in Markdown format.
-
-[format]: writing_stardoc.html
-[generate]: generating_stardoc.html
diff --git a/site/docs/skydoc_deprecation.md b/site/docs/skydoc_deprecation.md
deleted file mode 100644
index 0023661..0000000
--- a/site/docs/skydoc_deprecation.md
+++ /dev/null
@@ -1,141 +0,0 @@
----
-layout: default
-title: Skydoc Deprecation
-stylesheet: docs
----
-
-## Why was Skydoc deprecated?
-
-Skydoc functioned by evalutating Starlark files as if they were python. Unfortunately, while
-Starlark is **similar** to Python, there are some important syntactic differences between
-the languages. Assuming compatibility between the languages was inherently brittle, and resulted
-in a maintenance burden on the Starlark code. Specifically, if one of your transitive dependencies
-were to adopt a Starlark-compatible, python-incompatible construct, your Skydoc integration would
-break!
-
-Skydoc still exists as it's a nontrivial migration to Stardoc, but we plan on removing it
-in mid 2019.
-
-## How to migrate
-
-Stardoc is not a drop-in replacement for Skydoc. Its usage is slightly different, and it has some
-new features. It's recommended to take a look at the root Stardoc documentation, but here is
-a brief summary of some things to note for migration:
-
-### Docstring specification
-
-Stardoc uses inline documentation strings instead of python-style docstrings.
-For example, Skydoc documentation may have been specified with:
-
-```
-my_rule = rule(
- implementation = _my_rule_impl,
- attrs = {
- "srcs": attr.label_list(),
- "deps": attr.label_list(),
- },
-)
-"""Example rule documentation.
-
-Example:
- Here is an example of how to use this rule.
-
-Args:
- srcs: Source files used to build this target.
- deps: Dependencies for this target.
-"""
-```
-
-...the equivalent for Stardoc is:
-
-```
-my_rule = rule(
- implementation = _my_rule_impl,
- doc = """
-Example rule documentation.
-
-Example:
- Here is an example of how to use this rule.
-""",
- attrs = {
- "srcs" : attr.label_list(
- doc = "Source files used to build this target.",
- ),
- "deps" : attr.label_list(
- doc = "Dependencies for this target.",
- ),
- }
-)
-```
-
-### Different Starlark Rule
-
-Stardoc uses a different Starlark rule than Skydoc with different attributes.
-
-See [Generating Documentation](https://skydoc.bazel.build/docs/generating_stardoc.html) for a
-tutorial on using the new rule, and the
-[Build Rule Reference](https://skydoc.bazel.build/docs/stardoc_reference.html) for information
-about the new `stardoc` rule itself.
-
-### Starlark Dependencies
-
-Stardoc depends on your `bzl` file, all of its dependencies, and all of its **transitive**
-dependencies, so that it can fully evaluate your Starlark code.
-`bazel-skylib`'s `bzl_library` is your "best friend" for tracking `bzl` dependencies.
-
-For example, suppose your `mypackage/foo.bzl` file depends on `other/package/bar.bzl`, which
-depends on `third/package/baz.bzl`.
-
-**BUILD**:
-
-```
-load("@io_bazel_skydoc//stardoc:stardoc.bzl", "stardoc")
-
-stardoc(
- name = "foo_docs",
- input = "foo.bzl",
- out = "foo_doc.md",
- deps = ["//other/package:bar"],
-)
-```
-
-**other/package/BUILD**:
-
-```
-load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-
-bzl_library(
- name = "bar",
- srcs = ["bar.bzl"],
- deps = ["//third/package:baz"],
-)
-```
-
-**third/package/BUILD**:
-
-```
-load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-
-bzl_library(
- name = "baz",
- srcs = ["baz.bzl"],
-)
-```
-
-Thus, each `.bzl` file should appear in the `srcs` of a `bzl_library` target defined in the same
-package. The `deps` of this `bzl_library` should be (only) the `bzl_library` targets corresponding
-to the files that are _directly_ `load()`ed by the `srcs`. This structure mirrors that of other
-`<language>_library` rules in Bazel.
-
-This migration might involve creating a large number of new `bzl_library` targets,
-but this work is useful beyond Stardoc. For example, `bzl_library` can be also used to gather
-transitive Starlark dependencies for use in shell tests or other test frameworks.
-
-See [Generating Documentation](https://skydoc.bazel.build/docs/generating_stardoc.html) for
-a tutorial.
-
-## Migration Issues
-
-If you run into any issues migrating, please file a
-[github issue](https://github.com/bazelbuild/skydoc/issues).
-
diff --git a/site/docs/writing.md b/site/docs/writing.md
deleted file mode 100644
index f68c32d..0000000
--- a/site/docs/writing.md
+++ /dev/null
@@ -1,122 +0,0 @@
----
-layout: default
-title: Writing Documentation
-stylesheet: docs
----
-
-<nav class="toc">
- <h2>Contents</h2>
- <ul>
- <li><a href="#rule-documentation">Rule Documentation</a></li>
- <li><a href="#macro-documentation">Macro Documentation</a></li>
- <li><a href="#file-documentation">File Documentation</a></li>
- </ul>
-</nav>
-
-Since Skylark is a subset of Python, it uses Python docstrings for inline
-documentation for Skylark rules and macros as well as file (module) docstrings
-for documenting `.bzl` files. Skydoc supports Markdown for all inline
-documentation.
-
-When generating documentation, Skydoc parses the `.bzl` file to extract the
-inline documentation as well as evaluates the Skylark code to determine the
-types for rule attributes. Skydoc will generate documentation for all public
-rules and macros. For undocumented rules and macros, Skydoc will still generate
-the rule signature and table of attributes.
-
-Private rules and macros (i.e. those whose names begin with `_`) will not
-appear in generated documentation.
-
-<a name="rule-documentation"></a>
-## Rule Documentation
-
-[Skylark Rules](https://bazel.build/docs/skylark/rules.html) are declared using
-the `rule()` function as global variables. As a result, they are documented
-using variable docstrings, similar to those supported by
-[epydoc](http://epydoc.sourceforge.net/manual-docstring.html).
-
-Attributes are documented in a special `Args:` section. Begin the documentation
-for each attribute on an indented line with the attribute name followed by a
-colon `:`. The documentation for an attribute can span multiple lines as long as
-each line is indented from the first line:
-
-```python
-checkstyle = rule(
- implementation = _impl,
- attrs = {
- "srcs": attr.label_list(allow_files = FileType([".java"]),
- "config": attr.label(),
- },
-)
-"""Runs checkstyle on the given source files.
-
-This rule runs [Checkstyle](http://checkstyle.sourceforge.net/) on a set of
-Java source files.
-
-Args:
- srcs: The Java source files to run checkstyle against.
- config: The checkstyle configuration file to use.
-
- If no configuration file is provided, then the default `checkstyle.xml` will
- be used.
-"""
-```
-
-The `name` attribute that is common to all rules is documented by default, but
-the default documentation can be overwridden by adding documentation for `name`
-in `Args`.
-
-<a name="macro-documentation"></a>
-## Macro Documentation
-
-[Skylark Macros](https://bazel.build/docs/skylark/macros.html) are Python
-functions and are thus documented using function docstrings:
-
-```python
-def rat_check(name, srcs=[], format, visibility):
- """Runs Apache Rat license checks on the given source files.
-
- This rule runs [Apache Rat](http://creadur.apache.org/rat/) license checks on
- a given set of source files. Use `bazel build` to run the check.
-
- Args:
- name: A unique name for this rule.
- srcs: Source files to run the Rat license checks against.
-
- Note that the Bazel glob() function can be used to specify which source
- files to include and which to exclude.
- format: The format to write the Rat check report in.
- visibility: The visibility of this rule.
- """
- if format not in ['text', 'html', 'xml']:
- fail('Invalid format: %s' % format, 'format')
-
- _rat_check(
- name = name,
- srcs = srcs,
- format = format,
- visibility = visibility,
- )
-```
-
-Note that the format of the docstrings for rules and macros are identical.
-
-<a name="file-documentation"></a>
-## File Documentation
-
-Skydoc also supports file docstrings (similar to Python's module docstrings),
-which can be used to document a `.bzl` file, such as providing an overview of
-the rules and macros implemented in the file:
-
-```python
-"""Checkstyle Rules
-
-Skylark rules for running [Checkstyle](http://checkstyle.sourceforge.net/) on
-Java source files.
-"""
-```
-
-If a file docstring is provided, the short docstring will be used as the title
-on the generated documentation file, and the rest of the docstring (separated
-from the title with an empty line) will be used to generate an Overview section
-on the page.
diff --git a/site/docs/writing_stardoc.md b/site/docs/writing_stardoc.md
deleted file mode 100644
index c931744..0000000
--- a/site/docs/writing_stardoc.md
+++ /dev/null
@@ -1,127 +0,0 @@
----
-layout: default
-title: Writing Documentation
-stylesheet: docs
----
-
-<nav class="toc">
- <h2>Contents</h2>
- <ul>
- <li><a href="#rule-documentation">Rule Documentation</a></li>
- <li><a href="#provider-documentation">Provider Documentation</a></li>
- <li><a href="#macro-documentation">Macro Documentation</a></li>
- </ul>
-</nav>
-
-When generating documentation, Stardoc parses the `.bzl` file to extract the
-inline documentation as well as evaluates the Starlark code to determine the
-types for rule attributes. Stardoc will, by default, generate documentation for
-all rules, macros, and functions reachable from a target `.bzl` file.
-(See [Generating Stardoc][geenrating_stardoc.html] for details on limiting the
-symbols for which stardoc generates documentation.)
-
-<a name="rule-documentation"></a>
-## Rule Documentation
-
-When generating documentation, Stardoc parses the `.bzl` file to extract the
-inline documentation as well as evaluates the Starlark code to determine the
-types for rule attributes.
-
-Private rule attributes (attributes with names that begin with `_`) will not
-appear in generated documentation.
-
-[Starlark Rules](https://bazel.build/docs/skylark/rules.html) are declared using
-the `rule()` function as global variables.
-
-General rule documentation should be supplied in the `doc` parameter of the
-`rule()` function.
-
-Likewise, supply attribute documentation in the `doc` parameter of attribute
-schema-defining functions, such as `attr.label()`.
-
-```python
-my_rule = rule(
- implementation = _my_rule_impl,
- doc = """
-Example rule documentation.
-
-Example:
- Here is an example of how to use this rule.
-""",
- attrs = {
- "srcs" : attr.label_list(
- doc = "Source files used to build this target.",
- ),
- "deps" : attr.label_list(
- doc = "Dependencies for this target.",
- ),
- }
-)
-```
-
-The `name` attribute that is common to all rules is documented by default.
-
-<a name="provider-documentation"></a>
-## Provider Documentation
-
-[Starlark Providers](https://docs.bazel.build/versions/master/skylark/rules.html#providers)
-are documented similarly to rules: using docstrings specified as parameters during
-creation of the provider.
-
-General provider documentation can be specified using the `doc` parameter
-to the `provider()` function.
-
-Field-related documentation can be specified by passing a map to the
-`fields` parameter of the `provider()` function. Keys are required field
-names, and values are their corresponding docstrings.
-
-```
-MyInfo = provider(
- doc = """
-A provider with some really neat documentation.
-
-Contains information about some of my favorite things.
-""",
- fields = {'favorite_food' : 'A string representing my favorite food',
- 'favorite_color' : 'A string representing my favorite color'}
-)
-```
-
-<a name="macro-documentation"></a>
-## Macro Documentation
-
-[Starlark Macros](https://bazel.build/docs/skylark/macros.html) are documented
-using docstrings similar to Python docstring format:
-
-```python
-def rat_check(name, srcs=[], format, visibility):
- """Runs Apache Rat license checks on the given source files.
-
- This rule runs [Apache Rat](http://creadur.apache.org/rat/) license checks on
- a given set of source files. Use `bazel build` to run the check.
-
- Args:
- name: A unique name for this rule.
- srcs: Source files to run the Rat license checks against.
-
- Note that the Bazel glob() function can be used to specify which source
- files to include and which to exclude.
- format: The format to write the Rat check report in.
- visibility: The visibility of this rule.
- """
- if format not in ['text', 'html', 'xml']:
- fail('Invalid format: %s' % format, 'format')
-
- _rat_check(
- name = name,
- srcs = srcs,
- format = format,
- visibility = visibility,
- )
-```
-
-Parameters are documented in a special `Args:` section. Begin the documentation
-for each parameter on an indented line with the parameter name followed by a
-colon `:`. The documentation for a parameter can span multiple lines as long as
-each line is indented from the first line.
-
diff --git a/site/images/favicon.ico b/site/images/favicon.ico
deleted file mode 100644
index 97fc067..0000000
--- a/site/images/favicon.ico
+++ /dev/null
Binary files differ
diff --git a/site/images/sample.png b/site/images/sample.png
deleted file mode 100644
index 2cc8941..0000000
--- a/site/images/sample.png
+++ /dev/null
Binary files differ
diff --git a/site/images/screenshot.png b/site/images/screenshot.png
deleted file mode 100644
index 31bbb24..0000000
--- a/site/images/screenshot.png
+++ /dev/null
Binary files differ
diff --git a/site/index.html b/site/index.html
deleted file mode 100644
index 2ef4874..0000000
--- a/site/index.html
+++ /dev/null
@@ -1,86 +0,0 @@
----
-layout: home
-title: Home
-stylesheet: home
----
-
-<div class="hero">
- <div class="mdl-grid">
- <div class="mdl-cell mdl-cell--12-col-desktop mdl-cell--8-col-tablet
- mdl-cell--4-col-phone">
- <h1>Beautiful Documentation for Build Rules</h1>
- <p class="lead">
- Stardoc is an easy-to-use documentation generator for Bazel build rules
- written in Starlark.
- </p>
- <p class="lead">
- (Stardoc is a recent replacement of the documentation generator tool named "Skydoc")
- </p>
- <a href="/docs/getting_started_stardoc.html" class="mdl-button mdl-js-button
- mdl-button--raised mdl-js-ripple-effect">Get Started with Stardoc</a>
- <a href="/docs/getting_started.html" class="mdl-button mdl-js-button
- mdl-button--raised mdl-js-ripple-effect">Take me to Skydoc documentation instead</a>
- </div>
- </div>
-</div>
-<div class="feature">
- <div class="mdl-grid">
- <div class="mdl-cell mdl-cell--4-col-desktop mdl-cell--8-col-tablet
- mdl-cell--4-col-phone">
- <h1>Python docstrings</h1>
- <p>
- Document your Starlark rules
- <a href="docs/writing_stardoc.html">alongside their definition</a>.
- </p>
-{% highlight python %}
-my_rule = rule(
- implementation = _my_rule_impl,
- doc = """
-Example rule documentation.
-
-Example:
- Here is an example of how to use this rule.
-""",
- attrs = {
- "srcs" : attr.label_list(
- doc = "Source files used to build this target.",
- ),
- "deps" : attr.label_list(
- doc = "Dependencies for this target.",
- ),
- }
-)
-{% endhighlight %}
- </div>
-
- <div class="mdl-cell mdl-cell--4-col-desktop mdl-cell--8-col-tablet
- mdl-cell--4-col-phone">
- <h1>Convenient Build Rules</h1>
- <p>
- Skydoc's own convenient Bazel <a href="docs/generating_stardoc.html">build
- rules</a> making it to integrate Skydoc into your build or release
- pipeline.
- </p>
-{% highlight python %}
-load("@io_bazel_skydoc//stardoc:stardoc.bzl",
- "stardoc")
-
-stardoc(
- name = "checkstyle-docs",
- input = "checkstyle.bzl",
- out = "checkstyle_doc.md",
-)
-{% endhighlight %}
-<pre class="term">$ <span class="info">bazel</span> build :checkstyle-docs</pre>
- </div>
-
- <div class="mdl-cell mdl-cell--4-col-desktop mdl-cell--8-col-tablet
- mdl-cell--4-col-phone">
- <h1>Beautiful Documentation</h1>
- <p>
- Generate <a href="docs/skylark.html">documentation</a> in Markdown.
- </p>
- <img src="/images/sample.png" class="responsive">
- </div>
- </div>
-</div>
diff --git a/site/jekyll-tree.sh b/site/jekyll-tree.sh
deleted file mode 100755
index 10fa0a0..0000000
--- a/site/jekyll-tree.sh
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/usr/bin/env bash
-# Copyright 2016 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.
-
-set -eu
-
-readonly OUTPUT=${PWD}/$1
-shift
-readonly JEKYLL_BASE=${PWD}/$1
-shift
-readonly SKYLARK_DOCS=${PWD}/$1
-shift
-readonly STARDOC_DOC=${PWD}/$1
-
-# Create temporary directory that is removed when this script exits.
-readonly TMP=$(mktemp -d "${TMPDIR:-/tmp}/tmp.XXXXXXXX")
-readonly OUT_DIR="$TMP/out"
-trap "rm -rf ${TMP}" EXIT
-
-function setup {
- mkdir -p "$OUT_DIR"
- cd "$OUT_DIR"
- tar -xf "${JEKYLL_BASE}"
-}
-
-function unpack_skylark_doc {
- local generated_dir="$TMP/skylark"
- mkdir -p $generated_dir
-
- # Unpack the generated documentation.
- unzip -qq "$SKYLARK_DOCS" -d "$generated_dir"
-
- for f in $(find "$generated_dir" -name "*.md"); do
- ( cat <<EOF
----
-layout: default
-title: Build Rule Reference
-stylesheet: docs
----
-EOF
- cat $f; ) > "$OUT_DIR/docs/$(basename $f)"
- done
-}
-
-function include_skydoc_doc {
- ( cat <<EOF
----
-layout: default
-title: Build Rule Reference
-stylesheet: docs
----
-EOF
- cat $STARDOC_DOC; ) > "$OUT_DIR/docs/stardoc_reference.md"
-}
-
-function package_output {
- cd "$OUT_DIR"
- tar -hcf $OUTPUT $(find . -type f | sort)
-}
-
-function main {
- setup
- unpack_skylark_doc
- include_skydoc_doc
- package_output
- cd "$(dirname ${TMP})"
-}
-main
diff --git a/site/roadmap.md b/site/roadmap.md
deleted file mode 100644
index 00c63f0..0000000
--- a/site/roadmap.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-layout: default
-title: Roadmap
-stylesheet: docs
----
-
-* Document default values for rule and macro attributes.
-* Enable greater customization of generated documentation, such as adding custom
- HTML and CSS to the documentation pages.
-* Improve documentation for Skylark
- [Aspects](https://www.bazel.build/docs/skylark/aspects.html) and
- [Repository Rules](https://www.bazel.build/docs/skylark/repository_rules.html).
diff --git a/site/search.html b/site/search.html
deleted file mode 100644
index c455a81..0000000
--- a/site/search.html
+++ /dev/null
@@ -1,18 +0,0 @@
----
-layout: home
-title: Site Search
-stylesheet: home
----
-
-<script>
- (function() {
- var cx = '008327220137350982602:0mpaowwcmvg';
- var gcse = document.createElement('script');
- gcse.type = 'text/javascript';
- gcse.async = true;
- gcse.src = 'https://cse.google.com/cse.js?cx=' + cx;
- var s = document.getElementsByTagName('script')[0];
- s.parentNode.insertBefore(gcse, s);
- })();
-</script>
-<gcse:search></gcse:search>
diff --git a/skydoc-screenshot.png b/skydoc-screenshot.png
deleted file mode 100644
index 31bbb24..0000000
--- a/skydoc-screenshot.png
+++ /dev/null
Binary files differ
diff --git a/skydoc/BUILD b/skydoc/BUILD
deleted file mode 100644
index d3c191b..0000000
--- a/skydoc/BUILD
+++ /dev/null
@@ -1,107 +0,0 @@
-licenses(["notice"]) # Apache 2.0
-
-package(default_visibility = ["//visibility:public"])
-
-load("@com_google_protobuf//:protobuf.bzl", "py_proto_library")
-load("@rules_python//python:defs.bzl", "py_binary", "py_library", "py_test")
-
-py_proto_library(
- name = "build_pb_py",
- srcs = ["build.proto"],
- default_runtime = "@com_google_protobuf//:protobuf_python",
- protoc = "@com_google_protobuf//:protoc",
-)
-
-py_library(
- name = "common",
- srcs = ["common.py"],
-)
-
-py_test(
- name = "common_test",
- srcs = ["common_test.py"],
- python_version = "PY2",
- deps = [
- ":common",
- ],
-)
-
-py_library(
- name = "load_extractor",
- srcs = ["load_extractor.py"],
-)
-
-py_test(
- name = "load_extractor_test",
- srcs = ["load_extractor_test.py"],
- python_version = "PY2",
- deps = [
- ":load_extractor",
- ],
-)
-
-py_library(
- name = "macro_extractor",
- srcs = ["macro_extractor.py"],
- deps = [":common"],
-)
-
-py_test(
- name = "macro_extractor_test",
- srcs = ["macro_extractor_test.py"],
- python_version = "PY2",
- deps = [
- ":build_pb_py",
- ":macro_extractor",
- ],
-)
-
-py_library(
- name = "rule_extractor",
- srcs = ["rule_extractor.py"],
- deps = [
- ":common",
- ":load_extractor",
- "//skydoc/stubs",
- ],
-)
-
-py_test(
- name = "rule_extractor_test",
- srcs = ["rule_extractor_test.py"],
- python_version = "PY2",
- deps = [
- ":build_pb_py",
- ":load_extractor",
- ":rule_extractor",
- ],
-)
-
-py_library(
- name = "rule",
- srcs = ["rule.py"],
- deps = [
- ":build_pb_py",
- "//external:mistune",
- ],
-)
-
-py_binary(
- name = "skydoc",
- srcs = ["main.py"],
- data = [
- "//skydoc/sass:main.css",
- "//skydoc/templates",
- ],
- # no py_binary launcher
- main = "main.py",
- python_version = "PY2",
- deps = [
- ":common",
- ":macro_extractor",
- ":rule",
- ":rule_extractor",
- "//external:jinja2",
- "@bazel_tools//tools/python/runfiles",
- ],
-)
diff --git a/skydoc/build.proto b/skydoc/build.proto
deleted file mode 100644
index 8d344fa..0000000
--- a/skydoc/build.proto
+++ /dev/null
@@ -1,112 +0,0 @@
-// Copyright 2014 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.
-
-syntax = "proto2";
-
-package skydoc;
-
-// internal options
-
-message Attribute {
- // Indicates the type of attribute.
- enum Discriminator {
- INTEGER = 1; // int_value
- STRING = 2; // string_value
- LABEL = 3; // string_value
- OUTPUT = 4; // string_value
- STRING_LIST = 5; // string_list_value
- LABEL_LIST = 6; // string_list_value
- OUTPUT_LIST = 7; // string_list_value
- DISTRIBUTION_SET = 8; // string_list_value - order is unimportant
- LICENSE = 9; // license
- STRING_DICT = 10; // string_dict_value
- FILESET_ENTRY_LIST = 11; // fileset_list_value
- LABEL_LIST_DICT = 12; // label_list_dict_value
- STRING_LIST_DICT = 13; // string_list_dict_value
- BOOLEAN = 14; // int, bool and string value
- TRISTATE = 15; // tristate, int and string value
- INTEGER_LIST = 16; // int_list_value
- UNKNOWN = 18; // unknown type, use only for build extensions
- LABEL_DICT_UNARY = 19; // label_dict_unary_value
- SELECTOR_LIST = 20; // selector_list
- NAME = 21; // name, use only for the name attribute
- LABEL_KEYED_STRING_DICT = 22; // label_keyed_string_dict
-
- // Deprecated.
- DEPRECATED_STRING_DICT_UNARY = 17;
- }
-}
-
-// Information about allowed rule classes for a specific attribute of a rule.
-message AllowedRuleClassInfo {
- enum AllowedRuleClasses {
- ANY = 1; // Any rule is allowed to be in this attribute
- SPECIFIED = 2; // Only the explicitly listed rules are allowed
- }
-
- required AllowedRuleClasses policy = 1;
-
- // Rule class names of rules allowed in this attribute, e.g "cc_library",
- // "py_binary". Only present if the allowed_rule_classes field is set to
- // SPECIFIED.
- repeated string allowed_rule_class = 2;
-}
-
-// Information about an output target for a rule.
-message OutputTarget {
- // The template name of the output target (e.g. %{name}.jar.
- optional string template = 1;
- // The documentation for the output target.
- optional string documentation = 2;
-}
-
-// This message represents a single attribute of a single rule.
-message AttributeDefinition {
- // Rule name, e.g. "cc_library"
- required string name = 1;
- required Attribute.Discriminator type = 2;
- required bool mandatory = 3;
-
- // Only present for attributes of type LABEL and LABEL_LIST.
- optional AllowedRuleClassInfo allowed_rule_classes = 4;
- // The documentation for the attribute.
- optional string documentation = 5;
- // The string representation of the default value of the attribute.
- optional string default = 6;
-}
-
-message RuleDefinition {
- required string name = 1;
- // Only contains documented attributes
- repeated AttributeDefinition attribute = 2;
- // The documentation for the rule.
- optional string documentation = 3;
- // Documentation illustrating example usages of the rule.
- optional string example_documentation = 4;
-
- // The list of outputs for this rule.
- repeated OutputTarget output = 5;
-
- enum Type {
- RULE = 1;
- MACRO = 2;
- REPOSITORY_RULE = 3;
- }
- optional Type type = 6;
-}
-
-message BuildLanguage {
- // Only contains documented rule definitions
- repeated RuleDefinition rule = 1;
-}
diff --git a/skydoc/common.py b/skydoc/common.py
deleted file mode 100644
index 8ec4bd5..0000000
--- a/skydoc/common.py
+++ /dev/null
@@ -1,176 +0,0 @@
-# Copyright 2016 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.
-
-"""Common functions for skydoc."""
-
-import collections
-import re
-import textwrap
-from xml.sax.saxutils import escape
-
-
-ARGS_HEADING = "Args:"
-EXAMPLES_HEADING = "Examples:"
-EXAMPLE_HEADING = "Example:"
-OUTPUTS_HEADING = "Outputs:"
-
-
-class InputError(Exception):
- pass
-
-
-class ExtractedDocs(object):
- """Simple class to contain the documentation extracted from a docstring."""
-
- def __init__(self, doc, attr_docs, example_doc, output_docs):
- self.doc = doc
- self.attr_docs = attr_docs
- self.example_doc = example_doc
- self.output_docs = output_docs
-
-
-def leading_whitespace(line):
- """Returns the number of leading whitespace in the line."""
- return len(line) - len(line.lstrip())
-
-
-def validate_strip_prefix(strip_prefix, bzl_files):
- if not strip_prefix:
- return strip_prefix
- prefix = strip_prefix if strip_prefix.endswith('/') else strip_prefix + '/'
- for path in bzl_files:
- if not path.startswith(prefix):
- raise InputError(
- 'Input file %s does not have path prefix %s. Directory prefix set '
- 'with --strip_prefix must be common to all input files.'
- % (path, strip_prefix))
- return prefix
-
-def _parse_attribute_docs(attr_docs, lines, index):
- """Extracts documentation in the form of name: description.
-
- This includes documentation for attributes and outputs.
-
- Args:
- attr_docs: A dict used to store the extracted documentation.
- lines: List containing the input docstring split into lines.
- index: The index in lines containing the heading that begins the
- documentation, such as "Args:" or "Outputs:".
-
- Returns:
- Returns the next index after the documentation to resume processing
- documentation in the caller.
- """
- attr = None # Current attribute name
- desc = None # Description for current attribute
- args_leading_ws = leading_whitespace(lines[index])
- i = index + 1
- while i < len(lines):
- line = lines[i]
- # If a blank line is encountered, we have finished parsing the "Args"
- # section.
- if line.strip() and leading_whitespace(line) == args_leading_ws:
- break
- # In practice, users sometimes add a "-" prefix, so we strip it even
- # though it is not recommended by the style guide
- pattern = re.compile(r"""
- # Any amount of leading whitespace, plus an optional "-" prefix.
- ^\s*-?\s*
- # The attribute name, plus an optional "**" prefix for a **kwargs
- # attribute.
- ((?:\*\*)?[`\{\}\%\.\w\*]+)
- # A colon plus any amount of whitespace to separate the attribute name
- # from the description text.
- :\s*
- # The attribute description text.
- (.*)
- """, re.VERBOSE)
- match = re.search(pattern, line)
- if match: # We have found a new attribute
- if attr:
- attr_docs[attr] = escape(desc)
- attr, desc = match.group(1), match.group(2)
- elif attr:
- # Merge documentation when it is multiline
- desc = desc + "\n" + line.strip()
- i += + 1
-
- if attr:
- attr_docs[attr] = escape(desc).strip()
-
- return i
-
-
-def _parse_example_docs(examples, lines, index):
- """Extracts example documentation.
-
- Args:
- examples: A list to contain the lines containing the example documentation.
- lines: List containing the input docstring split into lines.
- index: The index in lines containing "Example[s]:", which begins the
- example documentation.
-
- Returns:
- Returns the next index after the attribute documentation to resume
- processing documentation in the caller.
- """
- heading_leading_ws = leading_whitespace(lines[index])
- i = index + 1
- while i < len(lines):
- line = lines[i]
- if line.strip() and leading_whitespace(line) == heading_leading_ws:
- break
- examples.append(line)
- i += 1
-
- return i
-
-
-def parse_docstring(doc):
- """Analyzes the documentation string for attributes.
-
- This looks for the "Args:" separator to fetch documentation for each
- attribute. The "Args" section ends at the first blank line.
-
- Args:
- doc: The documentation string
-
- Returns:
- The new documentation string and a dictionary that maps each attribute to
- its documentation
- """
- attr_docs = collections.OrderedDict() if hasattr(collections, 'OrderedDict') else {}
- output_docs = collections.OrderedDict() if hasattr(collections, 'OrderedDict') else {}
- examples = []
- lines = doc.split("\n")
- docs = []
- i = 0
- while i < len(lines):
- line = lines[i]
- if line.strip() == ARGS_HEADING:
- i = _parse_attribute_docs(attr_docs, lines, i)
- continue
- elif line.strip() == EXAMPLES_HEADING or line.strip() == EXAMPLE_HEADING:
- i = _parse_example_docs(examples, lines, i)
- continue
- elif line.strip() == OUTPUTS_HEADING:
- i = _parse_attribute_docs(output_docs, lines, i)
- continue
-
- docs.append(line)
- i += 1
-
- doc = "\n".join(docs).strip()
- examples_doc = textwrap.dedent("\n".join(examples)).strip()
- return ExtractedDocs(doc, attr_docs, examples_doc, output_docs)
diff --git a/skydoc/common_test.py b/skydoc/common_test.py
deleted file mode 100644
index af12e5e..0000000
--- a/skydoc/common_test.py
+++ /dev/null
@@ -1,204 +0,0 @@
-# Copyright 2016 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.
-
-import unittest
-# internal imports
-
-from skydoc import common
-
-
-class CommonTest(unittest.TestCase):
- """Unit tests for common functions."""
-
- def test_rule_doc_only(self):
- docstring = 'Rule documentation only docstring.'
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual('Rule documentation only docstring.', extracted_docs.doc)
- self.assertDictEqual({}, extracted_docs.attr_docs)
- self.assertEqual('', extracted_docs.example_doc)
- self.assertDictEqual({}, extracted_docs.output_docs)
-
- def test_rule_and_attribute_doc(self):
- docstring = (
- 'Rule and attribute documentation.\n'
- '\n'
- 'Args:\n'
- ' name: A unique name for this rule.\n'
- ' visibility: The visibility of this rule.\n')
- expected_attrs = {
- 'name': 'A unique name for this rule.',
- 'visibility': 'The visibility of this rule.'
- }
-
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual('Rule and attribute documentation.', extracted_docs.doc)
- self.assertDictEqual(expected_attrs, extracted_docs.attr_docs)
- self.assertEqual('', extracted_docs.example_doc)
- self.assertDictEqual({}, extracted_docs.output_docs)
-
- def test_multi_line_doc(self):
- docstring = (
- 'Multi-line rule and attribute documentation.\n'
- '\n'
- 'Rule doc continued here.\n'
- '\n'
- 'Args:\n'
- ' name: A unique name for this rule.\n'
- '\n'
- ' Documentation for name continued here.\n'
- ' visibility: The visibility of this rule.\n'
- '\n'
- ' Documentation for visibility continued here.\n')
- expected_doc = (
- 'Multi-line rule and attribute documentation.\n'
- '\n'
- 'Rule doc continued here.')
- expected_attrs = {
- 'name': ('A unique name for this rule.\n\n'
- 'Documentation for name continued here.'),
- 'visibility': ('The visibility of this rule.\n\n'
- 'Documentation for visibility continued here.')
- }
-
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual(expected_doc, extracted_docs.doc)
- self.assertDictEqual(expected_attrs, extracted_docs.attr_docs)
- self.assertEqual('', extracted_docs.example_doc)
- self.assertDictEqual({}, extracted_docs.output_docs)
-
- def test_invalid_args(self):
- docstring = (
- 'Rule and attribute documentation.\n'
- '\n'
- 'Foo:\n'
- ' name: A unique name for this rule.\n'
- ' visibility: The visibility of this rule.\n')
-
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual(docstring.strip(), extracted_docs.doc)
- self.assertDictEqual({}, extracted_docs.attr_docs)
- self.assertEqual('', extracted_docs.example_doc)
- self.assertDictEqual({}, extracted_docs.output_docs)
-
- def test_example(self):
- docstring = (
- 'Documentation with example\n'
- '\n'
- 'Examples:\n'
- ' An example of how to use this rule:\n'
- '\n'
- ' example_rule()\n'
- '\n'
- ' Note about this example.\n'
- '\n'
- 'Args:\n'
- ' name: A unique name for this rule.\n'
- ' visibility: The visibility of this rule.\n')
- expected_attrs = {
- 'name': 'A unique name for this rule.',
- 'visibility': 'The visibility of this rule.'
- }
- expected_example_doc = (
- 'An example of how to use this rule:\n'
- '\n'
- ' example_rule()\n'
- '\n'
- 'Note about this example.')
-
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual('Documentation with example', extracted_docs.doc)
- self.assertDictEqual(expected_attrs, extracted_docs.attr_docs)
- self.assertEqual(expected_example_doc, extracted_docs.example_doc)
- self.assertDictEqual({}, extracted_docs.output_docs)
-
- def test_example_after_attrs(self):
- docstring = (
- 'Documentation with example\n'
- '\n'
- 'Args:\n'
- ' name: A unique name for this rule.\n'
- ' visibility: The visibility of this rule.\n'
- '\n'
- 'Examples:\n'
- ' An example of how to use this rule:\n'
- '\n'
- ' example_rule()\n'
- '\n'
- ' Note about this example.\n')
- expected_attrs = {
- 'name': 'A unique name for this rule.',
- 'visibility': 'The visibility of this rule.'
- }
- expected_example_doc = (
- 'An example of how to use this rule:\n'
- '\n'
- ' example_rule()\n'
- '\n'
- 'Note about this example.')
-
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual('Documentation with example', extracted_docs.doc)
- self.assertDictEqual(expected_attrs, extracted_docs.attr_docs)
- self.assertEqual(expected_example_doc, extracted_docs.example_doc)
- self.assertDictEqual({}, extracted_docs.output_docs)
-
- def test_outputs(self):
- docstring = (
- 'Documentation with outputs\n'
- '\n'
- 'Args:\n'
- ' name: A unique name for this rule.\n'
- ' visibility: The visibility of this rule.\n'
- '\n'
- 'Outputs:\n'
- ' %{name}.jar: A Java archive.\n'
- ' %{name}_deploy.jar: A Java archive suitable for deployment.\n'
- '\n'
- ' Only built if explicitly requested.\n')
- expected_attrs = {
- 'name': 'A unique name for this rule.',
- 'visibility': 'The visibility of this rule.'
- }
- expected_outputs = {
- '%{name}.jar': 'A Java archive.',
- '%{name}_deploy.jar': ('A Java archive suitable for deployment.\n\n'
- 'Only built if explicitly requested.'),
- }
-
- extracted_docs = common.parse_docstring(docstring)
- self.assertEqual('Documentation with outputs', extracted_docs.doc)
- self.assertDictEqual(expected_attrs, extracted_docs.attr_docs)
- self.assertEqual('', extracted_docs.example_doc)
- self.assertDictEqual(expected_outputs, extracted_docs.output_docs)
-
- def _invalid_prefix(self, prefix, bzl_files):
- self.assertRaises(common.InputError,
- common.validate_strip_prefix,
- prefix,
- bzl_files)
-
- def test_strip_prefix(self):
- bzl_files = ['foo/bar/bar.bzl', 'foo/bar/baz/baz.bzl']
- self.assertEqual('', common.validate_strip_prefix('', bzl_files))
- self.assertEqual('foo/', common.validate_strip_prefix('foo/', bzl_files))
- self.assertEqual('foo/bar/',
- common.validate_strip_prefix('foo/bar', bzl_files))
-
- self._invalid_prefix('bar', ['foo/bar.bzl'])
- self._invalid_prefix('bar', ['foo/foo.bzl', 'bar/bar.bzl'])
- self._invalid_prefix('bar', ['bar.bzl'])
- self._invalid_prefix('bar', ['barfoo/bar.bzl'])
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/skydoc/load_extractor.py b/skydoc/load_extractor.py
deleted file mode 100644
index e083a3d..0000000
--- a/skydoc/load_extractor.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# Copyright 2017 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.
-
-"""Extracts information about symbols loaded from other .bzl files."""
-
-import ast
-from collections import namedtuple
-
-LoadSymbol = namedtuple('LoadSymbol', ['label', 'symbol', 'alias'])
-"""Information about a symbol loaded from another .bzl file."""
-
-
-class LoadExtractorError(Exception):
- """Error raised by LoadExtractor"""
- pass
-
-
-class LoadExtractor(object):
- """Extracts information on symbols load()ed from other .bzl files."""
-
- def _extract_loads(self, bzl_file):
- """Walks the AST and extracts information on loaded symbols."""
- load_symbols = []
- try:
- tree = None
- with open(bzl_file) as f:
- tree = ast.parse(f.read(), bzl_file)
- key = None
- for node in ast.iter_child_nodes(tree):
- if not isinstance(node, ast.Expr):
- continue
- call = node.value
- if (not isinstance(call, ast.Call) or
- not isinstance(call.func, ast.Name) or
- call.func.id != 'load'):
- continue
-
- args = []
- for arg in call.args:
- if not isinstance(arg, ast.Str):
- raise LoadExtractorError(
- 'Only string literals in load statments are supported.')
- args.append(arg.s)
- kwargs = {}
- for keyword in call.keywords:
- if not isinstance(keyword.value, ast.Str):
- raise LoadExtractorError(
- 'Only string literals in load statments are supported.')
- kwargs[keyword.arg] = keyword.value.s
-
- label = args[0]
- for arg in args[1:]:
- load_symbol = LoadSymbol(label, arg, None)
- load_symbols.append(load_symbol)
- for alias, symbol in kwargs.items():
- load_symbol = LoadSymbol(label, symbol, alias)
- load_symbols.append(load_symbol)
-
- except IOError as e:
- print("Failed to parse {0}: {1}".format(bzl_file, e.strerror))
- pass
-
- return load_symbols
-
- def _validate_loads(self, load_symbols):
- """Checks that there are no collisions from the extracted symbols."""
- symbols = set()
- for load in load_symbols:
- if load.alias:
- if load.alias in symbols:
- raise LoadExtractorError(
- "Load symbol conflict: %s (aliased from %s) loaded from %s" %
- (load.alias, load.symbol, load.label))
- else:
- symbols.add(load.alias)
- elif load.symbol in symbols:
- raise LoadExtractorError(
- "Load symbol conflict: %s loaded from %s" %
- (load.alias, load.label))
- else:
- symbols.add(load.symbol)
-
- def extract(self, bzl_file):
- """Extracts symbols loaded from other .bzl files.
-
- Walks the AST of the .bzl files and extracts information about symbols
- loaded from other .bzl files from load() calls. Then, validate the
- extracted symbols to check that all symbols are unique.
-
- Note that only load() calls where all arguments are string literals
- (ast.Str) are supported.
-
- Args:
- bzl_file: The .bzl file to extract load symbols from.
-
- Returns:
- List of LoadSymbol objects.
- """
- load_symbols = self._extract_loads(bzl_file)
- self._validate_loads(load_symbols)
- return load_symbols
diff --git a/skydoc/load_extractor_test.py b/skydoc/load_extractor_test.py
deleted file mode 100644
index a38172e..0000000
--- a/skydoc/load_extractor_test.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# Copyright 2017 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.
-
-import os
-import tempfile
-import textwrap
-import unittest
-
-from skydoc import load_extractor
-
-class LoadExtractorTest(unittest.TestCase):
-
- def check_symbols(self, src, expected):
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
- extractor = load_extractor.LoadExtractor()
- load_symbols = extractor.extract(tf.name)
- os.remove(tf.name)
-
- self.assertEqual(expected, load_symbols)
-
- def test_load(self):
- src = textwrap.dedent("""\
- load("//foo/bar:bar.bzl", "foo_library")
- load("//foo/bar:baz.bzl", "foo_test", orig_foo_binary = "foo_binary")
- """)
- expected = [
- load_extractor.LoadSymbol('//foo/bar:bar.bzl', 'foo_library', None),
- load_extractor.LoadSymbol('//foo/bar:baz.bzl', 'foo_test', None),
- load_extractor.LoadSymbol('//foo/bar:baz.bzl', 'foo_binary',
- 'orig_foo_binary'),
- ]
- self.check_symbols(src, expected)
-
- def raises_error(self, src):
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
-
- extractor = load_extractor.LoadExtractor()
- self.assertRaises(load_extractor.LoadExtractorError,
- extractor.extract, tf.name)
- os.remove(tf.name)
-
- def test_invalid_non_string_literal_in_label(self):
- src = textwrap.dedent("""\
- load(load_label, "foo_library")
- """)
- self.raises_error(src)
-
- def test_invalid_non_string_literal_in_keywords(self):
- src = textwrap.dedent("""\
- load("//foo/bar:bar.bzl", loaded_symbol)
- """)
- self.raises_error(src)
-
- def test_invalid_symbol_conflict(self):
- src = textwrap.dedent("""\
- load("//foo:bar.bzl", "foo_binary", "foo_library")
- load("//foo:baz.bzl", "foo_library")
- """)
- self.raises_error(src)
-
- def test_invalid_symbol_alias_conflict(self):
- src = textwrap.dedent("""\
- load("//foo:bar.bzl", foo_library="some_foo_library")
- load("//foo:baz.bzl", "foo_library")
- """)
- self.raises_error(src)
-
- def test_invalid_duplicate_symbol_loaded(self):
- src = textwrap.dedent("""\
- load("//foo:bar.bzl", "foo_library", "foo_library")
- """)
- self.raises_error(src)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/skydoc/macro_extractor.py b/skydoc/macro_extractor.py
deleted file mode 100644
index 0be9709..0000000
--- a/skydoc/macro_extractor.py
+++ /dev/null
@@ -1,143 +0,0 @@
-# Copyright 2016 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.
-
-"""Extractor for Skylark macro documentation."""
-
-import ast
-# internal imports
-
-from skydoc import build_pb2
-from skydoc import common
-
-
-def get_type(expr):
- """Find the type of an expression.
-
- Args:
- expr: The expression to check.
-
- Returns:
- The type of the expression.
- """
- if isinstance(expr, ast.Num):
- return build_pb2.Attribute.INTEGER
- elif isinstance(expr, ast.Str):
- return build_pb2.Attribute.STRING
- elif isinstance(expr, ast.List):
- return build_pb2.Attribute.STRING_LIST
- elif isinstance(expr, ast.Name) and (expr.id == "True" or expr.id == "False"):
- return build_pb2.Attribute.BOOLEAN
- elif hasattr(ast, 'NameConstant') and isinstance(expr, ast.NameConstant) and (expr.value == True or expr.value == False):
- return build_pb2.Attribute.BOOLEAN
- else:
- return build_pb2.Attribute.UNKNOWN
-
-class MacroDocExtractor(object):
- """Extracts documentation for macros from a .bzl file"""
-
- def __init__(self):
- """Inits MacroDocExtractor with a new BuildLanguage proto"""
- self.__language = build_pb2.BuildLanguage()
- self.title = ""
- self.description = ""
-
- def _add_file_docs(self, tree):
- """Extracts the file docstring of the .bzl file."""
- docstring = ast.get_docstring(tree)
- if docstring == None:
- return
- lines = docstring.split("\n")
- i = 0
- for line in lines:
- if line != '':
- i = i + 1
- else:
- break
-
- self.title = " ".join(lines[:i])
- self.description = "\n".join(lines[i + 1:])
-
- def _add_macro_doc(self, stmt):
- # The defaults array contains default values for the last arguments.
- # The first shift arguments are mandatory.
- shift = len(stmt.args.args) - len(stmt.args.defaults)
-
- rule = self.__language.rule.add()
- rule.name = stmt.name
- rule.type = build_pb2.RuleDefinition.MACRO
-
- doc = ast.get_docstring(stmt)
- if doc:
- extracted_docs = common.parse_docstring(doc)
- rule.documentation = extracted_docs.doc
- if extracted_docs.example_doc:
- rule.example_documentation = extracted_docs.example_doc
- else:
- extracted_docs = common.ExtractedDocs(
- doc="", attr_docs={}, example_doc="", output_docs={})
-
- for i in range(len(stmt.args.args)):
- attr = rule.attribute.add()
- attr_name = stmt.args.args[i].id if hasattr(stmt.args.args[i], 'id') else stmt.args.args[i].arg
- attr.name = attr_name
-
- if attr_name in extracted_docs.attr_docs:
- attr.documentation = extracted_docs.attr_docs[attr_name]
-
- if i < shift: # The first arguments are mandatory
- attr.mandatory = True
- attr.type = build_pb2.Attribute.UNKNOWN
- else:
- node = stmt.args.defaults[i - shift]
- attr.mandatory = False
- attr.type = get_type(node)
- if attr.type == build_pb2.Attribute.BOOLEAN:
- attr.default = str(node.value) if hasattr(node, 'value') else node.id
-
- if stmt.args.kwarg:
- attr = rule.attribute.add()
- attr_name = '**' + (stmt.args.kwarg.arg if hasattr(stmt.args.kwarg, 'arg') else stmt.args.kwarg)
- attr.name = attr_name
- attr.mandatory = False
- attr.type = build_pb2.Attribute.UNKNOWN
- if attr_name in extracted_docs.attr_docs:
- attr.documentation = extracted_docs.attr_docs[attr_name]
-
- for template, doc in extracted_docs.output_docs.items():
- output = rule.output.add()
- output.template = template
- output.documentation = doc
-
- def parse_bzl(self, bzl_file):
- """Extracts documentation for all public macros from the given .bzl file.
-
- Args:
- bzl_file: The .bzl file to extract macro documentation from.
- """
- try:
- with open(bzl_file) as f:
- tree = ast.parse(f.read(), bzl_file)
- self._add_file_docs(tree)
- for stmt in tree.body:
- if isinstance(stmt, ast.FunctionDef) and not stmt.name.startswith("_"):
- self._add_macro_doc(stmt)
- except IOError as e:
- # Ignore missing extension
- print("Failed to parse {0}: {1}".format(bzl_file, e.strerror))
- pass
-
- def proto(self):
- """Returns the proto containing the macro documentation."""
- return self.__language
-
diff --git a/skydoc/macro_extractor_test.py b/skydoc/macro_extractor_test.py
deleted file mode 100644
index 5a488c7..0000000
--- a/skydoc/macro_extractor_test.py
+++ /dev/null
@@ -1,472 +0,0 @@
-# Copyright 2016 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.
-
-
-
-import os
-import tempfile
-import textwrap
-import unittest
-# internal imports
-
-from google.protobuf import text_format
-from skydoc import build_pb2
-from skydoc import macro_extractor
-
-
-class MacroExtractorTest(unittest.TestCase):
-
- def check_protos(self, src, expected):
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
-
- expected_proto = build_pb2.BuildLanguage()
- text_format.Merge(expected, expected_proto)
-
- extractor = macro_extractor.MacroDocExtractor()
- extractor.parse_bzl(tf.name)
- proto = extractor.proto()
- os.remove(tf.name)
- self.assertEqual(expected_proto, proto)
-
- def test_multi_line_description(self):
- src = textwrap.dedent("""\
- def multiline(name, foo=False, visibility=None):
- \"\"\"A rule with multiline documentation.
-
- Some more documentation about this rule here.
-
- Args:
- name: A unique name for this rule.
- foo: A test argument.
-
- Documentation for foo continued here.
- visibility: The visibility of this rule.
-
- Documentation for visibility continued here.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "multiline"
- documentation: "A rule with multiline documentation.\\n\\nSome more documentation about this rule here."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "foo"
- type: BOOLEAN
- mandatory: false
- default: "False"
- documentation: "A test argument.\\n\\nDocumentation for foo continued here."
- }
- attribute {
- name: "visibility"
- type: UNKNOWN
- mandatory: false
- documentation: "The visibility of this rule.\\n\\nDocumentation for visibility continued here."
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_kwargs(self):
- src = textwrap.dedent("""\
- def with_keyword_args(name, foo=False, **kwargs):
- \"\"\"A rule with keyword args.
-
- Args:
- name: A unique name for this rule.
- foo: A test argument.
- **kwargs: Keyword arguments.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- **kwargs
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "with_keyword_args"
- documentation: "A rule with keyword args."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "foo"
- type: BOOLEAN
- mandatory: false
- default: "False"
- documentation: "A test argument."
- }
- attribute {
- name: "**kwargs"
- type: UNKNOWN
- mandatory: false
- documentation: "Keyword arguments."
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_undocumented(self):
- src = textwrap.dedent("""\
- def undocumented(name, visibility=None):
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "undocumented"
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- }
- attribute {
- name: "visibility"
- type: UNKNOWN
- mandatory: false
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_private_macros_skipped(self):
- src = textwrap.dedent("""\
- def _private(name, visibility=None):
- \"\"\"A private macro that should not appear in docs.
-
- Args:
- name: A unique name for this rule.
- visibility: The visibility of this rule.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
-
- def public(name, visibility=None):
- \"\"\"A public macro that should appear in docs.
-
- Args:
- name: A unique name for this rule.
- visibility: The visibility of this rule.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "public"
- documentation: "A public macro that should appear in docs."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "visibility"
- type: UNKNOWN
- mandatory: false
- documentation: "The visibility of this rule."
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_rule_macro_mix(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- example_rule = rule(
- implementation = _impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- )
- \"\"\"An example rule.
-
- Args:
- name: A unique name for this rule.
- arg_label: A label argument.
- arg_string: A string argument.
- \"\"\"
-
- def example_macro(name, foo, visibility=None):
- \"\"\"An example macro.
-
- Args:
- name: A unique name for this rule.
- foo: A test argument.
- visibility: The visibility of this rule.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "example_macro"
- documentation: "An example macro."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "foo"
- type: UNKNOWN
- mandatory: true
- documentation: "A test argument."
- }
- attribute {
- name: "visibility"
- type: UNKNOWN
- mandatory: false
- documentation: "The visibility of this rule."
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_macro_with_example_doc(self):
- src = textwrap.dedent("""\
- def macro_with_example(name, foo, visibility=None):
- \"\"\"Macro with examples.
-
- Args:
- name: A unique name for this rule.
- foo: A test argument.
- visibility: The visibility of this rule.
-
- Example:
- Here is an example of how to use this rule.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "macro_with_example"
- documentation: "Macro with examples."
- example_documentation: "Here is an example of how to use this rule."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "foo"
- type: UNKNOWN
- mandatory: true
- documentation: "A test argument."
- }
- attribute {
- name: "visibility"
- type: UNKNOWN
- mandatory: false
- documentation: "The visibility of this rule."
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_macro_with_output_doc(self):
- src = textwrap.dedent("""\
- def macro_with_outputs(name, foo, visibility=None):
- \"\"\"Macro with output documentation.
-
- Outputs:
- %{name}.jar: A Java archive.
- %{name}_deploy.jar: A Java archive suitable for deployment.
-
- Only built if explicitly requested.
-
- Args:
- name: A unique name for this rule.
- foo: A test argument.
- visibility: The visibility of this rule.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "macro_with_outputs"
- documentation: "Macro with output documentation."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "foo"
- type: UNKNOWN
- mandatory: true
- documentation: "A test argument."
- }
- attribute {
- name: "visibility"
- type: UNKNOWN
- mandatory: false
- documentation: "The visibility of this rule."
- }
- output {
- template: "%{name}.jar"
- documentation: "A Java archive."
- }
- output {
- template: "%{name}_deploy.jar"
- documentation: "A Java archive suitable for deployment.\\n\\nOnly built if explicitly requested."
- }
- type: MACRO
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_file_doc_title_only(self):
- src = textwrap.dedent("""\
- \"\"\"Example rules\"\"\"
- """)
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
-
- extractor = macro_extractor.MacroDocExtractor()
- extractor.parse_bzl(tf.name)
- os.remove(tf.name)
- self.assertEqual('Example rules', extractor.title)
- self.assertEqual('', extractor.description)
-
- def test_file_doc_title_description(self):
- src = textwrap.dedent("""\
- \"\"\"Example rules
-
- This file contains example Bazel rules.
-
- Documentation continued here.
- \"\"\"
- """)
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
-
- extractor = macro_extractor.MacroDocExtractor()
- extractor.parse_bzl(tf.name)
- os.remove(tf.name)
- self.assertEqual('Example rules', extractor.title)
- self.assertEqual('This file contains example Bazel rules.'
- '\n\nDocumentation continued here.',
- extractor.description)
-
- def test_file_doc_title_multiline(self):
- src = textwrap.dedent("""\
- \"\"\"Example rules
- for Bazel
-
- This file contains example Bazel rules.
-
- Documentation continued here.
- \"\"\"
- """)
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
-
- extractor = macro_extractor.MacroDocExtractor()
- extractor.parse_bzl(tf.name)
- os.remove(tf.name)
- self.assertEqual('Example rules for Bazel', extractor.title)
- self.assertEqual('This file contains example Bazel rules.'
- '\n\nDocumentation continued here.',
- extractor.description)
-
- def test_loads_ignored(self):
- src = textwrap.dedent("""\
- load("//foo/bar:baz.bzl", "foo_library")
- load("//foo/bar:baz.bzl", "foo_test", orig_foo_binary = "foo_binary")
- """)
- expected = ''
- self.check_protos(src, expected)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/skydoc/main.py b/skydoc/main.py
deleted file mode 100755
index 408cd8e..0000000
--- a/skydoc/main.py
+++ /dev/null
@@ -1,334 +0,0 @@
-# Copyright 2016 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.
-
-"""Documentation generator for Skylark"""
-
-from __future__ import print_function
-# internal imports
-import jinja2
-import mistune
-import os
-import posixpath
-import re
-import shutil
-import sys
-import tempfile
-import zipfile
-
-from optparse import OptionParser
-
-from bazel_tools.tools.python.runfiles import runfiles as runfiles_lib
-from skydoc import common
-from skydoc import load_extractor
-from skydoc import macro_extractor
-from skydoc import rule
-from skydoc import rule_extractor
-
-DEFAULT_OUTPUT_DIR = '.'
-DEFAULT_OUTPUT_FILE = 'skydoc.zip'
-
-WORKSPACE_DIR = 'io_bazel_skydoc'
-TEMPLATE_PATH = 'skydoc/templates'
-CSS_PATH = 'skydoc/sass'
-
-CSS_FILE = 'main.css'
-
-def _create_jinja_environment(runfiles, site_root, link_ext):
- def _Load(path):
- loc = runfiles.Rlocation(posixpath.join(WORKSPACE_DIR, TEMPLATE_PATH, path))
- if loc:
- with open(loc, "rb") as f:
- return f.read().decode("utf-8")
- return None
-
- env = jinja2.Environment(
- loader=jinja2.FunctionLoader(_Load),
- keep_trailing_newline=True,
- line_statement_prefix='%')
- env.filters['markdown'] = lambda text: jinja2.Markup(mistune.markdown(text))
- env.filters['doc_link'] = (
- lambda fname: site_root + '/' + fname + '.' + link_ext)
- env.filters['link'] = lambda fname: site_root + '/' + fname
- return env
-
-
-# TODO(dzc): Remove this workaround once we switch to a self-contained Python
-# binary format such as PEX.
-def _runfile_path(runfiles, path):
- return runfiles.Rlocation(posixpath.join(WORKSPACE_DIR, path))
-
-def merge_languages(macro_language, rule_language):
- for rule in rule_language.rule:
- new_rule = macro_language.rule.add()
- new_rule.CopyFrom(rule)
- return macro_language
-
-class WriterOptions(object):
- def __init__(self, output_dir, output_file, output_zip, overview,
- overview_filename, link_ext, site_root):
- self.output_dir = output_dir
- self.output_file = output_file
- self.output_zip = output_zip
- self.overview = overview
- self.overview_filename = overview_filename
- self.link_ext = link_ext
-
- self.site_root = site_root
- if len(self.site_root) > 0 and self.site_root.endswith('/'):
- self.site_root = self.site_root[:-1]
-
-class MarkdownWriter(object):
- """Writer for generating documentation in Markdown."""
-
- def __init__(self, writer_options, runfiles):
- self.__options = writer_options
- self.__env = _create_jinja_environment(runfiles,
- self.__options.site_root,
- self.__options.link_ext)
-
- def write(self, rulesets):
- """Write the documentation for the rules contained in rulesets."""
- try:
- temp_dir = tempfile.mkdtemp()
- output_files = []
- for ruleset in rulesets:
- if not ruleset.empty():
- output_files.append(self._write_ruleset(temp_dir, ruleset))
- if self.__options.overview:
- output_files.append(self._write_overview(temp_dir, rulesets))
-
- if self.__options.output_zip:
- # We are generating a zip archive containing all the documentation.
- # Write each documentation file generated in the temp directory to the
- # zip file.
- with zipfile.ZipFile(self.__options.output_file, 'w') as zf:
- for output_file, output_path in output_files:
- zf.write(output_file, output_path)
- else:
- # We are generating documentation in the output_dir directory. Copy each
- # documentation file to output_dir.
- for output_file, output_path in output_files:
- dest_file = os.path.join(self.__options.output_dir, output_path)
- dest_dir = os.path.dirname(dest_file)
- if not os.path.exists(dest_dir):
- os.makedirs(dest_dir)
- shutil.copyfile(output_file, dest_file)
-
- finally:
- # Delete temporary directory.
- shutil.rmtree(temp_dir)
-
- def _write_ruleset(self, output_dir, ruleset):
- # Load template and render Markdown.
- template = self.__env.get_template('markdown.jinja')
- out = template.render(ruleset=ruleset)
-
- # Write output to file. Output files are created in a directory structure
- # that matches that of the input file.
- output_path = ruleset.output_file + '.md'
- output_file = "%s/%s" % (output_dir, output_path)
- file_dirname = os.path.dirname(output_file)
- if not os.path.exists(file_dirname):
- os.makedirs(file_dirname)
- with open(output_file, "w") as f:
- f.write(out)
- return (output_file, output_path)
-
- def _write_overview(self, output_dir, rulesets):
- template = self.__env.get_template('markdown_overview.jinja')
- out = template.render(rulesets=rulesets)
-
- output_file = "%s/%s.md" % (output_dir, self.__options.overview_filename)
- with open(output_file, "w") as f:
- f.write(out)
- return (output_file, "%s.md" % self.__options.overview_filename)
-
-class HtmlWriter(object):
- """Writer for generating documentation in HTML."""
-
- def __init__(self, options, runfiles):
- self.__runfiles = runfiles
- self.__options = options
- self.__env = _create_jinja_environment(runfiles,
- self.__options.site_root,
- self.__options.link_ext)
-
- def write(self, rulesets):
- # Generate navigation used for all rules.
- nav_template = self.__env.get_template('nav.jinja')
- nav = nav_template.render(
- rulesets=rulesets,
- overview=self.__options.overview,
- overview_filename=self.__options.overview_filename)
-
- try:
- temp_dir = tempfile.mkdtemp()
- output_files = []
- for ruleset in rulesets:
- if not ruleset.empty():
- output_files.append(self._write_ruleset(temp_dir, ruleset, nav))
- if self.__options.overview:
- output_files.append(self._write_overview(temp_dir, rulesets, nav))
-
- if self.__options.output_zip:
- with zipfile.ZipFile(self.__options.output_file, 'w') as zf:
- for output_file, output_path in output_files:
- zf.write(output_file, output_path)
- zf.write(_runfile_path(self.__runfiles,
- posixpath.join(CSS_PATH, CSS_FILE)),
- CSS_FILE)
- else:
- for output_file, output_path in output_files:
- dest_file = os.path.join(self.__options.output_dir, output_path)
- dest_dir = os.path.dirname(dest_file)
- if not os.path.exists(dest_dir):
- os.makedirs(dest_dir)
- shutil.copyfile(output_file, dest_file)
-
- # Copy CSS file.
- shutil.copyfile(_runfile_path(self.__runfiles,
- posixpath.join(CSS_PATH, CSS_FILE)),
- os.path.join(self.__options.output_dir, CSS_FILE))
- finally:
- # Delete temporary directory.
- shutil.rmtree(temp_dir)
-
- def _write_ruleset(self, output_dir, ruleset, nav):
- # Load template and render markdown.
- template = self.__env.get_template('html.jinja')
- out = template.render(title=ruleset.title, ruleset=ruleset, nav=nav)
-
- # Write output to file. Output files are created in a directory structure
- # that matches that of the input file.
- output_path = ruleset.output_file + '.html'
- output_file = "%s/%s" % (output_dir, output_path)
- file_dirname = os.path.dirname(output_file)
- if not os.path.exists(file_dirname):
- os.makedirs(file_dirname)
- with open(output_file, "w") as f:
- f.write(out)
- return (output_file, output_path)
-
- def _write_overview(self, output_dir, rulesets, nav):
- template = self.__env.get_template('html_overview.jinja')
- out = template.render(title='Overview', rulesets=rulesets, nav=nav)
-
- output_file = "%s/%s.html" % (output_dir, self.__options.overview_filename)
- with open(output_file, "w") as f:
- f.write(out)
- return (output_file, "%s.html" % self.__options.overview_filename)
-
-def main(argv):
- parser = OptionParser()
- parser.add_option('--output_dir', default='',
- help='The directory to write the output generated documentation to if --zip=false')
- parser.add_option('--output_file', default='',
- help='The output zip archive file to write if --zip=true.')
- parser.add_option('--format', default='markdown',
- help='The output format. Possible values are markdown and html')
- parser.add_option('--zip', action='store_true', default=True,
- help='Whether to generate a ZIP arhive containing the output files. If '
- '--zip is true, then skydoc will generate a zip file, skydoc.zip by '
- 'default or as specified by --output_file. If --zip is false, then '
- 'skydoc will generate documentation, either in Markdown or HTML as '
- 'specifed by --format, in the current directory or --output_dir if set.')
- parser.add_option('--strip_prefix', default='',
- help='The directory prefix to strip from all generated docs, which are '
- 'generated in subdirectories that match the package structure of the '
- 'input .bzl files. The prefix to strip must be common to all .bzl files; '
- 'otherwise, skydoc will raise an error.')
- parser.add_option('--overview', action='store_true',
- help='Whether to generate an overview page')
- parser.add_option('--overview_filename', default='index',
- help='The file name to use for the overview page.')
- parser.add_option('--link_ext', default='html',
- help='The file extension used for links in the generated documentation')
- parser.add_option('--site_root', default='',
- help='The site root to be prepended to all URLs in the generated documentation')
- (options, args) = parser.parse_args(argv)
-
- if options.output_dir and options.output_file:
- sys.stderr.write('Only one of --output_dir or --output_file can be set.')
- sys.exit(1)
-
- if not options.output_dir:
- options.output_dir = DEFAULT_OUTPUT_DIR
- if not options.output_file:
- options.output_file = DEFAULT_OUTPUT_FILE
-
- bzl_files = args[1:]
-
- try:
- strip_prefix = common.validate_strip_prefix(options.strip_prefix, bzl_files)
- except common.InputError as err:
- print(err.message)
- sys.exit(1)
-
- runfiles = runfiles_lib.Create()
- if not runfiles:
- # TODO(laszlocsomor): fix https://github.com/bazelbuild/bazel/issues/6212
- # and remove this if-block once Bazel is released with that bugfix.
- if (not os.environ.get("RUNFILES_DIR") and
- not os.environ.get("RUNFILES_MANIFEST_FILE")):
- argv0 = sys.argv[0]
- pos = argv0.rfind('%s%s%s' % (os.sep, WORKSPACE_DIR, os.sep))
- if pos > -1:
- dirpath = argv0[0:pos]
- if not os.path.isdir(dirpath):
- print("ERROR: Cannot access runfiles directory (%s)" % dirpath)
- sys.exit(1)
- runfiles = runfiles_lib.CreateDirectoryBased(dirpath)
-
- if not runfiles:
- print("ERROR: Cannot load runfiles")
- sys.exit(1)
-
- rulesets = []
- load_sym_extractor = load_extractor.LoadExtractor()
- for bzl_file in bzl_files:
- load_symbols = []
- try:
- load_symbols = load_sym_extractor.extract(bzl_file)
- except load_extractor.LoadExtractorError as e:
- print("ERROR: Error extracting loaded symbols from %s: %s" %
- (bzl_file, str(e)))
- sys.exit(2)
-
- # TODO(dzc): Make MacroDocExtractor and RuleDocExtractor stateless.
- macro_doc_extractor = macro_extractor.MacroDocExtractor()
- rule_doc_extractor = rule_extractor.RuleDocExtractor()
- macro_doc_extractor.parse_bzl(bzl_file)
- rule_doc_extractor.parse_bzl(bzl_file, load_symbols)
- merged_language = merge_languages(macro_doc_extractor.proto(),
- rule_doc_extractor.proto())
- rulesets.append(
- rule.RuleSet(bzl_file, merged_language, macro_doc_extractor.title,
- macro_doc_extractor.description, strip_prefix,
- options.format))
- writer_options = WriterOptions(
- options.output_dir, options.output_file, options.zip, options.overview,
- options.overview_filename, options.link_ext, options.site_root)
- if options.format == "markdown":
- markdown_writer = MarkdownWriter(writer_options, runfiles)
- markdown_writer.write(rulesets)
- elif options.format == "html":
- html_writer = HtmlWriter(writer_options, runfiles)
- html_writer.write(rulesets)
- else:
- sys.stderr.write(
- 'Invalid output format: %s. Possible values are markdown and html'
- % options.format)
-
-if __name__ == '__main__':
- main(sys.argv)
diff --git a/skydoc/rule.py b/skydoc/rule.py
deleted file mode 100644
index b4a1ecc..0000000
--- a/skydoc/rule.py
+++ /dev/null
@@ -1,173 +0,0 @@
-# Copyright 2016 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.
-
-"""Representations used for rendering documentation templates."""
-
-
-# internal imports
-import os
-from skydoc import build_pb2
-
-
-class Attribute(object):
- """Representation of an attribute used to render documentation templates."""
-
- NAME_LINK = (
- '<a href="https://bazel.build/docs/build-ref.html#name">Name</a>')
- LABEL_LINK = (
- '<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>')
- LABELS_LINK = (
- '<a href="https://bazel.build/docs/build-ref.html#labels">labels</a>')
-
- def __init__(self, proto):
- self.__proto = proto
- self.name = proto.name
- self.type = self._get_type_str(proto)
- if proto.name == 'name' and not proto.documentation:
- self.documentation = 'A unique name for this rule.'
- else:
- self.documentation = proto.documentation
-
- def _get_type_str(self, proto):
- type_str = ''
- if proto.type == build_pb2.Attribute.INTEGER:
- type_str = 'Integer'
- elif proto.type == build_pb2.Attribute.STRING:
- type_str = 'String'
- elif proto.type == build_pb2.Attribute.LABEL:
- type_str = self.LABEL_LINK
- elif proto.type == build_pb2.Attribute.OUTPUT:
- type_str = 'Output'
- elif proto.type == build_pb2.Attribute.STRING_LIST:
- type_str = 'List of strings'
- elif proto.type == build_pb2.Attribute.LABEL_LIST:
- type_str = 'List of %s' % self.LABELS_LINK
- elif proto.type == build_pb2.Attribute.OUTPUT_LIST:
- type_str = 'List of outputs'
- elif proto.type == build_pb2.Attribute.DISTRIBUTION_SET:
- type_str = 'Distribution Set'
- elif proto.type == build_pb2.Attribute.LICENSE:
- type_str = 'License'
- elif proto.type == build_pb2.Attribute.STRING_DICT:
- type_str = 'Dictionary mapping strings to string'
- elif proto.type == build_pb2.Attribute.FILESET_ENTRY_LIST:
- type_str = 'List of FilesetEntry'
- elif proto.type == build_pb2.Attribute.LABEL_LIST_DICT:
- type_str = 'Dictionary mapping strings to lists of %s' % self.LABELS_LINK
- elif proto.type == build_pb2.Attribute.STRING_LIST_DICT:
- type_str = 'Dictionary mapping strings to lists of strings'
- elif proto.type == build_pb2.Attribute.BOOLEAN:
- type_str = 'Boolean'
- elif proto.type == build_pb2.Attribute.TRISTATE:
- type_str = 'Tristate'
- elif proto.type == build_pb2.Attribute.INTEGER_LIST:
- type_str = 'List of integers'
- elif proto.type == build_pb2.Attribute.LABEL_DICT_UNARY:
- type_str = 'Label Dict Unary'
- elif proto.type == build_pb2.Attribute.SELECTOR_LIST:
- type_str = 'Selector List'
- elif proto.type == build_pb2.Attribute.LABEL_KEYED_STRING_DICT:
- type_str = 'Dictionary mapping %s to strings' % self.LABELS_LINK
- else:
- if proto.name == 'name':
- type_str = self.NAME_LINK
- else:
- type_str = 'Unknown'
-
- type_str += '; Required' if proto.mandatory else '; Optional'
- if proto.HasField('default') and not proto.mandatory:
- type_str += '; Default is ' + proto.default
- return type_str
-
-
-class Output(object):
- """Representation of an output used to render documentation templates."""
-
- def __init__(self, proto):
- self.__proto = proto
- self.template = proto.template
- self.documentation = proto.documentation
-
-class Rule(object):
- """Representation of a rule used to render documentation templates."""
-
- def __init__(self, proto):
- self.__proto = proto
- self.name = proto.name
- self.type = proto.type
- self.documentation = proto.documentation
- self.example_documentation = proto.example_documentation
- self.signature = self._get_signature(proto)
- self.attributes = []
- for attribute in proto.attribute:
- self.attributes.append(Attribute(attribute))
- self.outputs = []
- for output in proto.output:
- self.outputs.append(Output(output))
-
- parts = proto.documentation.split("\n\n")
- self.short_documentation = parts[0]
-
- def _get_signature(self, proto):
- """Returns the rule signature for this rule."""
- signature = proto.name + '('
- for i in range(len(proto.attribute)):
- attr = proto.attribute[i]
- signature += '<a href="#%s.%s">%s</a>' % (proto.name, attr.name,
- attr.name)
- if i < len(proto.attribute) - 1:
- signature += ', '
- signature += ')'
- return signature
-
-
-class RuleSet(object):
- """Representation of a rule set used to render documentation templates."""
-
- def __init__(self, bzl_file, language, title, description, strip_prefix,
- format):
- self.bzl_file = bzl_file
- file_basename = os.path.basename(bzl_file)
- self.name = file_basename.replace('.bzl', '')
- self.language = language
- self.title = title if title else "%s Rules" % self.name
- self.description = description
-
- # Generate output file name.
- file_extension = 'html' if format == 'html' else 'md'
- assert self.bzl_file.startswith(strip_prefix)
- output_path = self.bzl_file.replace('.bzl', '')
- self.output_file = output_path[len(strip_prefix):]
-
- # Populate all rules in this ruleset.
- self.definitions = []
- self.rules = []
- self.repository_rules = []
- self.macros = []
- for rule_proto in language.rule:
- definition = Rule(rule_proto)
- self.definitions.append(definition)
- if rule_proto.type == build_pb2.RuleDefinition.RULE:
- self.rules.append(definition)
- elif rule_proto.type == build_pb2.RuleDefinition.MACRO:
- self.macros.append(definition)
- else:
- assert rule_proto.type == build_pb2.RuleDefinition.REPOSITORY_RULE
- self.repository_rules.append(definition)
-
- def empty(self):
- """Return True if there is nothing to document."""
- return not any([self.rules,
- self.macros,
- self.repository_rules])
diff --git a/skydoc/rule_extractor.py b/skydoc/rule_extractor.py
deleted file mode 100644
index abb6134..0000000
--- a/skydoc/rule_extractor.py
+++ /dev/null
@@ -1,259 +0,0 @@
-# Copyright 2016 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.
-
-"""Extractor for Skylark rule documentation."""
-
-import ast
-import functools
-# internal imports
-
-from skydoc import build_pb2
-from skydoc import common
-from skydoc.stubs import attr
-from skydoc.stubs import skylark_globals
-
-
-SKYLARK_STUBS = {
- "attr": attr,
- "aspect": skylark_globals.aspect,
- "DATA_CFG": skylark_globals.DATA_CFG,
- "HOST_CFG": skylark_globals.HOST_CFG,
- "PACKAGE_NAME": skylark_globals.PACKAGE_NAME,
- "REPOSITORY_NAME": skylark_globals.REPOSITORY_NAME,
- "provider": skylark_globals.provider,
- "FileType": skylark_globals.FileType,
- "Label": skylark_globals.Label,
- "native": skylark_globals.native,
- "select": skylark_globals.select,
- "struct": skylark_globals.struct,
- "repository_rule": skylark_globals.repository_rule,
- "rule": skylark_globals.rule,
- "load": skylark_globals.load,
-}
-"""Stubs for Skylark globals to be used to evaluate the .bzl file."""
-
-
-SKYLARK_GLOBAL_SYMBOLS = set(SKYLARK_STUBS.keys())
-
-
-def create_stubs(skylark_stubs, load_symbols):
- """Combines Skylark stubs with loaded symbols.
-
- This function creates a copy of the global Skylark stubs and combines them
- with symbols from the list of load_extractor.LoadSymbol, which contain
- information about symbols extracted from other .bzl files. The stubs created
- for the loaded symbols are global variables set to the empty string.
-
- Args:
- skylark_stubs: Dict containing the Skylark global stubs.
- load_symbols: List of load_extractor.LoadSymbol objects containing
- information about symbols extracted from other .bzl files.
-
- Returns:
- Dictionary containing both the Skylark global stubs and stubs created for
- the loaded symbols.
- """
- stubs = dict(skylark_stubs)
- for load_symbol in load_symbols:
- if load_symbol.alias:
- stubs[load_symbol.alias] = ""
- else:
- stubs[load_symbol.symbol] = ""
- return stubs
-
-
-class RuleDocExtractor(object):
- """Extracts documentation for rules from a .bzl file."""
-
- def __init__(self):
- """Inits RuleDocExtractor with a new BuildLanguage proto"""
- self.__language = build_pb2.BuildLanguage()
- self.__extracted_rules = {}
- self.__load_symbols = []
-
- def _exec_code(self, compiled, global_stubs):
- """Executes compiled code with a copy of the global stubs.
-
- This has to be extracted into a separate function in order to be compatible
- with the exec statement in older Python versions, which otherwise throws a
- syntax error: "unqualified exec is not allowed in function".
-
- Returns:
- The modified environment after the execution is finished.
- """
- env = global_stubs.copy()
- exec(compiled, env)
- return env
-
- def _process_skylark(self, bzl_file, load_symbols):
- """Evaluates the Skylark code in the .bzl file.
-
- This function evaluates the Skylark code in the .bzl file as Python against
- Skylark stubs to extract the rules and attributes defined in the file. The
- extracted rules are kept in the __extracted_rules map keyed by rule name.
-
- Args:
- bzl_file: The .bzl file to evaluate.
- load_symbols: List of load_extractor.LoadSymbol objects containing info
- about symbols load()ed from other .bzl files.
- """
- with open(bzl_file) as f:
- compiled = compile(f.read(), bzl_file, 'exec')
- global_stubs = create_stubs(SKYLARK_STUBS, load_symbols)
- env = self._exec_code(compiled, global_stubs)
-
- new_globals = (
- defn for defn in env.items() if not defn[0] in global_stubs
- )
- for name, obj in new_globals:
- if (isinstance(obj, skylark_globals.RuleDescriptor) and
- not name.startswith('_')):
- obj.attrs['name'] = attr.AttrDescriptor(
- type=build_pb2.Attribute.UNKNOWN, mandatory=True, name='name')
- self.__extracted_rules[name] = obj
-
- def _add_rule_doc(self, name, doc):
- """Parses the attribute documentation from the docstring.
-
- Parses the attribute documentation in the given docstring and associates the
- rule and attribute documentation with the corresponding rule extracted from
- the .bzl file.
-
- Args:
- name: The name of the rule.
- doc: The docstring extracted for the rule.
- """
- extracted_docs = common.parse_docstring(doc)
- if name in self.__extracted_rules:
- rule = self.__extracted_rules[name]
- rule.doc = extracted_docs.doc
- rule.example_doc = extracted_docs.example_doc
- for attr_name, desc in extracted_docs.attr_docs.items():
- if attr_name in rule.attrs:
- rule.attrs[attr_name].doc = desc
-
- # Match the output name from the docstring with the corresponding output
- # template name extracted from rule() and store a mapping of output
- # template name to documentation.
- for output_name, desc in extracted_docs.output_docs.items():
- if output_name in rule.outputs:
- output_template = rule.outputs[output_name]
- rule.output_docs[output_template] = desc
-
- def _extract_docstrings(self, bzl_file):
- """Extracts the docstrings for all public rules in the .bzl file.
-
- This function parses the .bzl file and extracts the docstrings for all
- public rules in the file that were extracted in _process_skylark. It calls
- _add_rule_doc for to parse the attribute documentation in each docstring
- and associate them with the extracted rules and attributes.
-
- Args:
- bzl_file: The .bzl file to extract docstrings from.
- """
- try:
- tree = None
- with open(bzl_file) as f:
- tree = ast.parse(f.read(), bzl_file)
- key = None
- for node in ast.iter_child_nodes(tree):
- if isinstance(node, ast.Assign):
- name = node.targets[0].id
- if not name.startswith("_"):
- key = name
- continue
- elif isinstance(node, ast.Expr) and key:
- # Python itself does not treat strings defined immediately after a
- # global variable definition as a docstring. Only extract string and
- # parse as docstring if it is defined.
- if hasattr(node.value, 's'):
- self._add_rule_doc(key, node.value.s.strip())
- key = None
- except IOError:
- print("Failed to parse {0}: {1}".format(bzl_file, e.strerror))
- pass
-
- def _assemble_protos(self):
- """Builds the BuildLanguage protos for the extracted rule documentation.
-
- Iterates through the map of extracted rule documentation and builds a
- BuildLanguage proto containing the documentation for public rules extracted
- from the .bzl file.
- """
- rules = []
- for rule_name, rule_desc in self.__extracted_rules.items():
- rule_desc.name = rule_name
- rules.append(rule_desc)
- rules = sorted(rules, key=lambda rule_desc: rule_desc.name)
-
- for rule_desc in rules:
- rule = self.__language.rule.add()
- rule.name = rule_desc.name
- if rule_desc.type == 'rule':
- rule.type = build_pb2.RuleDefinition.RULE
- else:
- rule.type = build_pb2.RuleDefinition.REPOSITORY_RULE
- if rule_desc.doc:
- rule.documentation = rule_desc.doc
- if rule_desc.example_doc:
- rule.example_documentation = rule_desc.example_doc
-
- if hasattr(functools, 'cmp_to_key'):
- # Python 2.7 and 3.x
- attrs = sorted(rule_desc.attrs.values(), key=functools.cmp_to_key(attr.attr_compare))
- else:
- # Python <2.7
- attrs = sorted(rule_desc.attrs.values(), cmp=attr.attr_compare)
-
- for attr_desc in attrs:
- if attr_desc.name.startswith("_"):
- continue
- attr_proto = rule.attribute.add()
- attr_proto.name = attr_desc.name
- if attr_desc.doc:
- attr_proto.documentation = attr_desc.doc
- attr_proto.type = attr_desc.type
- attr_proto.mandatory = attr_desc.mandatory
- if attr_desc.default != None:
- attr_proto.default = attr_desc.default
-
- for template, doc in rule_desc.output_docs.items():
- output = rule.output.add()
- output.template = template
- output.documentation = doc
-
- for load_symbol in self.__load_symbols:
- load = self.__language.load.add()
- load.label = load_symbol.label
- load.symbol = load_symbol.symbol
- load.alias = load_symbol.alias
-
- def parse_bzl(self, bzl_file, load_symbols):
- """Extracts the documentation for all public rules from the given .bzl file.
-
- The Skylark code is first evaluated against stubs to extract rule and
- attributes with complete type information. Then, the .bzl file is parsed
- to extract the docstrings for each of the rules. Finally, the BuildLanguage
- proto is assembled with the extracted rule documentation.
-
- Args:
- bzl_file: The .bzl file to extract rule documentation from.
- """
- self._process_skylark(bzl_file, load_symbols)
- self._extract_docstrings(bzl_file)
- self._assemble_protos()
-
- def proto(self):
- """Returns the proto containing the macro documentation."""
- return self.__language
diff --git a/skydoc/rule_extractor_test.py b/skydoc/rule_extractor_test.py
deleted file mode 100644
index 230ee4e..0000000
--- a/skydoc/rule_extractor_test.py
+++ /dev/null
@@ -1,686 +0,0 @@
-# Copyright 2016 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.
-
-
-import os
-import tempfile
-import textwrap
-import unittest
-# internal imports
-
-from google.protobuf import text_format
-from skydoc import build_pb2
-from skydoc import load_extractor
-from skydoc import rule_extractor
-
-
-class RuleExtractorTest(unittest.TestCase):
-
- def test_create_stubs(self):
- stubs = {
- 'foo': 'bar',
- 'bar': 'baz',
- }
- load_symbols = [
- load_extractor.LoadSymbol('//foo:bar.bzl', 'bar_library', None),
- load_extractor.LoadSymbol('//foo:bar.bzl', 'foo_bar_binary',
- 'bar_binary'),
- ]
- expected = {
- 'foo': 'bar',
- 'bar': 'baz',
- 'bar_library': '',
- 'bar_binary': '',
- }
- self.assertEqual(expected, rule_extractor.create_stubs(stubs, load_symbols))
-
-
- def check_protos(self, src, expected, load_symbols=[]):
- tf = tempfile.NamedTemporaryFile(mode='w+', delete=False)
- tf.write(src)
- tf.flush()
- tf.close()
-
- expected_proto = build_pb2.BuildLanguage()
- text_format.Merge(expected, expected_proto)
-
- extractor = rule_extractor.RuleDocExtractor()
- extractor.parse_bzl(tf.name, load_symbols)
- os.remove(tf.name)
- proto = extractor.proto()
- self.assertEqual(expected_proto, proto)
-
- def test_all_types(self):
- src = textwrap.dedent("""\
- def impl(ctx):
- return struct()
-
- all_types = rule(
- implementation = impl,
- attrs = {
- "arg_bool": attr.bool(default=True),
- "arg_int": attr.int(default=10),
- "arg_int_list": attr.int_list(default=[1, 2]),
- "arg_label": attr.label(
- default=Label("//foo:bar",
- relative_to_caller_repository=True)),
- "arg_label_list": attr.label_list(
- default=[Label("//foo:bar"), Label("//bar:baz")]),
- "arg_license": attr.license(),
- "arg_output": attr.output(default=Label("//foo:bar")),
- "arg_output_list": attr.output_list(
- default=[Label("//foo:bar"), Label("//bar:baz")]),
- "arg_string": attr.string(default="foo"),
- "arg_string_dict": attr.string_dict(default={"foo": "bar"}),
- "arg_string_list": attr.string_list(default=["foo", "bar"]),
- "arg_string_list_dict": attr.string_list_dict(
- default={"foo": ["bar", "baz"]}),
- },
- )
- \"\"\"Test rule with all types.
-
- Args:
- name: A unique name for this rule.
- arg_bool: A boolean argument.
- arg_int: An integer argument.
- arg_int_list: A list of integers argument.
- arg_label: A label argument.
- arg_label_list: A list of labels argument.
- arg_license: A license argument.
- arg_output: An output argument.
- arg_output_list: A list of outputs argument.
- arg_string: A string argument.
- arg_string_dict: A dictionary mapping string to string argument.
- arg_string_list: A list of strings argument.
- arg_string_list_dict: A dictionary mapping string to list of string argument.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""
- rule {
- name: "all_types"
- documentation: "Test rule with all types."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "arg_bool"
- type: BOOLEAN
- mandatory: false
- documentation: "A boolean argument."
- default: "True"
- }
- attribute {
- name: "arg_int"
- type: INTEGER
- mandatory: false
- documentation: "An integer argument."
- default: "10"
- }
- attribute {
- name: "arg_int_list"
- type: INTEGER_LIST
- mandatory: false
- documentation: "A list of integers argument."
- default: "[1, 2]"
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- documentation: "A label argument."
- default: "//foo:bar"
- }
- attribute {
- name: "arg_label_list"
- type: LABEL_LIST
- mandatory: false
- documentation: "A list of labels argument."
- default: "[\'//foo:bar\', \'//bar:baz\']"
- }
- attribute {
- name: "arg_license"
- type: LICENSE
- mandatory: false
- documentation: "A license argument."
- }
- attribute {
- name: "arg_output"
- type: OUTPUT
- mandatory: false
- documentation: "An output argument."
- default: "//foo:bar"
- }
- attribute {
- name: "arg_output_list"
- type: OUTPUT_LIST
- mandatory: false
- documentation: "A list of outputs argument."
- default: "[\'//foo:bar\', \'//bar:baz\']"
- }
- attribute {
- name: "arg_string"
- type: STRING
- mandatory: false
- documentation: "A string argument."
- default: "\'foo\'"
- }
- attribute {
- name: "arg_string_dict"
- type: STRING_DICT
- mandatory: false
- documentation: "A dictionary mapping string to string argument."
- default: "{\'foo\': \'bar\'}"
- }
- attribute {
- name: "arg_string_list"
- type: STRING_LIST
- mandatory: false
- documentation: "A list of strings argument."
- default: "[\'foo\', \'bar\']"
- }
- attribute {
- name: "arg_string_list_dict"
- type: STRING_LIST_DICT
- mandatory: false
- documentation: "A dictionary mapping string to list of string argument."
- default: "{\'foo\': [\'bar\', \'baz\']}"
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_undocumented(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- undocumented = rule(
- implementation = _impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "undocumented"
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- }
- attribute {
- name: "arg_string"
- type: STRING
- mandatory: false
- default: "''"
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_private_rules_skipped(self):
- src = textwrap.dedent("""\
- def _private_impl(ctx):
- return struct()
-
- def _public_impl(ctx):
- return struct()
-
- _private = rule(
- implementation = _private_impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- )
- \"\"\"A private rule that should not appear in documentation.
-
- Args:
- name: A unique name for this rule.
- arg_label: A label argument.
- arg_string: A string argument.
- \"\"\"
-
- public = rule(
- implementation = _public_impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- )
- \"\"\"A public rule that should appear in documentation.
-
- Args:
- name: A unique name for this rule.
- arg_label: A label argument.
- arg_string: A string argument.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""
- rule {
- name: "public"
- documentation: "A public rule that should appear in documentation."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- documentation: "A label argument."
- }
- attribute {
- name: "arg_string"
- type: STRING
- mandatory: false
- documentation: "A string argument."
- default: "''"
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_rule_with_generated_impl(self):
- src = textwrap.dedent("""\
- def real_impl(ctx):
- return struct()
-
- def macro():
- return real_impl
-
- impl = macro()
-
- thisrule = rule(
- implementation = impl,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "thisrule"
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_multi_line_description(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- multiline = rule(
- implementation = _impl,
- attrs = {
- "arg_bool": attr.bool(),
- "arg_label": attr.label(),
- },
- )
- \"\"\"A rule with multiline documentation.
-
- Some more documentation about this rule here.
-
- Args:
- name: A unique name for this rule.
- arg_bool: A boolean argument.
-
- Documentation for arg_bool continued here.
- arg_label: A label argument.
-
- Documentation for arg_label continued here.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "multiline"
- documentation: "A rule with multiline documentation.\\n\\nSome more documentation about this rule here."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "arg_bool"
- type: BOOLEAN
- mandatory: false
- documentation: "A boolean argument.\\n\\nDocumentation for arg_bool continued here."
- default: "False"
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- documentation: "A label argument.\\n\\nDocumentation for arg_label continued here."
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_rule_macro_mix(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- example_rule = rule(
- implementation = _impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- )
- \"\"\"An example rule.
-
- Args:
- name: A unique name for this rule.
- arg_label: A label argument.
- arg_string: A string argument.
- \"\"\"
-
- def example_macro(name, foo, visibility=None):
- \"\"\"An example macro.
-
- Args:
- name: A unique name for this rule.
- foo: A test argument.
- visibility: The visibility of this rule.
- \"\"\"
- native.genrule(
- name = name,
- out = ["foo"],
- cmd = "touch $@",
- visibility = visibility,
- )
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "example_rule"
- documentation: "An example rule."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- documentation: "A label argument."
- }
- attribute {
- name: "arg_string"
- type: STRING
- mandatory: false
- documentation: "A string argument."
- default: "''"
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_rule_with_example_doc(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- rule_with_example = rule(
- implementation = _impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- )
- \"\"\"Rule with example.
-
- Example:
- Here is an example of how to use this rule.
-
- Args:
- name: A unique name for this rule.
- arg_label: A label argument.
- arg_string: A string argument.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "rule_with_example"
- documentation: "Rule with example."
- example_documentation: "Here is an example of how to use this rule."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- documentation: "A label argument."
- }
- attribute {
- name: "arg_string"
- type: STRING
- mandatory: false
- documentation: "A string argument."
- default: "''"
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_rule_with_output_doc(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- rule_with_outputs = rule(
- implementation = _impl,
- attrs = {
- "arg_label": attr.label(),
- "arg_string": attr.string(),
- },
- outputs = {
- "jar": "%{name}.jar",
- "deploy_jar": "%{name}_deploy.jar",
- },
- )
- \"\"\"Rule with output documentation.
-
- Outputs:
- jar: A Java archive.
- deploy_jar: A Java archive suitable for deployment.
-
- Only built if explicitly requested.
-
- Args:
- name: A unique name for this rule.
- arg_label: A label argument.
- arg_string: A string argument.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "rule_with_outputs"
- documentation: "Rule with output documentation."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "arg_label"
- type: LABEL
- mandatory: false
- documentation: "A label argument."
- }
- attribute {
- name: "arg_string"
- type: STRING
- mandatory: false
- documentation: "A string argument."
- default: "''"
- }
- output {
- template: "%{name}.jar"
- documentation: "A Java archive."
- }
- output {
- template: "%{name}_deploy.jar"
- documentation: "A Java archive suitable for deployment.\\n\\nOnly built if explicitly requested."
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_loads(self):
- src = textwrap.dedent("""\
- load("//foo/bar:bar.bzl", "foo_library")
- load("//foo/bar:baz.bzl", "foo_test", orig_foo_binary = "foo_binary")
-
- _references_foo_library = foo_library
- _references_orig_foo_binary = orig_foo_binary
- """)
- load_symbols = [
- load_extractor.LoadSymbol('//foo/bar:bar.bzl', 'foo_library', None),
- load_extractor.LoadSymbol('//foo/bar:baz.bzl', 'foo_test', None),
- load_extractor.LoadSymbol('//foo/bar:baz.bzl', 'foo_binary',
- 'orig_foo_binary'),
- ]
- expected = ""
- self.check_protos(src, expected, load_symbols)
-
- def test_repository_rule(self):
- src = textwrap.dedent("""\
- def _impl(repository_ctx):
- return struct()
-
- repo_rule = repository_rule(
- implementation = _impl,
- local = True,
- attrs = {
- "path": attr.string(mandatory=True)
- },
- )
- \"\"\"A repository rule.
-
- Args:
- name: A unique name for this rule.
- path: The path of the external dependency.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "repo_rule"
- documentation: "A repository rule."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- documentation: "A unique name for this rule."
- }
- attribute {
- name: "path"
- type: STRING
- mandatory: true
- documentation: "The path of the external dependency."
- default: "\'\'"
- }
- type: REPOSITORY_RULE
- }
- """)
-
- self.check_protos(src, expected)
-
- def test_doc_arg(self):
- src = textwrap.dedent("""\
- def _impl(ctx):
- return struct()
-
- rule_with_doc = rule(
- implementation = _impl,
- attrs = {
- "foo": attr.string(doc = "Attribute documentation.")
- },
- )
- \"\"\"A rule.
- \"\"\"
- """)
-
- expected = textwrap.dedent("""\
- rule {
- name: "rule_with_doc"
- documentation: "A rule."
- attribute {
- name: "name"
- type: UNKNOWN
- mandatory: true
- }
- attribute {
- name: "foo"
- type: STRING
- mandatory: false
- documentation: "Attribute documentation."
- default: "\'\'"
- }
- type: RULE
- }
- """)
-
- self.check_protos(src, expected)
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/skydoc/sass/BUILD b/skydoc/sass/BUILD
deleted file mode 100644
index fa0cbed..0000000
--- a/skydoc/sass/BUILD
+++ /dev/null
@@ -1,10 +0,0 @@
-licenses(["notice"]) # Apache 2.0
-
-package(default_visibility = ["//skydoc:__pkg__"])
-
-load("@io_bazel_rules_sass//sass:sass.bzl", "sass_binary")
-
-sass_binary(
- name = "main",
- src = "main.scss",
-)
diff --git a/skydoc/sass/main.scss b/skydoc/sass/main.scss
deleted file mode 100644
index 5b3ecf2..0000000
--- a/skydoc/sass/main.scss
+++ /dev/null
@@ -1,258 +0,0 @@
-// Copyright 2016 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.
-
-$primary-color: #4caf50;
-
-body {
- background-color: #fafafa;
-}
-
-pre,
-code {
- font-family: 'Liberation Mono', Consolas, Monaco, 'Andale Mono', monospace;
-}
-
-pre {
- background-color: #eee;
- padding: 20px;
- overflow-x: auto;
- word-wrap: normal;
-
- code {
- overflow-wrap: normal;
- white-space: pre;
- }
-}
-
-code {
- display: inline-block;
- font-size: 90%;
- white-space: pre-wrap;
-}
-
-.mdl-layout__drawer {
- background-color: #fff;
-
- .mdl-layout-title {
- border-bottom: 1px solid #e0e0e0;
- padding-left: 24px;
- }
-}
-
-.drawer-nav {
- ul {
- list-style: none;
- padding-left: 0;
-
- li {
- display: block;
- padding: 0;
-
- ul {
- li {
- a {
- padding-left: 44px;
- font-weight: 400;
- }
- }
- }
-
- a {
- display: block;
- flex-shrink: 0;
- padding: 15px 0 15px 22px;
- margin: 0;
- font-weight: 600;
- color: #757575;
- line-height: 1em;
- text-decoration: none;
- cursor: pointer;
-
- &:active,
- &:hover {
- background-color: #f0f0f0;
- }
- }
-
- &.active {
- a {
- color: $primary-color;
- font-weight: 500;
- }
- }
- }
- }
-}
-
-h1.page-title {
- font-size: 34px;
- font-weight: 400;
- line-height: 40px;
- margin-bottom: 30px;
- color: $primary-color;
-}
-
-p.lead {
- font-size: 20px;
- line-height: 32px;
-}
-
-table {
- border-collapse: collapse;
- border-spacing: 0;
- background-color: #fff;
- table-layout: auto;
-
- thead {
- th {
- background-color: #fafafa;
- border: 1px solid #eee;
- color: #757575;
- padding: 12px 12px 12px 24px;
- vertical-align: top;
- }
- }
-
- tbody {
- td {
- border: 1px solid #eee;
- padding: 12px 12px 12px 24px;
- vertical-align: top;
- }
- }
-}
-
-table.params-table {
- width: 100%;
-
- col.col-param {
- width: 25%;
- }
-
- col.col-description {
- width: 75%;
- }
-}
-
-table.overview-table {
- width: 100%;
-
- col.col-name {
- width: 25%;
- }
-
- col.col-description {
- width: 75%;
- }
-
- td {
- p {
- margin: 0;
- }
- }
-}
-
-hr {
- margin-top: 40px;
- margin-bottom: 40px;
-}
-
-nav.toc {
- border-left: 5px solid $primary-color;
- padding-left: 20px;
- margin-bottom: 48px;
-
- h1,
- h2 {
- font-size: 15px;
- line-height: 16px;
- padding-bottom: 12px;
- margin-bottom: 0;
- font-weight: 400;
- color: #757575;
- }
-
- ul {
- list-style: none;
- margin-top: 0;
- padding-left: 0;
-
- li {
- font-size: 20px;
- line-height: 40px;
-
- a {
- color: $primary-color;
- }
- }
- }
-}
-
-.page-content {
- margin-left: auto;
- margin-right: auto;
- padding-top: 60px;
- padding-bottom: 60px;
- width: 760px;
-
- a {
- text-decoration: none;
- }
-
- h1 {
- font-size: 34px;
- font-weight: 400;
- line-height: 40px;
- margin-bottom: 30px;
- color: $primary-color;
- }
-
- h2 {
- font-size: 24px;
- font-weight: 400;
- line-height: 32px;
- margin-bottom: 30px;
- color: $primary-color;
- }
-
- h3 {
- font-size: 20px;
- font-weight: 400;
- line-height: 32px;
- margin-bottom: 30px;
- color: $primary-color;
- }
-}
-
-@media (max-width: 768px) {
- .page-content {
- width: 360px;
- }
-}
-
-@media (min-width: 768px) {
- .page-content {
- width: 760px;
- }
-}
-
-@media (min-width: 1476px) {
- .page-content {
- width: 1160px;
- }
-}
-
-.mdl-mini-footer {
- padding-left: 40px;
-}
diff --git a/skydoc/stubs/BUILD b/skydoc/stubs/BUILD
deleted file mode 100644
index 485b149..0000000
--- a/skydoc/stubs/BUILD
+++ /dev/null
@@ -1,16 +0,0 @@
-licenses(["notice"]) # Apache 2.0
-
-package(default_visibility = ["//skydoc:__pkg__"])
-
-load("@rules_python//python:defs.bzl", "py_library")
-
-py_library(
- name = "stubs",
- srcs = [
- "attr.py",
- "skylark_globals.py",
- ],
- deps = [
- "//skydoc:build_pb_py",
- ],
-)
diff --git a/skydoc/stubs/attr.py b/skydoc/stubs/attr.py
deleted file mode 100644
index 8b8c10d..0000000
--- a/skydoc/stubs/attr.py
+++ /dev/null
@@ -1,187 +0,0 @@
-# Copyright 2016 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.
-
-# internal imports
-from skydoc import build_pb2
-
-
-def strcmp(s1, s2):
- if s1 > s2:
- return 1
- elif s1 < s2:
- return -1
- else:
- return 0
-
-
-def attr_compare(a, b):
- if a.compare_priority() > b.compare_priority():
- return 1
- elif a.compare_priority() < b.compare_priority():
- return -1
- else:
- return strcmp(a.name, b.name)
-
-
-class AttrDescriptor(object):
- ATTRIBUTE_ORDERING = {
- "name": -99,
- "deps": -98,
- "src": -97,
- "srcs": -86,
- "data": -95,
- "resource": -94,
- "resources": -93,
- "out": -92,
- "outs": -91,
- "hdrs": -90,
- }
-
- def __init__(self,
- type=build_pb2.Attribute.UNKNOWN,
- default=None,
- mandatory=False,
- doc="",
- name=""):
- """Constructor for AttrDescriptor
-
- Args:
- self: The current instance
- type: The type of attribute based on the enum in the Attribute proto.
- default: The default value of the attribute.
- mandatory: True if the attribute is required, false if optional.
- doc: Documentation for this attribute. This parameter is used internally
- by skydoc and is not set by any Skylark code in .bzl files.
- name: Name of this attribute. This parameter is used internally by skydoc
- and is not set by any Skylark code in .bzl files.
- """
- self.type = type
- self.default = default
- self.mandatory = mandatory
- self.doc = doc
- self.name = name
-
- def compare_priority(self):
- if self.name in AttrDescriptor.ATTRIBUTE_ORDERING:
- return AttrDescriptor.ATTRIBUTE_ORDERING[self.name]
- else:
- return 0
-
-
-def bool(default=False, mandatory=False, doc=""):
- return AttrDescriptor(
- build_pb2.Attribute.BOOLEAN, default=repr(default), mandatory=mandatory, doc=doc)
-
-
-def int(default=0, mandatory=False, values=[], doc=""):
- return AttrDescriptor(build_pb2.Attribute.INTEGER, repr(default), mandatory, doc=doc)
-
-
-def int_list(default=[], mandatory=False, non_empty=False, allow_empty=True, doc=""):
- return AttrDescriptor(build_pb2.Attribute.INTEGER_LIST, repr(default),
- mandatory, doc)
-
-
-def label(default=None,
- executable=False,
- allow_files=False,
- allow_single_file=False,
- mandatory=False,
- providers=[],
- allow_rules=None,
- single_file=False,
- cfg=None,
- aspects=[],
- doc=""):
- if default != None:
- default = repr(default)
- return AttrDescriptor(build_pb2.Attribute.LABEL, default, mandatory, doc)
-
-
-def label_list(default=[],
- allow_files=False,
- allow_rules=None,
- providers=[],
- flags=[],
- mandatory=False,
- non_empty=False,
- allow_empty=True,
- cfg=None,
- aspects=[],
- doc=""):
- default_val = []
- for label in default:
- default_val.append(repr(label))
- return AttrDescriptor(build_pb2.Attribute.LABEL_LIST, repr(default_val),
- mandatory, doc)
-
-
-def license(default=None, mandatory=False, doc=""):
- if default != None:
- default = repr(default)
- return AttrDescriptor(build_pb2.Attribute.LICENSE, default, mandatory, doc)
-
-
-def output(default=None, mandatory=False, doc=""):
- if default != None:
- default = repr(default)
- return AttrDescriptor(build_pb2.Attribute.OUTPUT, default, mandatory, doc)
-
-
-def output_list(default=[], mandatory=False, non_empty=False, allow_empty=True, doc=""):
- default_val = []
- for label in default:
- default_val.append(repr(label))
- return AttrDescriptor(build_pb2.Attribute.OUTPUT_LIST, repr(default_val),
- mandatory, doc)
-
-
-def string(default="", mandatory=False, values=[], doc=""):
- return AttrDescriptor(build_pb2.Attribute.STRING, repr(default), mandatory, doc)
-
-
-def string_dict(default={},
- mandatory=False,
- non_empty=False,
- allow_empty=True,
- doc=""):
- return AttrDescriptor(build_pb2.Attribute.STRING_DICT, repr(default),
- mandatory, doc)
-
-
-def string_list(default=[],
- mandatory=False,
- non_empty=False,
- allow_empty=True,
- doc=""):
- return AttrDescriptor(build_pb2.Attribute.STRING_LIST, repr(default),
- mandatory, doc)
-
-
-def string_list_dict(default={},
- mandatory=False,
- non_empty=False,
- allow_empty=True,
- doc=""):
- return AttrDescriptor(build_pb2.Attribute.STRING_LIST_DICT, repr(default),
- mandatory, doc)
-
-def label_keyed_string_dict(default={},
- mandatory=False,
- allow_files=False,
- non_empty=False,
- allow_empty=True,
- doc=""):
- return AttrDescriptor(build_pb2.Attribute.LABEL_KEYED_STRING_DICT, repr(default),
- mandatory, doc)
diff --git a/skydoc/stubs/skylark_globals.py b/skydoc/stubs/skylark_globals.py
deleted file mode 100644
index 021cd95..0000000
--- a/skydoc/stubs/skylark_globals.py
+++ /dev/null
@@ -1,109 +0,0 @@
-# Copyright 2016 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.
-
-"""Stubs for Skylark globals"""
-
-import collections
-
-
-def FileType(filetypes=[]):
- return filetypes
-
-HOST_CFG = 'HOST_CFG'
-DATA_CFG = 'DATA_CFG'
-PACKAGE_NAME = 'PACKAGE_NAME'
-REPOSITORY_NAME = 'REPOSITORY_NAME'
-
-native = ''
-
-def aspect(implementation, attr_aspects=[], attrs=None, fragments=[],
- host_fragments=[], toolchains=[]):
- return None
-
-def provider(doc='', fields=None):
- return None
-
-def select(x):
- return None
-
-def struct(**kwargs):
- return None
-
-def load(label, *args, **kwargs):
- return None
-
-class Label(object):
- def __init__(self, label_string, relative_to_caller_repository=False):
- self.label_string = label_string
- self.relative_to_caller_repository = relative_to_caller_repository
-
- def __repr__(self):
- return self.label_string
-
-class RuleDescriptor(object):
- def __init__(self, implementation, test=False, attrs={}, outputs={},
- executable=False, output_to_genfiles=False, fragments=[],
- host_fragments=[], local=False, doc='', type='rule', toolchains=[]):
- """Constructor for RuleDescriptor
-
- Args:
- self: The current instance.
- implementation: The implementation function for the rule (not used).
- test: Whether this is a test rule
- attrs: Dictionary mapping attribute name to attribute descriptor
- outputs: Outputs for this rule as a mapping from string to template name.
- The dictionary keys are used to refer to the output in the docstring
- documentation.
- executable: Whether this rule produces an executable.
- output_to_genfiles: Whether the rule generates files in the genfiles
- directory rather than the bin directory (not used).
- fragments: List of names of configuration fragments the rule requires in
- the target configuration (not used).
- host_fragments: List of names of configuration fragments that the rule
- requires in the host configuration (not used).
- local: Indicates that the rule fetches everything from the local system.
- (Only used if type='repository').
- doc: Documentation for this rule. This parameter is used internally by
- skydoc and is not set by any Skylark code in .bzl files.
- example_doc: Example documentation for this rule. This parameter is used
- internally by skydoc and is not set by any Skylark code in .bzl files.
- type: The type of rule (rule, repository_rule). This parameter is used
- by skydoc and is not set by any Skylark code in .bzl files.
- """
- self.implementation = implementation
- self.test = test
- self.attrs = attrs
- self.outputs = outputs
- self.executable = executable
- self.output_to_genfiles = output_to_genfiles
- self.fragments = fragments
- self.host_fragments = host_fragments
- self.local = local
- self.doc = doc
- self.example_doc = ''
- self.outputs = outputs
- self.output_docs = collections.OrderedDict() if hasattr(collections, 'OrderedDict') else {}
- self.type = type
- for name, attr in self.attrs.items():
- attr.name = name
-
-def rule(implementation, test=False, attrs={}, outputs=None,
- executable=False, output_to_genfiles=False, fragments=[],
- host_fragments=[], toolchains=[]):
- return RuleDescriptor(implementation, test, attrs, outputs, executable,
- output_to_genfiles, fragments, host_fragments, toolchains)
-
-def repository_rule(implementation, attrs={}, local=False, environ=[]):
- return RuleDescriptor(implementation, attrs=attrs, local=local,
- type='repository')
diff --git a/skydoc/templates/BUILD b/skydoc/templates/BUILD
deleted file mode 100644
index ade6211..0000000
--- a/skydoc/templates/BUILD
+++ /dev/null
@@ -1,20 +0,0 @@
-licenses(["notice"]) # Apache 2.0
-
-package(default_visibility = ["//skydoc:__pkg__"])
-
-filegroup(
- name = "templates",
- srcs = [
- "attributes.jinja",
- "html.jinja",
- "html_footer.jinja",
- "html_header.jinja",
- "html_overview.jinja",
- "markdown.jinja",
- "markdown_overview.jinja",
- "nav.jinja",
- "outputs.jinja",
- "overview.jinja",
- "toc.jinja",
- ],
-)
diff --git a/skydoc/templates/attributes.jinja b/skydoc/templates/attributes.jinja
deleted file mode 100644
index 6d58577..0000000
--- a/skydoc/templates/attributes.jinja
+++ /dev/null
@@ -1,32 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-<table class="params-table">
- <colgroup>
- <col class="col-param" />
- <col class="col-description" />
- </colgroup>
- <tbody>
-% for attribute in rule.attributes:
- <tr id="{{ rule.name }}.{{ attribute.name }}">
- <td><code>{{ attribute.name }}</code></td>
- <td>
- <p><code>{{ attribute.type }}</code></p>
- {{ attribute.documentation|markdown|trim }}
- </td>
- </tr>
-% endfor
- </tbody>
-</table>
diff --git a/skydoc/templates/html.jinja b/skydoc/templates/html.jinja
deleted file mode 100644
index 15d9fa9..0000000
--- a/skydoc/templates/html.jinja
+++ /dev/null
@@ -1,53 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-% include "html_header.jinja"
-
- <h1>{{ ruleset.title }}</h1>
-% include "toc.jinja"
-% if ruleset.description:
- <hr>
- <h2 id="overview">Overview</h2>
- {{ ruleset.description|markdown }}
-% endif
-% for rule in ruleset.definitions
- <hr>
-
- <h2 id="{{ rule.name }}">{{ rule.name }}</h2>
-
- <pre>{{ rule.signature }}</pre>
-
- {{ rule.documentation|markdown }}
-
-% if rule.outputs[0] is defined:
- <h3 id="{{ rule.name }}_outputs">
- Outputs
- </h3>
-% include "outputs.jinja"
-% endif
-
-% if rule.attributes[0] is defined:
- <h3 id="{{ rule.name }}_args">Attributes</h3>
-% include "attributes.jinja"
-% endif
-
-% if rule.example_documentation
- <h3 id="{{ rule.name }}_examples">Examples</h3>
- {{ rule.example_documentation|markdown }}
-% endif
-
-% endfor
-
-% include "html_footer.jinja"
diff --git a/skydoc/templates/html_footer.jinja b/skydoc/templates/html_footer.jinja
deleted file mode 100644
index 82987da..0000000
--- a/skydoc/templates/html_footer.jinja
+++ /dev/null
@@ -1,31 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-
- </div>
-
- <footer class="mdl-mini-footer">
- <div class="mdl-mini-footer__left-section">
- <div class="mdl-logo">Bazel</div>
- <ul class="mdl-mini-footer__link-list">
- <li><a href="https://bazel.build">Home</a></li>
- <li><a href="https://github.com/bazelbuild">GitHub</a></li>
- </ul>
- </div>
- </footer>
- </main>
- </div>
- </body>
-</html>
diff --git a/skydoc/templates/html_header.jinja b/skydoc/templates/html_header.jinja
deleted file mode 100644
index 135bdc6..0000000
--- a/skydoc/templates/html_header.jinja
+++ /dev/null
@@ -1,52 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-<!--
-Documentation generated by Skydoc
--->
-<!DOCTYPE html>
-<html>
- <head>
- <meta charset="utf-8">
- <meta name="viewport" content="width=device-width initial-scale=1" />
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
-
- <title>{{ title }}</title>
-
- <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,600,700" type="text/css">
- <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
- <link rel="stylesheet" href="https://code.getmdl.io/1.1.1/material.green-light_blue.min.css">
- <script defer src="https://code.getmdl.io/1.1.1/material.min.js"></script>
- <link rel="stylesheet" href="{{ 'main.css' | link }}">
- </head>
- <body>
- <div class="mdl-layout mdl-js-layout mdl-layout--fixed-drawer
- mdl-layout--fixed-header">
- <header class="mdl-layout__header">
- <div class="mdl-layout__header-row">
- <span class="mdl-layout-title">{{ title }}</span>
- </div>
- </header>
- <div class="mdl-layout__drawer">
- <span class="mdl-layout-title">Bazel</span>
- <nav class="drawer-nav">
- <ul class="drawer-nav">
- {{ nav }}
- </ul>
- </nav>
- </div>
-
- <main class="mdl-layout__content">
- <div class="page-content">
diff --git a/skydoc/templates/html_overview.jinja b/skydoc/templates/html_overview.jinja
deleted file mode 100644
index 7abdcfd..0000000
--- a/skydoc/templates/html_overview.jinja
+++ /dev/null
@@ -1,22 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-% include "html_header.jinja"
-
-<h1>Overview</h1>
-
-% include "overview.jinja"
-
-% include "html_footer.jinja"
diff --git a/skydoc/templates/markdown.jinja b/skydoc/templates/markdown.jinja
deleted file mode 100644
index 5545bc0..0000000
--- a/skydoc/templates/markdown.jinja
+++ /dev/null
@@ -1,67 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-<!---
-Documentation generated by Skydoc
--->
-<h1>{{ ruleset.title }}</h1>
-
-% include "toc.jinja"
-
-% if ruleset.description:
-<hr>
-
-<a name="overview"></a>
-## Overview
-
-{{ ruleset.description }}
-{# I want a blank line here #}
-% endif
-
-% for rule in ruleset.definitions:
-<a name="{{ rule.name }}"></a>
-## {{ rule.name }}
-
-<pre>
-{{ rule.signature }}
-</pre>
-
-{{ rule.documentation }}
-
-% if rule.outputs[0] is defined:
-{# I want a blank line here #}
-<a name="{{ rule.name }}_outputs"></a>
-### Outputs
-
-% include "outputs.jinja"
-% endif
-
-% if rule.attributes[0] is defined:
-{# I want a blank line here #}
-<a name="{{ rule.name }}_args"></a>
-### Attributes
-
-% include "attributes.jinja"
-% endif
-
-% if rule.example_documentation
-{# I want a blank line here #}
-<a name="{{ rule.name }}_examples"></a>
-### Examples
-
-{{ rule.example_documentation }}
-% endif
-
-% endfor
diff --git a/skydoc/templates/markdown_overview.jinja b/skydoc/templates/markdown_overview.jinja
deleted file mode 100644
index f810a7e..0000000
--- a/skydoc/templates/markdown_overview.jinja
+++ /dev/null
@@ -1,18 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-# Overview
-
-% include "overview.jinja"
diff --git a/skydoc/templates/nav.jinja b/skydoc/templates/nav.jinja
deleted file mode 100644
index 9fc5447..0000000
--- a/skydoc/templates/nav.jinja
+++ /dev/null
@@ -1,35 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-% if overview:
-<li><a href="{{ overview_filename | doc_link }}">Overview</a></li>
-% endif
-% for ruleset in rulesets:
-<li>
- <a href="{{ ruleset.output_file | doc_link }}">{{ ruleset.title }}</a>
- <ul>
-% if ruleset.description:
- <li><a href="{{ ruleset.output_file | doc_link }}#overview">Overview</a></li>
-% endif
-% for rule in ruleset.rules:
- <li>
- <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
- {{ rule.name }}
- </a>
- </li>
-% endfor
- </ul>
-</li>
-% endfor
diff --git a/skydoc/templates/outputs.jinja b/skydoc/templates/outputs.jinja
deleted file mode 100644
index 68a3c19..0000000
--- a/skydoc/templates/outputs.jinja
+++ /dev/null
@@ -1,31 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-<table class="params-table">
- <colgroup>
- <col class="col-param" />
- <col class="col-description" />
- </colgroup>
- <tbody>
-% for output in rule.outputs:
- <tr>
- <td><code>{{ output.template }}</code></td>
- <td>
- {{ output.documentation|markdown|trim }}
- </td>
- </tr>
-% endfor
- </tbody>
-</table>
diff --git a/skydoc/templates/overview.jinja b/skydoc/templates/overview.jinja
deleted file mode 100644
index 81a469e..0000000
--- a/skydoc/templates/overview.jinja
+++ /dev/null
@@ -1,100 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-<nav class="toc">
- <h2>Rule sets</h2>
- <ul>
-% for ruleset in rulesets:
- <li><a href="#{{ ruleset.name }}">{{ ruleset.title }}</a></li>
-% endfor
- </ul>
-</nav>
-
-% for ruleset in rulesets:
-<h2><a href="{{ ruleset.output_file | doc_link }}" id="{{ ruleset.name }}">{{ ruleset.title }}</a></h2>
-
-% if ruleset.rules[0] is defined:
-<h3>Rules</h3>
-<table class="overview-table">
- <colgroup>
- <col class="col-name" />
- <col class="col-description" />
- </colgroup>
- <tbody>
-% for rule in ruleset.rules:
- <tr>
- <td>
- <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
- <code>{{ rule.name }}</code>
- </a>
- </td>
- <td>
- {{ rule.short_documentation | markdown }}
- </td>
- </tr>
-% endfor
- </tbody>
-</table>
-% endif
-
-% if ruleset.macros[0] is defined:
-<h3>Macros</h3>
-<table class="overview-table">
- <colgroup>
- <col class="col-name" />
- <col class="col-description" />
- </colgroup>
- <tbody>
-% for rule in ruleset.macros:
- <tr>
- <td>
- <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
- <code>{{ rule.name }}</code>
- </a>
- </td>
- <td>
- {{ rule.short_documentation | markdown }}
- </td>
- </tr>
-% endfor
- </tbody>
-</table>
-% endif
-
-% if ruleset.repository_rules[0] is defined:
-<h3>Repository Rules</h3>
-<table class="overview-table">
- <colgroup>
- <col class="col-name" />
- <col class="col-description" />
- </colgroup>
- <tbody>
-% for rule in ruleset.repository_rules:
- <tr>
- <td>
- <a href="{{ ruleset.output_file | doc_link }}#{{ rule.name }}">
- <code>{{ rule.name }}</code>
- </a>
- </td>
- <td>
- {{ rule.short_documentation | markdown }}
- </td>
- </tr>
-% endfor
- </tbody>
-</table>
-% endif
-
-% endfor
diff --git a/skydoc/templates/toc.jinja b/skydoc/templates/toc.jinja
deleted file mode 100644
index f6642af..0000000
--- a/skydoc/templates/toc.jinja
+++ /dev/null
@@ -1,44 +0,0 @@
-{#
-Copyright 2016 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.
-#}
-<nav class="toc">
-% if ruleset.description:
- <h2><a href="#overview">Overview</a></h2>
-% endif
-% if ruleset.repository_rules[0] is defined:
- <h2>Repository Rules</h2>
- <ul>
-% for rule in ruleset.repository_rules:
- <li><a href="#{{ rule.name }}">{{ rule.name }}</a></li>
-% endfor
- </ul>
-% endif
-% if ruleset.rules[0] is defined:
- <h2>Rules</h2>
- <ul>
-% for rule in ruleset.rules:
- <li><a href="#{{ rule.name }}">{{ rule.name }}</a></li>
-% endfor
- </ul>
-% endif
-% if ruleset.macros[0] is defined:
- <h2>Macros</h2>
- <ul>
-% for macro in ruleset.macros:
- <li><a href="#{{ macro.name }}">{{ macro.name }}</a></li>
-% endfor
- </ul>
-% endif
-</nav>
diff --git a/skylark/BUILD b/skylark/BUILD
deleted file mode 100644
index 29e4dbf..0000000
--- a/skylark/BUILD
+++ /dev/null
@@ -1,22 +0,0 @@
-licenses(["notice"]) # Apache 2.0
-
-package(default_visibility = ["//visibility:public"])
-
-load("@bazel_skylib//:bzl_library.bzl", "bzl_library")
-load("//skylark:skylark.bzl", "skylark_doc")
-
-bzl_library(
- name = "skylark",
- srcs = ["skylark.bzl"],
- deps = [
- "@bazel_skylib//:bzl_library",
- ],
-)
-
-skylark_doc(
- name = "skylark-docs",
- srcs = ["skylark.bzl"],
- overview = False,
- strip_prefix = "skylark",
- deps = [":skylark"],
-)
diff --git a/skylark/skylark.bzl b/skylark/skylark.bzl
deleted file mode 100644
index fd7a697..0000000
--- a/skylark/skylark.bzl
+++ /dev/null
@@ -1,172 +0,0 @@
-# Copyright 2016 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.
-
-"""Skylark rules"""
-
-load("@bazel_skylib//:bzl_library.bzl", "StarlarkLibraryInfo")
-
-_SKYLARK_FILETYPE = [".bzl"]
-
-ZIP_PATH = "/usr/bin/zip"
-
-def _skydoc(ctx):
- for f in ctx.files.skydoc:
- if not f.path.endswith(".py"):
- return f
- fail("no valid .py file")
-
-def _skylark_doc_impl(ctx):
- """Implementation of the skylark_doc rule."""
- skylark_doc_zip = ctx.outputs.skylark_doc_zip
- direct = []
- transitive = []
- skydoc = _skydoc(ctx)
- for dep in ctx.attr.srcs:
- if StarlarkLibraryInfo in dep:
- direct.extend(dep[StarlarkLibraryInfo].srcs)
- transitive.append(dep[StarlarkLibraryInfo].transitive_srcs)
- else:
- direct.extend(dep.files.to_list())
- inputs = depset(order = "postorder", direct = direct, transitive = transitive + [
- dep[StarlarkLibraryInfo].transitive_srcs
- for dep in ctx.attr.deps
- ])
- sources = [source.path for source in direct]
- flags = [
- "--format=%s" % ctx.attr.format,
- "--output_file=%s" % ctx.outputs.skylark_doc_zip.path,
- ]
- if ctx.attr.strip_prefix:
- flags += ["--strip_prefix=%s" % ctx.attr.strip_prefix]
- if ctx.attr.overview:
- flags += ["--overview"]
- if ctx.attr.overview_filename:
- flags += ["--overview_filename=%s" % ctx.attr.overview_filename]
- if ctx.attr.link_ext:
- flags += ["--link_ext=%s" % ctx.attr.link_ext]
- if ctx.attr.site_root:
- flags += ["--site_root=%s" % ctx.attr.site_root]
- ctx.actions.run(
- inputs = inputs,
- tools = [skydoc],
- executable = skydoc,
- arguments = flags + sources,
- outputs = [skylark_doc_zip],
- mnemonic = "Skydoc",
- use_default_shell_env = True,
- progress_message = ("Generating Skylark doc for %s (%d files)" %
- (ctx.label.name, len(sources))),
- )
-
-skylark_doc = rule(
- _skylark_doc_impl,
- attrs = {
- "srcs": attr.label_list(
- providers = [StarlarkLibraryInfo],
- allow_files = _SKYLARK_FILETYPE,
- ),
- "deps": attr.label_list(
- providers = [StarlarkLibraryInfo],
- allow_files = False,
- ),
- "format": attr.string(default = "markdown"),
- "strip_prefix": attr.string(),
- "overview": attr.bool(default = True),
- "overview_filename": attr.string(),
- "link_ext": attr.string(),
- "site_root": attr.string(),
- "skydoc": attr.label(
- default = Label("//skydoc"),
- cfg = "host",
- executable = True,
- ),
- },
- outputs = {
- "skylark_doc_zip": "%{name}-skydoc.zip",
- },
-)
-# buildozer: disable=no-effect
-"""Generates Skylark rule documentation.
-
-Documentation is generated in directories that follows the package structure
-of the input `.bzl` files. For example, suppose the set of input files are
-as follows:
-
-* `foo/foo.bzl`
-* `foo/bar/bar.bzl`
-
-The archive generated by `skylark_doc` will contain the following generated
-docs:
-
-* `foo/foo.html`
-* `foo/bar/bar.html`
-
-Args:
- srcs: List of `.bzl` files that are processed to create this target.
- deps: List of other `skylark_library` targets that are required by the Skylark
- files listed in `srcs`.
- format: The type of output to generate. Possible values are `"markdown"` and
- `"html"`.
- strip_prefix: The directory prefix to strip from the generated output files.
-
- The directory prefix to strip must be common to all input files. Otherwise,
- skydoc will raise an error.
- overview: If set to `True`, then generate an overview page.
- overview_filename: The file name to use for the overview page. By default,
- the page is named `index.md` or `index.html` for Markdown and HTML output
- respectively.
- link_ext: The file extension used for links in the generated documentation.
- By default, skydoc uses `.html`.
- site_root: The site root to be prepended to all URLs in the generated
- documentation, such as links, style sheets, and images.
-
- This is useful if the generated documentation is served from a subdirectory
- on the web server. For example, if the skydoc site is to served from
- `https://host.com/rules`, then by setting
- `site_root = "https://host.com/rules"`, all links will be prefixed with
- the site root, for example, `https://host.com/rules/index.html`.
-
-Outputs:
- skylark_doc_zip: A zip file containing the generated documentation.
-
-Example:
- Suppose you have a project containing Skylark rules you want to document:
-
- ```
- [workspace]/
- WORKSPACE
- checkstyle/
- BUILD
- checkstyle.bzl
- ```
-
- To generate documentation for the rules and macros in `checkstyle.bzl`, add the
- following target to `rules/BUILD`:
-
- ```python
- load("@io_bazel_skydoc//skylark:skylark.bzl", "skylark_doc")
-
- skylark_doc(
- name = "checkstyle-docs",
- srcs = ["checkstyle.bzl"],
- )
- ```
-
- Running `bazel build //checkstyle:checkstyle-docs` will generate a zip file
- containing documentation for the public rules and macros in `checkstyle.bzl`.
-
- By default, Skydoc will generate documentation in Markdown. To generate
- a set of HTML pages that is ready to be served, set `format = "html"`.
-"""
-