From 2bcd48c4c224c7b921cc1bdf8bb6e98c54a52f31 Mon Sep 17 00:00:00 2001 From: Hood Chatham Date: Sat, 30 Sep 2023 16:41:02 -0700 Subject: [PATCH] Switch to using sphinx-js fork (#4193) --- .readthedocs.yml | 2 +- docs/project/release-notes/v0.17.0.md | 8 +- docs/requirements-doc.txt | 2 +- .../sphinx_pyodide/sphinx_pyodide/__init__.py | 38 +- docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py | 536 ++++-------------- .../sphinx_pyodide/mdn_xrefs.py | 12 + .../sphinx_pyodide/templates/attribute.rst | 21 - docs/sphinx_pyodide/tests/test_directives.py | 184 ++---- docs/sphinx_pyodide/tests/tsdoc_dump.json.gz | Bin 30023 -> 151653 bytes docs/usage/api/js-api.md | 2 +- docs/usage/type-conversions.md | 4 +- .../pyodide_build/cli/build_recipes.py | 10 +- pyodide-build/pyodide_build/cli/skeleton.py | 2 +- src/core/error_handling.ts | 2 +- src/core/pyproxy.ts | 68 ++- src/js/api.ts | 4 +- src/js/package-lock.json | 145 +++-- src/js/package.json | 4 +- src/js/tsdoc.json | 23 + src/py/_pyodide/_core_docs.py | 2 +- 20 files changed, 301 insertions(+), 768 deletions(-) delete mode 100644 docs/sphinx_pyodide/sphinx_pyodide/templates/attribute.rst create mode 100644 src/js/tsdoc.json diff --git a/.readthedocs.yml b/.readthedocs.yml index 04f9f5fa8..c10334185 100644 --- a/.readthedocs.yml +++ b/.readthedocs.yml @@ -18,4 +18,4 @@ build: os: ubuntu-20.04 tools: python: "3.11" - nodejs: "14" + nodejs: "20" diff --git a/docs/project/release-notes/v0.17.0.md b/docs/project/release-notes/v0.17.0.md index ea906262d..ac59edd06 100644 --- a/docs/project/release-notes/v0.17.0.md +++ b/docs/project/release-notes/v0.17.0.md @@ -21,7 +21,7 @@ issues and that future releases will have fewer breaking changes. We added full support for asyncio, including a new Python event loop that schedules tasks on the browser event loop, support for top level await in {any}`pyodide.runPythonAsync`, and implementations of `await` for {any}`JsProxy ` -and {js:class}`PyProxy`, so that it is possible to await a Python awaitable from +and `PyProxy`, so that it is possible to await a Python awaitable from JavaScript and a JavaScript thenable from Python. This allows seamless interoperability: @@ -99,7 +99,7 @@ We added several new conversion APIs to give more explicit control over the foreign function interface. In particular, the goal was to make it easier for users to avoid leaking memory. -For the basic use cases, we have {js:meth}`PyProxy.toJs` and `JsProxy.to_py` +For the basic use cases, we have `PyProxy.toJs` and `JsProxy.to_py` which respectively convert Python objects to JavaScript objects and JavaScript objects to Python objects. We also added also "wrong-way" conversion functions {any}`pyodide.to_js ` and {any}`pyodide.toPy` which are particularly helpful for @@ -110,7 +110,7 @@ The promise handler methods `JsProxy.then`, `JsProxy.catch`, and `JsProxy.finally_` were particularly hard to use without leaking memory so they have been updated with internal magic to automatically manage the memory. -For more advanced use cases where control over the life cycle of a {js:class}`PyProxy` is +For more advanced use cases where control over the life cycle of a `PyProxy` is needed, there are {any}`create_proxy` and {any}`create_once_callable`. (Added in PRs {pr}`1186`, {pr}`1244`, {pr}`1344`, {pr}`1436`) @@ -150,7 +150,7 @@ The buffer translation code in previous versions was less flexible, leaked memor and had serious bugs including use after free ({issue}`749`) and buffer overflow errors. We completely reworked these: buffers are now proxied like most other objects. -In simple use cases they can be converted with a copy using {js:meth}`PyProxy.toJs` +In simple use cases they can be converted with a copy using `PyProxy.toJs` and `JsProxy.to_py`. We added new APIs `PyProxy.getBuffer`, `JsProxy.assign`, and `JsProxy.assign_to` which give more fine-grained control, though they are not yet as ergonomic as they could be. diff --git a/docs/requirements-doc.txt b/docs/requirements-doc.txt index 85b0a6ff4..6dd39ae14 100644 --- a/docs/requirements-doc.txt +++ b/docs/requirements-doc.txt @@ -8,7 +8,6 @@ sphinx_book_theme>=0.4.0rc1 # A dependency of the above theme, which had some breaking changes in 0.13.2 pydata_sphinx_theme < 0.13.2 sphinx-issues -sphinx-js>=3.2.1 sphinx-click sphinx-autodoc-typehints>=1.21.7 sphinx-design>=0.3.0 @@ -19,3 +18,4 @@ pydantic micropip==0.2.2 jinja2>=3.0 ruamel.yaml +sphinx-js @ git+https://github.com/pyodide/sphinx-js-fork@3c02e364d3444c9c75ca68419d71237b61f3f5d8 diff --git a/docs/sphinx_pyodide/sphinx_pyodide/__init__.py b/docs/sphinx_pyodide/sphinx_pyodide/__init__.py index 8291e391a..a59316be3 100644 --- a/docs/sphinx_pyodide/sphinx_pyodide/__init__.py +++ b/docs/sphinx_pyodide/sphinx_pyodide/__init__.py @@ -2,6 +2,9 @@ from .jsdoc import ( PyodideAnalyzer, get_jsdoc_content_directive, get_jsdoc_summary_directive, + ts_post_convert, + ts_should_destructure_arg, + ts_xref_formatter, ) from .lexers import HtmlPyodideLexer, PyodideLexer from .mdn_xrefs import add_mdn_xrefs @@ -12,36 +15,6 @@ def wrap_analyzer(app): app._sphinxjs_analyzer = PyodideAnalyzer(app._sphinxjs_analyzer) -def patch_templates(): - """Patch in a different jinja2 loader so we can override templates with our - own versions. - """ - from pathlib import Path - - from jinja2 import ChoiceLoader, Environment, FileSystemLoader, PackageLoader - from sphinx_js.analyzer_utils import dotted_path - from sphinx_js.renderers import JsRenderer - - loader = ChoiceLoader( - [ - FileSystemLoader(Path(__file__).parent / "templates"), - PackageLoader("sphinx_js", "templates"), - ] - ) - env = Environment(loader=loader) - - def patched_rst_method(self, partial_path, obj, use_short_name=False): - """Return rendered RST about an entity with the given name and IR - object.""" - dotted_name = partial_path[-1] if use_short_name else dotted_path(partial_path) - - # Render to RST using Jinja: - template = env.get_template(self._template) - return template.render(**self._template_vars(dotted_name, obj)) - - JsRenderer.rst = patched_rst_method - - def fix_pyodide_ffi_path(): """ The `pyodide.ffi` stuff is defined in `_pyodide._core_docs`. We don't want @@ -80,7 +53,6 @@ def remove_property_prefix(): def setup(app): - patch_templates() fix_pyodide_ffi_path() remove_property_prefix() app.add_lexer("pyodide", PyodideLexer) @@ -91,3 +63,7 @@ def setup(app): app.add_directive("js-doc-content", get_jsdoc_content_directive(app)) app.add_directive("pyodide-package-list", get_packages_summary_directive(app)) app.connect("builder-inited", add_mdn_xrefs) + app.config.ts_post_convert = ts_post_convert + app.config.ts_should_destructure_arg = ts_should_destructure_arg + app.config.ts_type_xref_formatter = ts_xref_formatter + app.config.ts_type_bold = True diff --git a/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py b/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py index 604a7f08f..ef7641153 100644 --- a/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py +++ b/docs/sphinx_pyodide/sphinx_pyodide/jsdoc.py @@ -1,20 +1,17 @@ -import re from collections import OrderedDict from typing import Any -import docutils.parsers.rst.directives as directives from docutils import nodes from docutils.parsers.rst import Directive from docutils.parsers.rst import Parser as RstParser from docutils.statemachine import StringList from docutils.utils import new_document from sphinx import addnodes -from sphinx.domains.javascript import JavaScriptDomain, JSCallable from sphinx.ext.autosummary import autosummary_table, extract_summary from sphinx.util import rst from sphinx.util.docutils import switch_source_input -from sphinx_js.ir import Class, Function, Interface, Pathname -from sphinx_js.parsers import PathVisitor, path_and_formal_params +from sphinx_js import ir, typedoc +from sphinx_js.ir import Class, Function, Interface from sphinx_js.renderers import ( AutoAttributeRenderer, AutoClassRenderer, @@ -22,412 +19,118 @@ from sphinx_js.renderers import ( JsRenderer, ) from sphinx_js.typedoc import Analyzer as TsAnalyzer -from sphinx_js.typedoc import make_path_segments +from sphinx_js.typedoc import Base, Callable, Converter, ReflectionType -_orig_convert_node = TsAnalyzer._convert_node -_orig_constructor_and_members = TsAnalyzer._constructor_and_members -_orig_top_level_properties = TsAnalyzer._top_level_properties -_orig_convert_all_nodes = TsAnalyzer._convert_all_nodes - - -def _constructor_and_members(self, cls): - result = _orig_constructor_and_members(self, cls) - for tag in cls.get("comment", {}).get("tags", []): - if tag["tag"] == "hideconstructor": - return (None, result[1]) - return result - - -TsAnalyzer._constructor_and_members = _constructor_and_members - -commentdict = {} - -FFI_FIELDS: set[str] = set() - - -def _convert_all_nodes(self, root): - for node in root.get("children", []): - if node["name"] == "ffi": - FFI_FIELDS.update(x["name"] for x in node["children"]) - FFI_FIELDS.remove("ffi") - break - return _orig_convert_all_nodes(self, root) - - -TsAnalyzer._convert_all_nodes = _convert_all_nodes - - -def _top_level_properties(self, node): - if "comment" not in node: - sig = {} - if "getSignature" in node: - sig = node["getSignature"][0] - elif "signatures" in node: - sig = node["signatures"][0] - node["comment"] = sig.get("comment", {}) - path = str(Pathname(make_path_segments(node, self._base_dir))) - commentdict[path] = node.get("comment") or {} - result = _orig_top_level_properties(self, node) - return result - - -def get_tag(doclet, tag): - tags = commentdict[str(doclet.path)].get("tags", []) - for t in tags: - if t["tag"] == tag: - return True, t["text"] - return False, None +# Custom tags are a great way of conveniently passing information from the +# source code to this file. No custom tags will be seen by this code unless they +# are registered in src/js/tsdoc.json +# +# Modifier tags act like a flag, block tags have content. def has_tag(doclet, tag): - return get_tag(doclet, tag)[0] - - -TsAnalyzer._top_level_properties = _top_level_properties - -orig_JsRenderer_rst_ = JsRenderer.rst - - -def JsRenderer_rst(self, partial_path, obj, use_short_name=False): - match get_tag(obj, "deprecated"): - case (True, text): - # This is definitely not unreachable... - if not text.strip(): # type: ignore[unreachable] - obj.deprecated = True - else: - obj.deprecated = text - if has_tag(obj, "hidetype"): - obj.type = "" - return orig_JsRenderer_rst_(self, partial_path, obj, use_short_name) - - -for cls in [AutoAttributeRenderer, AutoFunctionRenderer, AutoClassRenderer]: - cls.rst = JsRenderer_rst - - -def destructure_param(param: dict[str, Any]) -> list[dict[str, Any]]: - """We want to document a destructured argument as if it were several - separate arguments. This finds complex inline object types in the arguments - list of a function and "destructures" them into separately documented arguments. - - E.g., a function - - /** - * @param options - */ - function f({x , y } : { - /** The x value */ - x : number, - /** The y value */ - y : string - }){ ... } - - should be documented like: - - options.x (number) The x value - options.y (number) The y value + """Detects whether the doclet comes from a node that has the given modifier + tag. """ - decl = param["type"]["declaration"] - result = [] - for child in decl["children"]: - child = dict(child) - if "type" not in child: - if "signatures" in child: - try: - child["comment"] = child["signatures"][0]["comment"] - except KeyError: - # TODO: handle no comment case - pass - child["type"] = { - "type": "reflection", - "declaration": dict(child), - } - else: - raise AssertionError("Didn't expect to get here...") - child["name"] = param["name"] + "." + child["name"] - result.append(child) - return result + return ("@" + tag) in doclet.modifier_tags -def fix_up_inline_object_signature(self: TsAnalyzer, node: dict[str, Any]) -> None: - """Calls get_destructured_children on inline object types""" - kind = node.get("kindString") - if kind not in ["Call signature", "Constructor signature"]: - return - params = node.get("parameters", []) - new_params = [] - for param in params: - if "@ignore" in param.get("comment", {}).get("shortText", ""): - if not param.get("flags", {}).get("isOptional"): - print("sphinx-pyodide warning: Hiding mandatory argument!") - continue - param_type = param["type"] - if ( - param_type["type"] != "reflection" - or "children" not in param_type["declaration"] - ): - new_params.append(param) - else: - new_params.extend(destructure_param(param)) - node["parameters"] = new_params +def member_properties(self): + return dict( + is_abstract=self.flags.isAbstract, + is_optional=self.flags.isOptional, + is_static=self.flags.isStatic, + is_private=self.flags.isPrivate or self.flags.isExternal, + ) -def _convert_node(self: TsAnalyzer, node: dict[str, Any]) -> Any: - """Monkey patch for TsAnalyzer._convert_node. - - Fixes two crashes and separates documentation for destructured object - arguments into a series of separate argument entries. - """ - kind = node.get("kindString") - # if a class has no documented constructor, don't crash - if kind in ["Function", "Constructor", "Method"] and not node.get("sources"): - return None, [] - # This fixes a crash, not really sure what it means. - node["extendedTypes"] = [t for t in node.get("extendedTypes", []) if "id" in t] - # See docstring for destructure_param - fix_up_inline_object_signature(self, node) - converted, more_todo = _orig_convert_node(self, node) - if not converted: - return converted, more_todo - converted.is_private = node.get("flags", {}).get("isPrivate", False) - if kind in ["Call signature", "Constructor signature"]: - tags = node.get("comment", {}).get("tags", []) - converted.examples = [tag["text"] for tag in tags if tag["tag"] == "example"] - return converted, more_todo +Base.member_properties = member_properties -TsAnalyzer._convert_node = _convert_node - -from os.path import relpath +def ts_should_destructure_arg(sig, param): + return param.name == "options" -def _containing_deppath(self, node): - """Return the path pointing to the module containing the given node. - The path is absolute or relative to `root_for_relative_js_paths`. - Raises ValueError if one isn't found. +def ts_post_convert(converter, node, doclet): + doclet.exported_from = None + doclet.name = doclet.name.replace("Symbol․Symbol․", "Symbol․") - """ - from pathlib import Path + if has_tag(doclet, "hidetype"): + doclet.type = "" + if isinstance(node, typedoc.Callable): + node.signatures[0].type = "" - filename = node["sources"][0]["fileName"].replace(".gen", "") - deppath = next(Path(self._base_dir).glob("**/" + filename), None) - if deppath: - return relpath(deppath, self._base_dir) - return "" + if isinstance(doclet, ir.Class) and has_tag(doclet, "hideconstructor"): + doclet.constructor = None + + if node.name == "setStdin": + fix_set_stdin(converter, node, doclet) + + if node.name == "mountNativeFS": + fix_native_fs(converter, node, doclet) -TsAnalyzer._containing_deppath = _containing_deppath +def fix_set_stdin(converter, node, doclet): + assert isinstance(node, Callable) + options = node.signatures[0].parameters[0] + assert isinstance(options.type, ReflectionType) + for param in options.type.declaration.children: + if param.name == "stdin": + break + target = converter.index[param.type.target] + for docparam in doclet.params: + if docparam.name == "stdin": + break + docparam.type = target.type.render_name(converter) -def _add_type_role(self, name): +def fix_native_fs(converter, node, doclet): + assert isinstance(node, Callable) + ty = node.signatures[0].type + target = converter.index[ty.typeArguments[0].target] + ty.typeArguments[0] = target.type + doclet.returns[0].type = ty.render_name(converter) + + +orig_convert_all_nodes = Converter.convert_all_nodes + + +def locate_ffi_fields(root): + for node in root.children: + if node.name == "js/ffi": + break + for child in node.children: + if child.name == "ffi": + break + fields = child.type.declaration.children + FFI_FIELDS.update(x.name for x in fields) + + +# locate the ffi fields +FFI_FIELDS: set[str] = set() + + +def convert_all_nodes(self, root): + locate_ffi_fields(root) + return orig_convert_all_nodes(self, root) + + +Converter.convert_all_nodes = convert_all_nodes + + +def ts_xref_formatter(self, xref): from sphinx_pyodide.mdn_xrefs import JSDATA + name = xref.name + if name == "PyodideInterface": + return ":ref:`PyodideInterface `" if name in JSDATA: - return f":js:data:`{name}`" - if name in FFI_FIELDS: - return f":js:class:`~pyodide.ffi.{name}`" - return f":js:class:`{name}`" - - -def object_literal_type_name(self, decl): - """This renders the names of object literal types. - - They have zero or more "children" and zero or one "indexSignatures". - For example: - - { - [key: string]: string, - name : string, - id : string - } - - has children "name" and "id" and an indexSignature "[key: string]: string" - """ - children = [] - if "indexSignature" in decl: - index_sig = decl["indexSignature"] - assert len(index_sig["parameters"]) == 1 - key = index_sig["parameters"][0] - keyname = key["name"] - keytype = self._type_name(key["type"]) - valuetype = self._type_name(index_sig["type"]) - children.append(rf"\ **[{keyname}:** {keytype}\ **]:** {valuetype}") - if "children" in decl: - for child in decl["children"]: - maybe_optional = "" - if child["flags"].get("isOptional"): - maybe_optional = "?" - if child["kindString"] == "Method": - child_type_name = self.function_type_name(child) - else: - child_type_name = self._type_name(child["type"]) - children.append( - r"\ **" + child["name"] + maybe_optional + ":** " + child_type_name - ) - - return r"\ **{**\ " + r"\ **,** ".join(children) + r"\ **}**\ " - - -def function_type_name(self, decl): - decl_sig = None - if "signatures" in decl: - decl_sig = decl["signatures"][0] - elif decl["kindString"] == "Call signature": - decl_sig = decl - assert decl_sig - params = [ - rf'\ **{ty["name"]}:** {self._type_name(ty["type"])}' - for ty in decl_sig.get("parameters", []) - ] - params_str = r"\ **,** ".join(params) - ret_str = self._type_name(decl_sig["type"]) - return rf"\ **(**\ {params_str}\ **) =>** {ret_str}" - - -def reflection_type_name(self, type): - """Fill in the type names for type_of_type == "reflection" - - This is left as a TODO in sphinx-js. - - There are a couple of options: if - - decl["kindString"] == "Type Literal" - - then this is a literal object type. At least we assume it's a literal object - type, maybe there are other ways for that to happen. - - Otherwise, we assume that it's a function type, which we want to format - like: - - (a : string, b : number) => string - """ - decl = type["declaration"] - if decl["kindString"] == "Type literal" and "signatures" not in decl: - return self.object_literal_type_name(decl) - return self.function_type_name(decl) - - -def _type_name_root(self, type): - type_of_type = type.get("type") - - if type_of_type == "reference" and type.get("id"): - node = self._index[type["id"]] - name = node["name"] - if node.get("flags", {}).get("isPrivate") and "type" in node: - return self._type_name(node["type"]) - return self._add_type_role(name) - if type_of_type == "unknown": - if re.match(r"-?\d*(\.\d+)?", type["name"]): # It's a number. - # TypeDoc apparently sticks numeric constants' values into - # the type name. String constants? Nope. Function ones? Nope. - return "number" - return self._add_type_role(type["name"]) - if type_of_type in ["intrinsic", "reference"]: - return self._add_type_role(type["name"]) - if type_of_type == "stringLiteral": - return '"' + type["value"] + '"' - if type_of_type == "array": - return self._type_name(type["elementType"]) + r"\ **[]**" - if type_of_type == "tuple" and type.get("elements"): - types = [self._type_name(t) for t in type["elements"]] - return r"\ **[**\ " + r"\ **,** ".join(types) + r"\ **]** " - if type_of_type == "union": - return r" **|** ".join(self._type_name(t) for t in type["types"]) - if type_of_type == "intersection": - return " **&** ".join(self._type_name(t) for t in type["types"]) - if type_of_type == "typeOperator": - return type["operator"] + " " + self._type_name(type["target"]) - # e.g. "keyof T" - if type_of_type == "typeParameter": - name = type["name"] - constraint = type.get("constraint") - if constraint is not None: - name += " extends " + self._type_name(constraint) - # e.g. K += extends + keyof T - return name - if type_of_type == "reflection": - return self.reflection_type_name(type) - if type_of_type == "named-tuple-member": - name = type["name"] - type = self._type_name(type["element"]) - return rf"\ **{name}:** {type}" - if type_of_type == "predicate": - return ( - f":js:data:`boolean` (typeguard for {self._type_name(type['targetType'])})" - ) - if type_of_type == "literal" and type["value"] is None: - return ":js:data:`null`" - if type_of_type == "query": - return f"``typeof {type['queryType']['name']}``" - return "" - - -def _type_name(self, type): - """Return a string description of a type. - - :arg type: A TypeDoc-emitted type node - - """ - name = self._type_name_root(type) - - type_args = type.get("typeArguments") - if type_args: - arg_names = ", ".join(self._type_name(arg) for arg in type_args) - name += rf"\ **<**\ {arg_names}\ **>** " - return name - - -for obj in [ - _add_type_role, - object_literal_type_name, - reflection_type_name, - _type_name_root, - _type_name, - function_type_name, -]: - setattr(TsAnalyzer, obj.__name__, obj) - - -def _param_type_formatter(param): - """Generate types for function parameters specified in field.""" - if not param.type: - return None - heads = ["type", param.name] - tail = param.type - return heads, tail - - -def _return_formatter(return_): - """Derive heads and tail from ``@returns`` blocks.""" - tail = ("%s -- " % return_.type) if return_.type else "" - tail += return_.description - return ["returns"], tail - - -import sphinx_js.renderers - -for obj in [_param_type_formatter, _return_formatter]: # type:ignore[assignment] - setattr(sphinx_js.renderers, obj.__name__, obj) - - -class JSFuncMaybeAsync(JSCallable): - option_spec = { - **JSCallable.option_spec, - "async": directives.flag, - } - - def get_display_prefix( - self, - ): - if "async" in self.options: - return [ - addnodes.desc_sig_keyword("async", "async"), - addnodes.desc_sig_space(), - ] - return [] - - -JavaScriptDomain.directives["function"] = JSFuncMaybeAsync + result = f":js:data:`{name}`" + elif name in FFI_FIELDS: + result = f":js:class:`~pyodide.ffi.{name}`" + else: + result = f":js:class:`{name}`" + return result def flatten_suffix_tree(tree): @@ -478,13 +181,6 @@ class PyodideAnalyzer: def __getattr__(self, key): return getattr(self.inner, key) - def longname_to_path(self, name): - """Convert the longname field produced by jsdoc to a path appropriate to use - with _sphinxjs_analyzer.get_object. Based on: - https://github.com/mozilla/sphinx-js/blob/3.1/sphinx_js/jsdoc.py#L181 - """ - return PathVisitor().visit(path_and_formal_params["path"].parse(name)) - def set_doclet_is_private(self, key, doclet): if getattr(doclet, "is_private", False): return @@ -493,6 +189,10 @@ class PyodideAnalyzer: key = [x for x in key if "/" not in x] filename = key[0] toplevelname = key[1] + if doclet.name == "PyodideAPI": + doclet.is_private = True + return + if key[-1].startswith("$"): doclet.is_private = True return @@ -536,14 +236,10 @@ class PyodideAnalyzer: if doclet.is_private: continue + key = [x for x in key if "/" not in x] filename = key[0] toplevelname = key[1] doclet.name = doclet.name.rpartition(".")[2] - if doclet.name.startswith("["): - # a symbol. - # \u2024 looks like a period but is not a period. - # This isn't ideal, but otherwise the coloring is weird. - doclet.name = "[Symbol\u2024" + doclet.name[1:] if filename == "pyodide.": items["globalThis"].append(doclet) @@ -594,21 +290,15 @@ class PyodideAnalyzer: for key, value in items.items(): for obj in sorted(value, key=attrgetter("name")): - _, kind = get_tag(obj, "dockind") + kind = obj.block_tags.get("dockind", [None])[0] if kind: - obj.kind = kind + obj.kind = kind[0].text elif isinstance(obj, Class): obj.kind = "class" elif isinstance(obj, Function): obj.kind = "function" else: obj.kind = "attribute" - - obj.async_ = False - if isinstance(obj, Function): - obj.async_ = obj.returns and obj.returns[0].type.startswith( - ":js:class:`Promise`" - ) self.js_docs[key][obj.kind].append(obj) @@ -635,19 +325,8 @@ def get_jsdoc_content_directive(app): cls = AutoAttributeRenderer renderer = cls(self, app, arguments=["dummy"], options={"members": ["*"]}) rst = renderer.rst([obj.name], obj, use_short_name=False) - if obj.async_: - rst = self.add_async_option_to_rst(rst) return rst - def add_async_option_to_rst(self, rst: str) -> str: - rst_lines = rst.split("\n") - try: - index = next(i for i, ln in enumerate(rst_lines) if ln.startswith("..")) - except StopIteration: - index = len(rst_lines) - 1 - rst_lines.insert(index + 1, " :async:") - return "\n".join(rst_lines) - def get_rst_for_group(self, objects): return [self.get_rst(obj) for obj in objects] @@ -739,10 +418,16 @@ def get_jsdoc_summary_directive(app): """ sig = self.get_sig(obj) display_name = obj.name - prefix = "**async** " if obj.async_ else "" - summary = self.extract_summary(obj.description) + prefix = "**async** " if getattr(obj, "is_async", False) else "" + qualifier = "any" + if obj.name == "ffi": + qualifier = "js:mod" + + summary = self.extract_summary( + JsRenderer.render_description(None, obj.description) + ) link_name = pkgname + "." + display_name - return (prefix, display_name, sig, summary, link_name) + return (prefix, qualifier, display_name, sig, summary, link_name) def get_summary_table(self, pkgname, group): """Get the data for a summary tget_summary_tableable. Return value @@ -791,9 +476,8 @@ def get_jsdoc_summary_directive(app): row.append(nodes.entry("", node)) body.append(row) - for prefix, name, sig, summary, real_name in items: + for prefix, qualifier, name, sig, summary, real_name in items: # The body of this loop is changed from copied code. - qualifier = "any" sig = rst.escape(sig) if sig: sig = f"**{sig}**" @@ -824,7 +508,7 @@ def get_jsdoc_summary_directive(app): name = name.removeprefix("~") _, obj, *_ = self.import_by_name(name, prefixes=prefixes) prefix = "**async** " if iscoroutinefunction(obj) else "" - new_items.append((prefix, *item)) + new_items.append((prefix, "any", *item)) return new_items Autosummary.get_items = get_items diff --git a/docs/sphinx_pyodide/sphinx_pyodide/mdn_xrefs.py b/docs/sphinx_pyodide/sphinx_pyodide/mdn_xrefs.py index 35779d60e..85950d353 100644 --- a/docs/sphinx_pyodide/sphinx_pyodide/mdn_xrefs.py +++ b/docs/sphinx_pyodide/sphinx_pyodide/mdn_xrefs.py @@ -13,11 +13,14 @@ DATA = { "Reflect.ownKeys": "$global/", "Array.from": "$global/", "Atomics.wait": "$global/", + "getDirectory": "API/StorageManager/", + "showDirectoryPicker": "API/Window/", }, "js:class": { "Array": "$global/", "NodeList": "API/", "HTMLCollection": "API/", + "HTMLCanvasElement": "API/", "Generator": "$global/", "AsyncGenerator": "$global/", "Date": "$global/", @@ -56,6 +59,15 @@ DATA = { "Function.bind": "$global/", "Function.call": "$global/", "Array.join": "$global/", + "Array.copyWithin": "$global/", + "Array.fill": "$global/", + "Array.pop": "$global/", + "Array.push": "$global/", + "Array.reverse": "$global/", + "Array.shift": "$global/", + "Array.sort": "$global/", + "Array.splice": "$global/", + "Array.unshift": "$global/", "Array.slice": "$global/", "Array.lastIndexOf": "$global/", "Array.indexOf": "$global/", diff --git a/docs/sphinx_pyodide/sphinx_pyodide/templates/attribute.rst b/docs/sphinx_pyodide/sphinx_pyodide/templates/attribute.rst deleted file mode 100644 index 065c88dae..000000000 --- a/docs/sphinx_pyodide/sphinx_pyodide/templates/attribute.rst +++ /dev/null @@ -1,21 +0,0 @@ -{% import 'common.rst' as common %} - -.. js:attribute:: {{ name }}{{ '?' if is_optional else '' }} - - {{ common.deprecated(deprecated)|indent(3) }} - - {% if type -%} - .. rst-class:: js attribute type - - type: {{ type|indent(3) }} - {%- endif %} - - {% if description -%} - {{ description|indent(3) }} - {%- endif %} - - {{ common.examples(examples)|indent(3) }} - - {{ content|indent(3) }} - - {{ common.see_also(see_also)|indent(3) }} diff --git a/docs/sphinx_pyodide/tests/test_directives.py b/docs/sphinx_pyodide/tests/test_directives.py index cd885200f..c410abbf8 100644 --- a/docs/sphinx_pyodide/tests/test_directives.py +++ b/docs/sphinx_pyodide/tests/test_directives.py @@ -13,6 +13,7 @@ if not hasattr(inspect, "getargspec"): from sphinx_js.suffix_tree import SuffixTree from sphinx_js.typedoc import Analyzer as TsAnalyzer +from sphinx_js.typedoc import Project test_directory = Path(__file__).resolve().parent sys.path.append(str(test_directory.parent)) @@ -25,18 +26,28 @@ src_dir = test_directory.parents[2] / "src" # typedoc src/js/*.ts --tsconfig src/js/tsconfig.json --json docs/sphinx_pyodide/tests/tsdoc_dump.json # gzip docs/sphinx_pyodide/tests/tsdoc_dump.json # rm src/js/pyproxy.gen.ts -with gzip.open(test_directory / "tsdoc_dump.json.gz") as fh: - jsdoc_json = json.load(fh) -settings_json = json.loads((test_directory / "app_settings.json").read_text()) + from sphinx_pyodide.jsdoc import ( PyodideAnalyzer, flatten_suffix_tree, get_jsdoc_content_directive, get_jsdoc_summary_directive, + ts_post_convert, + ts_should_destructure_arg, + ts_xref_formatter, ) -inner_analyzer = TsAnalyzer(jsdoc_json, str(src_dir)) +with gzip.open(test_directory / "tsdoc_dump.json.gz") as fh: + jsdoc_json = Project.parse_raw(fh.read()) +settings_json = json.loads((test_directory / "app_settings.json").read_text()) + +inner_analyzer = TsAnalyzer( + jsdoc_json, + str(src_dir), + post_convert=ts_post_convert, + should_destructure_arg=ts_should_destructure_arg, +) settings = OptionParser().get_default_values() settings.update(settings_json, OptionParser()) @@ -60,9 +71,14 @@ def test_flatten_suffix_tree(): assert d == r +class dummy_config: + ts_type_xref_formatter = ts_xref_formatter + + class dummy_app: _sphinxjs_analyzer = pyodide_analyzer document = document + config = dummy_config class dummy_state: @@ -83,7 +99,7 @@ def test_pyodide_analyzer(): "registerJsModule", "runPython", "runPythonAsync", - "setDefaultStdout", + "setDebug", "setInterruptBuffer", "setStderr", "setStdin", @@ -97,6 +113,8 @@ def test_pyodide_analyzer(): "ERRNO_CODES", "FS", "PATH", + "canvas", + "ffi", "version", "globals", "loadedPackages", @@ -171,11 +189,12 @@ def test_summary(): functions = jsdoc_summary.get_summary_table( "pyodide", dummy_app._sphinxjs_analyzer.js_docs["pyodide"]["function"] ) - globals = {t[1]: t for t in globals} - attributes = {t[1]: t for t in attributes} - functions = {t[1]: t for t in functions} + globals = {t[2]: t for t in globals} + attributes = {t[2]: t for t in attributes} + functions = {t[2]: t for t in functions} assert globals["loadPyodide"] == ( "**async** ", + "any", "loadPyodide", "(options)", "Load the main Pyodide wasm module and initialize it.", @@ -184,13 +203,15 @@ def test_summary(): assert attributes["pyodide_py"] == ( "", + "any", "pyodide_py", "", - "An alias to the Python :py:mod:`pyodide` package.", + "An alias to the Python :ref:`pyodide ` package.", "pyodide.pyodide_py", ) assert attributes["version"] == ( "", + "any", "version", "", "The Pyodide version.", @@ -198,6 +219,7 @@ def test_summary(): ) assert attributes["loadedPackages"] == ( "", + "any", "loadedPackages", "", "The list of packages that Pyodide has loaded.", @@ -206,149 +228,7 @@ def test_summary(): assert functions["loadPackagesFromImports"][:-2] == ( "**async** ", + "any", "loadPackagesFromImports", "(code, options)", ) - - -def test_type_name(): - tn = inner_analyzer._type_name - assert tn({"name": "void", "type": "intrinsic"}) == ":js:data:`void`" - assert tn({"value": None, "type": "literal"}) == ":js:data:`null`" - assert ( - tn( - { - "name": "Promise", - "type": "reference", - "typeArguments": [{"name": "string", "type": "intrinsic"}], - } - ).strip() - == r":js:class:`Promise`\ **<**\ :js:data:`string`\ **>**" - ) - - assert ( - tn( - { - "asserts": False, - "name": "jsobj", - "targetType": {"name": "PyProxy", "type": "reference"}, - "type": "predicate", - } - ).strip() - == ":js:data:`boolean` (typeguard for :js:class:`PyProxy`)" - ) - - assert ( - tn( - { - "declaration": { - "kindString": "Method", - "name": "messageCallback", - "signatures": [ - { - "kindString": "Call signature", - "name": "messageCallback", - "parameters": [ - { - "flags": {}, - "kindString": "Parameter", - "name": "message", - "type": {"name": "string", "type": "intrinsic"}, - } - ], - "type": {"name": "void", "type": "intrinsic"}, - } - ], - }, - "type": "reflection", - } - ).strip() - == r"\ **(**\ \ **message:** :js:data:`string`\ **) =>** :js:data:`void`" - ) - - assert ( - tn( - { - "name": "Iterable", - "type": "reference", - "typeArguments": [ - { - "elements": [ - { - "element": {"name": "string", "type": "intrinsic"}, - "isOptional": False, - "name": "key", - "type": "named-tuple-member", - }, - { - "element": {"name": "any", "type": "intrinsic"}, - "isOptional": False, - "name": "value", - "type": "named-tuple-member", - }, - ], - "type": "tuple", - } - ], - } - ).strip() - == r":js:data:`Iterable`\ **<**\ \ **[**\ \ **key:** :js:data:`string`\ **,** \ **value:** :js:data:`any`\ **]** \ **>**" - ) - - assert ( - tn( - { - "declaration": { - "flags": {}, - "indexSignature": { - "flags": {}, - "kindString": "Index signature", - "parameters": [ - { - "flags": {}, - "name": "key", - "type": {"name": "string", "type": "intrinsic"}, - } - ], - "type": {"name": "string", "type": "intrinsic"}, - }, - "kindString": "Type literal", - }, - "type": "reflection", - } - ).strip() - == r"""\ **{**\ \ **[key:** :js:data:`string`\ **]:** :js:data:`string`\ **}**\ """.strip() - ) - - assert ( - tn( - { - "declaration": { - "children": [ - { - "flags": {}, - "kindString": "Property", - "name": "cache", - "type": {"name": "PyProxyCache", "type": "reference"}, - }, - { - "flags": {"isOptional": True}, - "kindString": "Property", - "name": "destroyed_msg", - "type": {"name": "string", "type": "intrinsic"}, - }, - { - "flags": {}, - "kindString": "Property", - "name": "ptr", - "type": {"name": "number", "type": "intrinsic"}, - }, - ], - "flags": {}, - "kindString": "Type literal", - }, - "type": "reflection", - } - ).strip() - == r"""\ **{**\ \ **cache:** :js:class:`PyProxyCache`\ **,** \ **destroyed_msg?:** :js:data:`string`\ **,** \ **ptr:** :js:data:`number`\ **}**\ """.strip() - ) diff --git a/docs/sphinx_pyodide/tests/tsdoc_dump.json.gz b/docs/sphinx_pyodide/tests/tsdoc_dump.json.gz index 538e09664043a4e79a2b21699bf5c9e1c4d81d62..55d96e50e5a901ad5cedc4fd03ff9512901e1751 100644 GIT binary patch literal 151653 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 literal 30023 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 diff --git a/docs/usage/api/js-api.md b/docs/usage/api/js-api.md index 536728c26..9cc994ffa 100644 --- a/docs/usage/api/js-api.md +++ b/docs/usage/api/js-api.md @@ -43,7 +43,7 @@ import type { PyProxy } from "pyodide/ffi"; This provides APIs to set a canvas for rendering graphics. For example, you need to set a canvas if you want to use the SDL library. See -:ref:`using-sdl` for more information. +{ref}`using-sdl` for more information. ```{eval-rst} .. js-doc-summary:: pyodide.canvas diff --git a/docs/usage/type-conversions.md b/docs/usage/type-conversions.md index f4b5c10b9..6f7e094ab 100644 --- a/docs/usage/type-conversions.md +++ b/docs/usage/type-conversions.md @@ -571,12 +571,12 @@ An example of a case where you would not want to use the {js:func}`~pyodide.ffi.PyProxy.toJs` method is when the buffer is bitmapped image data. If for instance you have a 3d buffer shaped 1920 x 1080 x 4, then {js:func}`~pyodide.ffi.PyProxy.toJs` will be extremely slow. In this case you -could use {js:func}`~pyodide.ffi.PyProxy.getBuffer`. On the other hand, if you +could use {js:func}`~pyodide.ffi.PyBuffer.getBuffer`. On the other hand, if you have a 3d buffer shaped 1920 x 4 x 1080, the performance of {js:func}`~pyodide.ffi.PyProxy.toJs` will most likely be satisfactory. Typically, the innermost dimension won't matter for performance. -The {js:func}`~pyodide.ffi.PyProxy.getBuffer` method can be used to retrieve a reference to +The {js:func}`~pyodide.ffi.PyBuffer.getBuffer` method can be used to retrieve a reference to a JavaScript typed array that points to the data backing the Python object, combined with other metadata about the buffer format. The metadata is suitable for use with a JavaScript ndarray library if one is present. For instance, if diff --git a/pyodide-build/pyodide_build/cli/build_recipes.py b/pyodide-build/pyodide_build/cli/build_recipes.py index d42e62c7f..e1383b7d7 100644 --- a/pyodide-build/pyodide_build/cli/build_recipes.py +++ b/pyodide-build/pyodide_build/cli/build_recipes.py @@ -10,12 +10,12 @@ from ..logger import logger def recipe( packages: list[str] = typer.Argument( - ..., help="Packages to build, or * for all packages in recipe directory" + ..., help="Packages to build, or ``*`` for all packages in recipe directory" ), recipe_dir: str = typer.Option( None, help="The directory containing the recipe of packages. " - "If not specified, the default is `./packages`", + "If not specified, the default is ``./packages``", ), no_deps: bool = typer.Option( False, help="If true, do not build dependencies of the specified packages. " @@ -28,13 +28,13 @@ def recipe( install_dir: str = typer.Option( None, help="Path to install built packages and pyodide-lock.json. " - "If not specified, the default is `./dist`.", + "If not specified, the default is ``./dist``.", ), metadata_files: bool = typer.Option( False, help="If true, extract the METADATA file from the built wheels " - "to a matching *.whl.metadata file. " - "If false, no *.whl.metadata file is produced.", + "to a matching ``*.whl.metadata`` file. " + "If false, no ``*.whl.metadata`` file is produced.", ), cflags: str = typer.Option( None, help="Extra compiling flags. Default: SIDE_MODULE_CFLAGS" diff --git a/pyodide-build/pyodide_build/cli/skeleton.py b/pyodide-build/pyodide_build/cli/skeleton.py index 2772f69d1..1696fe690 100644 --- a/pyodide-build/pyodide_build/cli/skeleton.py +++ b/pyodide-build/pyodide_build/cli/skeleton.py @@ -44,7 +44,7 @@ def new_recipe_pypi( recipe_dir: str = typer.Option( None, help="The directory containing the recipe of packages." - "If not specified, the default is `/packages`.", + "If not specified, the default is ``/packages``.", ), ) -> None: """ diff --git a/src/core/error_handling.ts b/src/core/error_handling.ts index b67a279bb..df4c54b60 100644 --- a/src/core/error_handling.ts +++ b/src/core/error_handling.ts @@ -280,7 +280,7 @@ Module.handle_js_error = function (e: any) { /** * A JavaScript error caused by a Python exception. * - * In order to reduce the risk of large memory leaks, the :py:exc:`PythonError` + * In order to reduce the risk of large memory leaks, the :js:class:`PythonError` * contains no reference to the Python exception that caused it. You can find * the actual Python exception that caused this error as * :py:data:`sys.last_value`. diff --git a/src/core/pyproxy.ts b/src/core/pyproxy.ts index d6d7415b2..0f73c7829 100644 --- a/src/core/pyproxy.ts +++ b/src/core/pyproxy.ts @@ -192,7 +192,6 @@ const pyproxyAttrsSymbol = Symbol("pyproxy.attrs"); * Function so that PyProxy objects can be callable. In that case we MUST expose * certain properties inherited from Function, but we do our best to remove as * many as possible. - * @private */ function pyproxy_new( ptr: number, @@ -344,7 +343,6 @@ let pyproxyClassMap = new Map(); * pyproxy_getflags. Multiple PyProxies with the same set of feature flags * will share the same prototype, so the memory footprint of each individual * PyProxy is minimal. - * @private */ Module.getPyProxyClass = function (flags: number) { const FLAG_TYPE_PAIRS: [number, any][] = [ @@ -556,14 +554,13 @@ export class PyProxy { } /** - * @private * @hideconstructor */ constructor() { throw new TypeError("PyProxy is not a constructor"); } - /** @private */ + /** @hidden */ get [Symbol.toStringTag]() { return "PyProxy"; } @@ -1033,7 +1030,6 @@ export class PyContainsMethods { * Quote from: * https://hacks.mozilla.org/2015/07/es6-in-depth-generators-continued/ * - * @private */ function* iter_helper(iterptr: number, token: {}): Generator { try { @@ -1122,7 +1118,6 @@ export class PyIterableMethods { * Quote from: * https://hacks.mozilla.org/2015/07/es6-in-depth-generators-continued/ * - * @private */ async function* aiter_helper(iterptr: number, token: {}): AsyncGenerator { try { @@ -1573,6 +1568,7 @@ function defaultCompareFunc(a: any, b: any): number { // Missing: // flatMap, flat, export class PySequenceMethods { + /** @hidden */ get [Symbol.isConcatSpreadable]() { return true; } @@ -1645,10 +1641,11 @@ export class PySequenceMethods { * return value is added as a single element in the new array. * @param thisArg A value to use as ``this`` when executing ``callbackFn``. */ - map( - callbackfn: (elt: any, index: number, array: any) => void, + map( + callbackfn: (elt: any, index: number, array: any) => U, thisArg?: any, - ) { + ): U[] { + // @ts-ignore return Array.prototype.map.call(this, callbackfn, thisArg); } /** @@ -1842,22 +1839,23 @@ export interface PyMutableSequence extends PyMutableSequenceMethods {} export class PyMutableSequenceMethods { /** - * The :js:meth:`Array.reverse` method reverses a ``MutableSequence`` in + * The :js:meth:`Array.reverse` method reverses a :js:class:`PyMutableSequence` in * place. - * @returns A reference to the same ``MutableSequence`` + * @returns A reference to the same :js:class:`PyMutableSequence` */ - reverse() { + reverse(): PyMutableSequence { // @ts-ignore this.$reverse(); + // @ts-ignore return this; } /** * The :js:meth:`Array.sort` method sorts the elements of a - * ``MutableSequence`` in place. + * :js:class:`PyMutableSequence` in place. * @param compareFn A function that defines the sort order. - * @returns A reference to the same ``MutableSequence`` + * @returns A reference to the same :js:class:`PyMutableSequence` */ - sort(compareFn?: (a: any, b: any) => number) { + sort(compareFn?: (a: any, b: any) => number): PyMutableSequence { // Copy the behavior of sort described here: // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#creating_displaying_and_sorting_an_array // Yes JS sort is weird. @@ -1897,17 +1895,18 @@ export class PyMutableSequenceMethods { cmp_to_key.destroy(); functools.destroy(); } + // @ts-ignore return this; } /** * The :js:meth:`Array.splice` method changes the contents of a - * ``MutableSequence`` by removing or replacing existing elements and/or + * :js:class:`PyMutableSequence` by removing or replacing existing elements and/or * adding new elements in place. * @param start Zero-based index at which to start changing the - * ``MutableSequence``. + * :js:class:`PyMutableSequence`. * @param deleteCount An integer indicating the number of elements in the - * ``MutableSequence`` to remove from ``start``. - * @param items The elements to add to the ``MutableSequence``, beginning from + * :js:class:`PyMutableSequence` to remove from ``start``. + * @param items The elements to add to the :js:class:`PyMutableSequence`, beginning from * ``start``. * @returns An array containing the deleted elements. */ @@ -1920,8 +1919,8 @@ export class PyMutableSequenceMethods { } /** * The :js:meth:`Array.push` method adds the specified elements to the end of - * a ``MutableSequence``. - * @param elts The element(s) to add to the end of the ``MutableSequence``. + * a :js:class:`PyMutableSequence`. + * @param elts The element(s) to add to the end of the :js:class:`PyMutableSequence`. * @returns The new length property of the object upon which the method was * called. */ @@ -1935,27 +1934,27 @@ export class PyMutableSequenceMethods { } /** * The :js:meth:`Array.pop` method removes the last element from a - * ``MutableSequence``. - * @returns The removed element from the ``MutableSequence``; undefined if the - * ``MutableSequence`` is empty. + * :js:class:`PyMutableSequence`. + * @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the + * :js:class:`PyMutableSequence` is empty. */ pop() { return python_pop(this, false); } /** * The :js:meth:`Array.shift` method removes the first element from a - * ``MutableSequence``. - * @returns The removed element from the ``MutableSequence``; undefined if the - * ``MutableSequence`` is empty. + * :js:class:`PyMutableSequence`. + * @returns The removed element from the :js:class:`PyMutableSequence`; undefined if the + * :js:class:`PyMutableSequence` is empty. */ shift() { return python_pop(this, true); } /** * The :js:meth:`Array.unshift` method adds the specified elements to the - * beginning of a ``MutableSequence``. - * @param elts The elements to add to the front of the ``MutableSequence``. - * @returns The new length of the ``MutableSequence``. + * beginning of a :js:class:`PyMutableSequence`. + * @param elts The elements to add to the front of the :js:class:`PyMutableSequence`. + * @returns The new length of the :js:class:`PyMutableSequence`. */ unshift(...elts: any[]) { elts.forEach((elt, idx) => { @@ -1967,12 +1966,12 @@ export class PyMutableSequenceMethods { } /** * The :js:meth:`Array.copyWithin` method shallow copies part of a - * ``MutableSequence`` to another location in the same ``MutableSequence`` + * :js:class:`PyMutableSequence` to another location in the same :js:class:`PyMutableSequence` * without modifying its length. * @param target Zero-based index at which to copy the sequence to. * @param start Zero-based index at which to start copying elements from. * @param end Zero-based index at which to end copying elements from. - * @returns The modified ``MutableSequence``. + * @returns The modified :js:class:`PyMutableSequence`. */ copyWithin(target: number, start?: number, end?: number): any; copyWithin(...args: number[]): any { @@ -2339,7 +2338,6 @@ export type PyProxyAwaitable = PyAwaitable; /** * The Promise / JavaScript awaitable API. - * @private */ export class PyAwaitableMethods { $$: any; @@ -2444,7 +2442,7 @@ export class PyAwaitableMethods { /** * A :js:class:`~pyodide.ffi.PyProxy` whose proxied Python object is - * :std:term:`callable` (i.e., has an :py:meth:`~operator.__call__` method). + * :std:term:`callable` (i.e., has an :py:meth:`~object.__call__` method). */ export class PyCallable extends PyProxy { /** @private */ @@ -2958,10 +2956,8 @@ export class PyBufferView { */ f_contiguous: boolean; - /** @private */ _released: boolean; - /** @private */ _view_ptr: number; /** @private */ diff --git a/src/js/api.ts b/src/js/api.ts index 43c094c2e..8c384b170 100644 --- a/src/js/api.ts +++ b/src/js/api.ts @@ -470,8 +470,8 @@ export class PyodideAPI { * @param path The absolute path in the Emscripten file system to mount the * native directory. If the directory does not exist, it will be created. If it * does exist, it must be empty. - * @param fileSystemHandle A handle returned by ``navigator.storage.getDirectory()`` - * or ``window.showDirectoryPicker()``. + * @param fileSystemHandle A handle returned by :js:func:`navigator.storage.getDirectory() ` + * or :js:func:`window.showDirectoryPicker() `. */ static async mountNativeFS( path: string, diff --git a/src/js/package-lock.json b/src/js/package-lock.json index f1778bb42..155855bb9 100644 --- a/src/js/package-lock.json +++ b/src/js/package-lock.json @@ -17,7 +17,7 @@ "@types/emscripten": "^1.39.5", "@types/expect": "^24.3.0", "@types/mocha": "^9.1.0", - "@types/node": "^17.0.25", + "@types/node": "^17.0.45", "@types/ws": "^8.5.3", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", @@ -32,7 +32,7 @@ "prettier": "^2.2.1", "ts-mocha": "^9.0.2", "tsd": "^0.24.1", - "typedoc": "^0.22.15", + "typedoc": "^0.25.1", "typescript": "^4.6.4" } }, @@ -1262,6 +1262,12 @@ "node": ">=8" } }, + "node_modules/ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -3559,9 +3565,9 @@ } }, "node_modules/marked": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -5229,14 +5235,15 @@ } }, "node_modules/shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "dependencies": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, "node_modules/side-channel": { @@ -5764,25 +5771,24 @@ } }, "node_modules/typedoc": { - "version": "0.22.18", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", - "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz", + "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==", "dev": true, "dependencies": { - "glob": "^8.0.3", "lunr": "^2.3.9", - "marked": "^4.0.16", - "minimatch": "^5.1.0", - "shiki": "^0.10.1" + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.1" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 12.10.0" + "node": ">= 16" }, "peerDependencies": { - "typescript": "4.0.x || 4.1.x || 4.2.x || 4.3.x || 4.4.x || 4.5.x || 4.6.x || 4.7.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x" } }, "node_modules/typedoc/node_modules/brace-expansion": { @@ -5794,35 +5800,19 @@ "balanced-match": "^1.0.0" } }, - "node_modules/typedoc/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/typedoc/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/typescript": { @@ -5932,9 +5922,9 @@ "dev": true }, "node_modules/vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, "node_modules/which": { @@ -7031,6 +7021,12 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "ansi-sequence-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", + "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", + "dev": true + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -8704,9 +8700,9 @@ "dev": true }, "marked": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", - "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", "dev": true }, "media-typer": { @@ -9930,14 +9926,15 @@ "dev": true }, "shiki": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.10.1.tgz", - "integrity": "sha512-VsY7QJVzU51j5o1+DguUd+6vmCmZ5v/6gYu4vyYAhzjuNQU6P/vmSy4uQaOhvje031qQMiW0d2BwgMH52vqMng==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.4.tgz", + "integrity": "sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==", "dev": true, "requires": { - "jsonc-parser": "^3.0.0", - "vscode-oniguruma": "^1.6.1", - "vscode-textmate": "5.2.0" + "ansi-sequence-parser": "^1.1.0", + "jsonc-parser": "^3.2.0", + "vscode-oniguruma": "^1.7.0", + "vscode-textmate": "^8.0.0" } }, "side-channel": { @@ -10342,16 +10339,15 @@ } }, "typedoc": { - "version": "0.22.18", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.18.tgz", - "integrity": "sha512-NK9RlLhRUGMvc6Rw5USEYgT4DVAUFk7IF7Q6MYfpJ88KnTZP7EneEa4RcP+tX1auAcz7QT1Iy0bUSZBYYHdoyA==", + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.1.tgz", + "integrity": "sha512-c2ye3YUtGIadxN2O6YwPEXgrZcvhlZ6HlhWZ8jQRNzwLPn2ylhdGqdR8HbyDRyALP8J6lmSANILCkkIdNPFxqA==", "dev": true, "requires": { - "glob": "^8.0.3", "lunr": "^2.3.9", - "marked": "^4.0.16", - "minimatch": "^5.1.0", - "shiki": "^0.10.1" + "marked": "^4.3.0", + "minimatch": "^9.0.3", + "shiki": "^0.14.1" }, "dependencies": { "brace-expansion": { @@ -10363,23 +10359,10 @@ "balanced-match": "^1.0.0" } }, - "glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - } - }, "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -10456,9 +10439,9 @@ "dev": true }, "vscode-textmate": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-5.2.0.tgz", - "integrity": "sha512-Uw5ooOQxRASHgu6C7GVvUxisKXfSgW4oFlO+aa+PAkgmH89O3CXxEEzNRNtHSqtXFTl0nAC1uYj0GMSH27uwtQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", + "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", "dev": true }, "which": { diff --git a/src/js/package.json b/src/js/package.json index 1134a4262..73feb86b4 100644 --- a/src/js/package.json +++ b/src/js/package.json @@ -20,7 +20,7 @@ "@types/emscripten": "^1.39.5", "@types/expect": "^24.3.0", "@types/mocha": "^9.1.0", - "@types/node": "^17.0.25", + "@types/node": "^17.0.45", "@types/ws": "^8.5.3", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", @@ -35,7 +35,7 @@ "prettier": "^2.2.1", "ts-mocha": "^9.0.2", "tsd": "^0.24.1", - "typedoc": "^0.22.15", + "typedoc": "^0.25.1", "typescript": "^4.6.4" }, "main": "pyodide.js", diff --git a/src/js/tsdoc.json b/src/js/tsdoc.json new file mode 100644 index 000000000..c27eed450 --- /dev/null +++ b/src/js/tsdoc.json @@ -0,0 +1,23 @@ +{ + "$schema": "https://developer.microsoft.com/en-us/json-schemas/tsdoc/v0/tsdoc.schema.json", + "extends": ["typedoc/tsdoc.json"], + "noStandardTags": false, + "tagDefinitions": [ + { + "tagName": "@alias", + "syntaxKind": "modifier" + }, + { + "tagName": "@hidetype", + "syntaxKind": "modifier" + }, + { + "tagName": "@hideconstructor", + "syntaxKind": "modifier" + }, + { + "tagName": "@dockind", + "syntaxKind": "block" + } + ] +} diff --git a/src/py/_pyodide/_core_docs.py b/src/py/_pyodide/_core_docs.py index 3c42e3f6d..6961c3eba 100644 --- a/src/py/_pyodide/_core_docs.py +++ b/src/py/_pyodide/_core_docs.py @@ -252,7 +252,7 @@ class JsProxy(metaclass=_JsProxyMetaClass): -------- Here are a couple examples of converter functions. In addition to the - normal conversions, convert :js:class:`Date`` to :py:class:`~datetime.datetime`: + normal conversions, convert :js:class:`Date` to :py:class:`~datetime.datetime`: .. code-block:: python