From e153f7052ce6e8271097f4d86c295074fd10eab7 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Wed, 7 Aug 2019 15:52:23 -0400 Subject: [PATCH] docs/js: Split the documentation between the Python and JavaScript APIs --- azure-pipelines.yml | 1 + docs/.gitignore | 3 + docs/JavaScript/Alignment.rst | 5 + docs/JavaScript/BiString.rst | 5 + docs/JavaScript/BiStringBuilder.rst | 5 + docs/JavaScript/Tokenization.rst | 8 + docs/JavaScript/Tokenizer.rst | 11 ++ docs/JavaScript/index.rst | 10 + docs/{ => Python}/Alignment.rst | 0 docs/{ => Python}/BistrBuilder.rst | 0 docs/{ => Python}/Tokenization.rst | 0 docs/{ => Python}/Tokenizer.rst | 0 docs/{ => Python}/bistr.rst | 0 docs/Python/index.rst | 11 ++ docs/conf.py | 35 +++- docs/index.rst | 15 +- docs/package-lock.json | 285 ++++++++++++++++++++++++++++ docs/package.json | 5 + docs/requirements.txt | 3 + 19 files changed, 388 insertions(+), 14 deletions(-) create mode 100644 docs/JavaScript/Alignment.rst create mode 100644 docs/JavaScript/BiString.rst create mode 100644 docs/JavaScript/BiStringBuilder.rst create mode 100644 docs/JavaScript/Tokenization.rst create mode 100644 docs/JavaScript/Tokenizer.rst create mode 100644 docs/JavaScript/index.rst rename docs/{ => Python}/Alignment.rst (100%) rename docs/{ => Python}/BistrBuilder.rst (100%) rename docs/{ => Python}/Tokenization.rst (100%) rename docs/{ => Python}/Tokenizer.rst (100%) rename docs/{ => Python}/bistr.rst (100%) create mode 100644 docs/Python/index.rst create mode 100644 docs/package-lock.json create mode 100644 docs/package.json diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 4922799..8afbfd1 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,6 +22,7 @@ steps: pip install -r ./docs/requirements.txt pip install pytest-azurepipelines npm --prefix ./js install + npm --prefix ./docs install displayName: 'Install dependencies' - script: | diff --git a/docs/.gitignore b/docs/.gitignore index bb9517b..e567d7c 100644 --- a/docs/.gitignore +++ b/docs/.gitignore @@ -5,3 +5,6 @@ __pycache__/ # Sphinx documentation _build/ + +# Dependency directories +node_modules/ diff --git a/docs/JavaScript/Alignment.rst b/docs/JavaScript/Alignment.rst new file mode 100644 index 0000000..d02a66b --- /dev/null +++ b/docs/JavaScript/Alignment.rst @@ -0,0 +1,5 @@ +Alignment +========= + +.. js:autoclass:: Alignment + :members: diff --git a/docs/JavaScript/BiString.rst b/docs/JavaScript/BiString.rst new file mode 100644 index 0000000..1bef7cb --- /dev/null +++ b/docs/JavaScript/BiString.rst @@ -0,0 +1,5 @@ +BiString +======== + +.. js:autoclass:: BiString + :members: diff --git a/docs/JavaScript/BiStringBuilder.rst b/docs/JavaScript/BiStringBuilder.rst new file mode 100644 index 0000000..7587794 --- /dev/null +++ b/docs/JavaScript/BiStringBuilder.rst @@ -0,0 +1,5 @@ +BiStringBuilder +=============== + +.. js:autoclass:: BiStringBuilder + :members: diff --git a/docs/JavaScript/Tokenization.rst b/docs/JavaScript/Tokenization.rst new file mode 100644 index 0000000..f3bf50b --- /dev/null +++ b/docs/JavaScript/Tokenization.rst @@ -0,0 +1,8 @@ +Tokenization +============ + +.. js:autoclass:: Token + :members: + +.. js:autoclass:: Tokenization + :members: diff --git a/docs/JavaScript/Tokenizer.rst b/docs/JavaScript/Tokenizer.rst new file mode 100644 index 0000000..eca0d12 --- /dev/null +++ b/docs/JavaScript/Tokenizer.rst @@ -0,0 +1,11 @@ +Tokenizer +========= + +.. js:autoclass:: Tokenizer + :members: + +.. js:autoclass:: RegExpTokenizer + :members: + +.. js:autoclass:: SplittingTokenizer + :members: diff --git a/docs/JavaScript/index.rst b/docs/JavaScript/index.rst new file mode 100644 index 0000000..4ec807c --- /dev/null +++ b/docs/JavaScript/index.rst @@ -0,0 +1,10 @@ +JavaScript +========== + +.. toctree:: + + BiString + BiStringBuilder + Alignment + Tokenization + Tokenizer diff --git a/docs/Alignment.rst b/docs/Python/Alignment.rst similarity index 100% rename from docs/Alignment.rst rename to docs/Python/Alignment.rst diff --git a/docs/BistrBuilder.rst b/docs/Python/BistrBuilder.rst similarity index 100% rename from docs/BistrBuilder.rst rename to docs/Python/BistrBuilder.rst diff --git a/docs/Tokenization.rst b/docs/Python/Tokenization.rst similarity index 100% rename from docs/Tokenization.rst rename to docs/Python/Tokenization.rst diff --git a/docs/Tokenizer.rst b/docs/Python/Tokenizer.rst similarity index 100% rename from docs/Tokenizer.rst rename to docs/Python/Tokenizer.rst diff --git a/docs/bistr.rst b/docs/Python/bistr.rst similarity index 100% rename from docs/bistr.rst rename to docs/Python/bistr.rst diff --git a/docs/Python/index.rst b/docs/Python/index.rst new file mode 100644 index 0000000..7ee834c --- /dev/null +++ b/docs/Python/index.rst @@ -0,0 +1,11 @@ +Python +====== + +.. toctree:: + + bistr + BistrBuilder + Alignment + Tokenization + Tokenizer + diff --git a/docs/conf.py b/docs/conf.py index dd0663f..e3c2701 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -12,10 +12,9 @@ # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. -# -# import os -# import sys -# sys.path.insert(0, os.path.abspath('.')) + +import os +from pathlib import Path # -- Project information ----------------------------------------------------- @@ -38,6 +37,7 @@ 'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx_autodoc_typehints', + 'sphinx_js', ] # Add any paths that contain templates here, relative to this directory. @@ -46,12 +46,23 @@ # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This pattern also affects html_static_path and html_extra_path. -exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] +exclude_patterns = [ + 'node_modules', + '_build', + 'Thumbs.db', + '.DS_Store', +] + + +# -- Intersphinx configuration ----------------------------------------------- intersphinx_mapping = { 'python': ('https://docs.python.org/3', None), } + +# -- Autodoc configuration --------------------------------------------------- + autoclass_content = 'both' autodoc_default_options = { @@ -64,6 +75,20 @@ autodoc_inherit_docstrings = False +# -- sphinx-js configuration ------------------------------------------------- + +npm_bin = str((Path(__file__).parent/'node_modules/.bin').resolve()) +os.environ["PATH"] = npm_bin + ":" + os.environ["PATH"] + +js_language = 'typescript' + +js_source_path = '../js/src' + +jsdoc_config_path = '../js/tsconfig.json' + +root_for_relative_js_paths = '..' + + # -- Options for HTML output ------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for diff --git a/docs/index.rst b/docs/index.rst index e922396..7c62fd5 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -5,16 +5,13 @@ The bistring library provides non-destructive versions of common string processi Each bistring remembers the original string, and how its substrings map to substrings of the modified version. .. toctree:: - :maxdepth: 2 - :caption: Contents: + :maxdepth: 2 + :caption: Contents: - Introduction - FAQ - bistr - BistrBuilder - Alignment - Tokenization - Tokenizer + Introduction + FAQ + Python/index + JavaScript/index Indices and tables diff --git a/docs/package-lock.json b/docs/package-lock.json new file mode 100644 index 0000000..6bf6f96 --- /dev/null +++ b/docs/package-lock.json @@ -0,0 +1,285 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@types/minimatch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" + }, + "backbone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "requires": { + "underscore": ">=1.8.3" + } + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", + "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==" + }, + "handlebars": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.1.2.tgz", + "integrity": "sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw==", + "requires": { + "neo-async": "^2.6.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + } + }, + "highlight.js": { + "version": "9.15.9", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.9.tgz", + "integrity": "sha512-M0zZvfLr5p0keDMCAhNBp03XJbKBxUx5AfyfufMdFMEP4N/Xj6dh0IqC75ys7BAzceR34NgcvXjupRVaHBPPVQ==" + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "interpret": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", + "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==" + }, + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" + }, + "lunr": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.6.tgz", + "integrity": "sha512-swStvEyDqQ85MGpABCMBclZcLI/pBIlu8FFDtmX197+oEgKloJ67QnB+Tidh0340HmLMs39c4GrkPY3cmkXp6Q==" + }, + "marked": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.7.0.tgz", + "integrity": "sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=" + }, + "neo-async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz", + "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "requires": { + "resolve": "^1.1.6" + } + }, + "resolve": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "requires": { + "path-parse": "^1.0.6" + } + }, + "shelljs": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", + "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "typedoc": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.15.0.tgz", + "integrity": "sha512-NOtfq5Tis4EFt+J2ozhVq9RCeUnfEYMFKoU6nCXCXUULJz1UQynOM+yH3TkfZCPLzigbqB0tQYGVlktUWweKlw==", + "requires": { + "@types/minimatch": "3.0.3", + "fs-extra": "^8.1.0", + "handlebars": "^4.1.2", + "highlight.js": "^9.15.8", + "lodash": "^4.17.15", + "marked": "^0.7.0", + "minimatch": "^3.0.0", + "progress": "^2.0.3", + "shelljs": "^0.8.3", + "typedoc-default-themes": "^0.6.0", + "typescript": "3.5.x" + } + }, + "typedoc-default-themes": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/typedoc-default-themes/-/typedoc-default-themes-0.6.0.tgz", + "integrity": "sha512-MdTROOojxod78CEv22rIA69o7crMPLnVZPefuDLt/WepXqJwgiSu8Xxq+H36x0Jj3YGc7lOglI2vPJ2GhoOybw==", + "requires": { + "backbone": "^1.4.0", + "jquery": "^3.4.1", + "lunr": "^2.3.6", + "underscore": "^1.9.1" + } + }, + "typescript": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", + "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==" + }, + "uglify-js": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.6.0.tgz", + "integrity": "sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg==", + "optional": true, + "requires": { + "commander": "~2.20.0", + "source-map": "~0.6.1" + } + }, + "underscore": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.9.1.tgz", + "integrity": "sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + } + } +} diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 0000000..3cdade7 --- /dev/null +++ b/docs/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "typedoc": "^0.15.0" + } +} diff --git a/docs/requirements.txt b/docs/requirements.txt index 711ea85..5b5ccc8 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,3 +1,6 @@ sphinx >= 2.1 sphinx_autodoc_typehints sphinx_rtd_theme + +# Need the fix for https://github.com/mozilla/sphinx-js/issues/90 +git+https://github.com/mozilla/sphinx-js@b521042658037fa1990fb2757d638699ba264f88