mkdocstrings-matlab 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- mkdocs_material_matlab/__init__.py +4 -0
- mkdocs_material_matlab/css/style.css +7 -0
- mkdocs_material_matlab/mkdocs_material_matlab.py +20 -0
- mkdocstrings_handlers/matlab/__init__.py +5 -0
- mkdocstrings_handlers/matlab/collect.py +597 -0
- mkdocstrings_handlers/matlab/enums.py +35 -0
- mkdocstrings_handlers/matlab/handler.py +294 -0
- mkdocstrings_handlers/matlab/models.py +560 -0
- mkdocstrings_handlers/matlab/py.typed +0 -0
- mkdocstrings_handlers/matlab/treesitter.py +654 -0
- mkdocstrings_matlab-0.3.0.dist-info/METADATA +82 -0
- mkdocstrings_matlab-0.3.0.dist-info/RECORD +15 -0
- mkdocstrings_matlab-0.3.0.dist-info/WHEEL +4 -0
- mkdocstrings_matlab-0.3.0.dist-info/entry_points.txt +2 -0
- mkdocstrings_matlab-0.3.0.dist-info/licenses/LICENSE +15 -0
@@ -0,0 +1,294 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
from collections import ChainMap
|
3
|
+
from markdown import Markdown
|
4
|
+
from mkdocstrings.handlers.base import BaseHandler, CollectorItem, CollectionError
|
5
|
+
from mkdocstrings_handlers.python import rendering
|
6
|
+
from typing import Any, ClassVar, Mapping
|
7
|
+
from pprint import pprint
|
8
|
+
|
9
|
+
|
10
|
+
from mkdocstrings_handlers.matlab.collect import LinesCollection, PathCollection
|
11
|
+
|
12
|
+
|
13
|
+
class MatlabHandler(BaseHandler):
|
14
|
+
"""The `MatlabHandler` class is a handler for processing Matlab code documentation."""
|
15
|
+
|
16
|
+
name: str = "matlab"
|
17
|
+
"""The handler's name."""
|
18
|
+
domain: str = "mat" # to match Sphinx's default domain
|
19
|
+
"""The cross-documentation domain/language for this handler."""
|
20
|
+
enable_inventory: bool = True
|
21
|
+
"""Whether this handler is interested in enabling the creation of the `objects.inv` Sphinx inventory file."""
|
22
|
+
fallback_theme = "material"
|
23
|
+
"""The fallback theme."""
|
24
|
+
fallback_config: ClassVar[dict] = {"fallback": True}
|
25
|
+
"""The configuration used to collect item during autorefs fallback."""
|
26
|
+
default_config: ClassVar[dict] = {
|
27
|
+
# General options
|
28
|
+
"show_bases": True,
|
29
|
+
"show_inheritance_diagram": False,
|
30
|
+
"show_source": True,
|
31
|
+
# Heading options
|
32
|
+
"heading_level": 2,
|
33
|
+
"show_root_heading": False,
|
34
|
+
"show_root_toc_entry": True,
|
35
|
+
"show_root_full_path": True,
|
36
|
+
"show_root_members_full_path": False,
|
37
|
+
"show_object_full_path": False,
|
38
|
+
"show_category_heading": False,
|
39
|
+
"show_symbol_type_heading": False,
|
40
|
+
"show_symbol_type_toc": False,
|
41
|
+
# Member options
|
42
|
+
"inherited_members": False,
|
43
|
+
"members": None,
|
44
|
+
"members_order": rendering.Order.alphabetical, # TODO broken
|
45
|
+
"filters": [],
|
46
|
+
"group_by_category": True, # TODO broken
|
47
|
+
"summary": False, # TODO broken
|
48
|
+
"show_labels": True,
|
49
|
+
# Docstring options
|
50
|
+
"docstring_style": "google",
|
51
|
+
"docstring_options": {},
|
52
|
+
"docstring_section_style": "table",
|
53
|
+
"create_from_argument_blocks": False,
|
54
|
+
"merge_constructor_into_class": False,
|
55
|
+
"show_if_no_docstring": False,
|
56
|
+
"show_docstring_attributes": True,
|
57
|
+
"show_docstring_functions": True,
|
58
|
+
"show_docstring_classes": True,
|
59
|
+
"show_docstring_modules": True, # TODO should be replaced with namespaces
|
60
|
+
"show_docstring_description": True,
|
61
|
+
"show_docstring_examples": True,
|
62
|
+
"show_docstring_other_parameters": True, # TODO should be name value pairs
|
63
|
+
"show_docstring_parameters": True,
|
64
|
+
"show_docstring_raises": True, # TODO need to additional parsing for this
|
65
|
+
"show_docstring_returns": True,
|
66
|
+
"show_docstring_warns": True, # TODO need to additional parsing for this
|
67
|
+
# Signature options
|
68
|
+
"annotations_path": "brief",
|
69
|
+
"line_length": 60,
|
70
|
+
"show_signature": True,
|
71
|
+
"show_signature_annotations": False,
|
72
|
+
"separate_signature": False,
|
73
|
+
}
|
74
|
+
"""Default handler configuration.
|
75
|
+
|
76
|
+
Attributes: General options:
|
77
|
+
show_bases (bool): Show the base classes of a class. Default: `True`.
|
78
|
+
show_inheritance_diagram (bool): Show the inheritance diagram of a class using Mermaid. Default: `False`.
|
79
|
+
show_source (bool): Show the source code of this object. Default: `True`.
|
80
|
+
|
81
|
+
|
82
|
+
Attributes: Headings options:
|
83
|
+
heading_level (int): The initial heading level to use. Default: `2`.
|
84
|
+
show_root_heading (bool): Show the heading of the object at the root of the documentation tree
|
85
|
+
(i.e. the object referenced by the identifier after `:::`). Default: `False`.
|
86
|
+
show_root_toc_entry (bool): If the root heading is not shown, at least add a ToC entry for it. Default: `True`.
|
87
|
+
show_root_full_path (bool): Show the full path for the root object heading. Default: `True`.
|
88
|
+
show_root_members_full_path (bool): Show the full path of the root members. Default: `False`.
|
89
|
+
show_object_full_path (bool): Show the full path of every object. Default: `False`.
|
90
|
+
show_category_heading (bool): When grouped by categories, show a heading for each category. Default: `False`.
|
91
|
+
show_symbol_type_heading (bool): Show the symbol type in headings (e.g. mod, class, meth, func and attr). Default: `False`.
|
92
|
+
show_symbol_type_toc (bool): Show the symbol type in the Table of Contents (e.g. mod, class, methd, func and attr). Default: `False`.
|
93
|
+
|
94
|
+
Attributes: Members options:
|
95
|
+
inherited_members (list[str] | bool | None): A boolean, or an explicit list of inherited members to render.
|
96
|
+
If true, select all inherited members, which can then be filtered with `members`.
|
97
|
+
If false or empty list, do not select any inherited member. Default: `False`.
|
98
|
+
members (list[str] | bool | None): A boolean, or an explicit list of members to render.
|
99
|
+
If true, select all members without further filtering.
|
100
|
+
If false or empty list, do not render members.
|
101
|
+
If none, select all members and apply further filtering with filters and docstrings. Default: `None`.
|
102
|
+
members_order (str): The members ordering to use. Options: `alphabetical` - order by the members names,
|
103
|
+
`source` - order members as they appear in the source file. Default: `"alphabetical"`.
|
104
|
+
filters (list[str] | None): A list of filters applied to filter objects based on their name.
|
105
|
+
A filter starting with `!` will exclude matching objects instead of including them.
|
106
|
+
The `members` option takes precedence over `filters` (filters will still be applied recursively
|
107
|
+
to lower members in the hierarchy). Default: `["!^_[^_]"]`.
|
108
|
+
group_by_category (bool): Group the object's children by categories: attributes, classes, functions, and modules. Default: `True`.
|
109
|
+
summary (bool | dict[str, bool]): Whether to render summaries of modules, classes, functions (methods) and attributes.
|
110
|
+
show_labels (bool): Whether to show labels of the members. Default: `True`.
|
111
|
+
|
112
|
+
Attributes: Docstrings options:
|
113
|
+
docstring_style (str): The docstring style to use: `google`, `numpy`, `sphinx`, or `None`. Default: `"google"`.
|
114
|
+
docstring_options (dict): The options for the docstring parser. See [docstring parsers](https://mkdocstrings.github.io/griffe/reference/docstrings/) and their options in Griffe docs.
|
115
|
+
docstring_section_style (str): The style used to render docstring sections. Options: `table`, `list`, `spacy`. Default: `"table"`.
|
116
|
+
merge_constructor_into_class (bool): Whether to merge the constructor method into the class' signature and docstring. Default: `False`.
|
117
|
+
create_from_argument_blocks (bool): Whether to create sections for inputs and output arguments based on argument validation blocks. Default: `False`.
|
118
|
+
relative_crossrefs (bool): Whether to enable the relative crossref syntax. Default: `False`.
|
119
|
+
scoped_crossrefs (bool): Whether to enable the scoped crossref ability. Default: `False`.
|
120
|
+
show_if_no_docstring (bool): Show the object heading even if it has no docstring or children with docstrings. Default: `False`.
|
121
|
+
show_docstring_attributes (bool): Whether to display the "Attributes" section in the object's docstring. Default: `True`.
|
122
|
+
show_docstring_functions (bool): Whether to display the "Functions" or "Methods" sections in the object's docstring. Default: `True`.
|
123
|
+
show_docstring_classes (bool): Whether to display the "Classes" section in the object's docstring. Default: `True`.
|
124
|
+
show_docstring_modules (bool): Whether to display the "Modules" section in the object's docstring. Default: `True`.
|
125
|
+
show_docstring_description (bool): Whether to display the textual block (including admonitions) in the object's docstring. Default: `True`.
|
126
|
+
show_docstring_examples (bool): Whether to display the "Examples" section in the object's docstring. Default: `True`.
|
127
|
+
show_docstring_other_parameters (bool): Whether to display the "Other Parameters" section in the object's docstring. Default: `True`.
|
128
|
+
show_docstring_parameters (bool): Whether to display the "Parameters" section in the object's docstring. Default: `True`.
|
129
|
+
show_docstring_raises (bool): Whether to display the "Raises" section in the object's docstring. Default: `True`.
|
130
|
+
show_docstring_returns (bool): Whether to display the "Returns" section in the object's docstring. Default: `True`.
|
131
|
+
show_docstring_warns (bool): Whether to display the "Warns" section in the object's docstring. Default: `True`.
|
132
|
+
|
133
|
+
Attributes: Signatures/annotations options:
|
134
|
+
annotations_path (str): The verbosity for annotations path: `brief` (recommended), or `source` (as written in the source). Default: `"brief"`.
|
135
|
+
line_length (int): Maximum line length when formatting code/signatures. Default: `60`.
|
136
|
+
show_signature (bool): Show methods and functions signatures. Default: `True`.
|
137
|
+
show_signature_annotations (bool): Show the type annotations in methods and functions signatures. Default: `False`.
|
138
|
+
separate_signature (bool): Whether to put the whole signature in a code block below the heading.
|
139
|
+
"""
|
140
|
+
|
141
|
+
def __init__(
|
142
|
+
self,
|
143
|
+
*args: Any,
|
144
|
+
config_file_path: str | None = None,
|
145
|
+
paths: list[str] | None = None,
|
146
|
+
paths_recursive: bool = False,
|
147
|
+
locale: str = "en",
|
148
|
+
**kwargs: Any,
|
149
|
+
) -> None:
|
150
|
+
"""
|
151
|
+
Initialize the handler with the given configuration.
|
152
|
+
|
153
|
+
Args:
|
154
|
+
*args (Any): Variable length argument list.
|
155
|
+
config_file_path (str | None, optional): Path to the configuration file. Defaults to None.
|
156
|
+
paths (list[str] | None, optional): List of paths to include. Defaults to None.
|
157
|
+
paths_recursive (bool, optional): Whether to include paths recursively. Defaults to False.
|
158
|
+
locale (str, optional): Locale setting. Defaults to "en".
|
159
|
+
**kwargs (Any): Arbitrary keyword arguments.
|
160
|
+
|
161
|
+
Returns:
|
162
|
+
None
|
163
|
+
"""
|
164
|
+
super().__init__(*args, **kwargs)
|
165
|
+
|
166
|
+
if paths is None or config_file_path is None:
|
167
|
+
full_paths = []
|
168
|
+
else:
|
169
|
+
config_path = Path(config_file_path).parent
|
170
|
+
full_paths = [(config_path / path).resolve() for path in paths]
|
171
|
+
|
172
|
+
self.paths: PathCollection = PathCollection(
|
173
|
+
full_paths, recursive=paths_recursive
|
174
|
+
)
|
175
|
+
self.lines: LinesCollection = self.paths.lines_collection
|
176
|
+
self._locale: str = locale
|
177
|
+
|
178
|
+
def get_templates_dir(self, handler: str | None = None) -> Path:
|
179
|
+
# use the python handler templates
|
180
|
+
# (it assumes the python handler is installed)
|
181
|
+
return super().get_templates_dir("python")
|
182
|
+
|
183
|
+
def render(self, data: CollectorItem, config: Mapping[str, Any]) -> str:
|
184
|
+
"""Render a template using provided data and configuration options.
|
185
|
+
|
186
|
+
Arguments:
|
187
|
+
data: The collected data to render.
|
188
|
+
config: The handler's configuration options.
|
189
|
+
|
190
|
+
Returns:
|
191
|
+
The rendered template as HTML.
|
192
|
+
"""
|
193
|
+
final_config = ChainMap(config, self.default_config) # type: ignore[arg-type]
|
194
|
+
|
195
|
+
template_name = rendering.do_get_template(self.env, data)
|
196
|
+
template = self.env.get_template(template_name)
|
197
|
+
|
198
|
+
heading_level = final_config["heading_level"]
|
199
|
+
|
200
|
+
return template.render(
|
201
|
+
**{
|
202
|
+
"config": final_config,
|
203
|
+
data.kind.value: data,
|
204
|
+
"heading_level": heading_level,
|
205
|
+
"root": True,
|
206
|
+
"locale": self._locale,
|
207
|
+
},
|
208
|
+
)
|
209
|
+
|
210
|
+
def update_env(self, md: Markdown, config: dict) -> None:
|
211
|
+
"""Update the Jinja environment with custom filters and tests.
|
212
|
+
|
213
|
+
Parameters:
|
214
|
+
md: The Markdown instance.
|
215
|
+
config: The configuration dictionary.
|
216
|
+
"""
|
217
|
+
super().update_env(md, config)
|
218
|
+
self.env.trim_blocks = True
|
219
|
+
self.env.lstrip_blocks = True
|
220
|
+
self.env.keep_trailing_newline = False
|
221
|
+
self.env.filters["split_path"] = rendering.do_split_path
|
222
|
+
self.env.filters["crossref"] = rendering.do_crossref
|
223
|
+
self.env.filters["multi_crossref"] = rendering.do_multi_crossref
|
224
|
+
self.env.filters["order_members"] = rendering.do_order_members
|
225
|
+
self.env.filters["format_code"] = rendering.do_format_code
|
226
|
+
self.env.filters["format_signature"] = rendering.do_format_signature
|
227
|
+
self.env.filters["format_attribute"] = rendering.do_format_attribute
|
228
|
+
self.env.filters["filter_objects"] = rendering.do_filter_objects
|
229
|
+
self.env.filters["stash_crossref"] = lambda ref, length: ref
|
230
|
+
self.env.filters["get_template"] = rendering.do_get_template
|
231
|
+
self.env.filters["as_attributes_section"] = rendering.do_as_attributes_section
|
232
|
+
self.env.filters["as_functions_section"] = rendering.do_as_functions_section
|
233
|
+
self.env.filters["as_classes_section"] = rendering.do_as_classes_section
|
234
|
+
self.env.filters["as_modules_section"] = rendering.do_as_modules_section
|
235
|
+
self.env.tests["existing_template"] = (
|
236
|
+
lambda template_name: template_name in self.env.list_templates()
|
237
|
+
)
|
238
|
+
|
239
|
+
def collect(self, identifier: str, config: Mapping[str, Any]) -> CollectorItem:
|
240
|
+
"""Collect data given an identifier and user configuration.
|
241
|
+
|
242
|
+
In the implementation, you typically call a subprocess that returns JSON, and load that JSON again into
|
243
|
+
a Python dictionary for example, though the implementation is completely free.
|
244
|
+
|
245
|
+
Arguments:
|
246
|
+
identifier: An identifier for which to collect data.
|
247
|
+
config: The handler's configuration options.
|
248
|
+
|
249
|
+
Returns:
|
250
|
+
CollectorItem
|
251
|
+
"""
|
252
|
+
if identifier == "":
|
253
|
+
raise CollectionError("Empty identifier")
|
254
|
+
|
255
|
+
final_config = ChainMap(config, self.default_config) # type: ignore[arg-type]
|
256
|
+
return self.paths.resolve(identifier, config=final_config)
|
257
|
+
|
258
|
+
|
259
|
+
def get_handler(
|
260
|
+
*,
|
261
|
+
theme: str,
|
262
|
+
custom_templates: str | None = None,
|
263
|
+
config_file_path: str | None = None,
|
264
|
+
paths: list[str] | None = None,
|
265
|
+
paths_recursive: bool = False,
|
266
|
+
**config: Any,
|
267
|
+
) -> MatlabHandler:
|
268
|
+
"""
|
269
|
+
Create and return a MatlabHandler object with the specified configuration.
|
270
|
+
|
271
|
+
Parameters:
|
272
|
+
theme (str): The theme to be used by the handler.
|
273
|
+
custom_templates (str | None, optional): Path to custom templates. Defaults to None.
|
274
|
+
config_file_path (str | None, optional): Path to the configuration file. Defaults to None.
|
275
|
+
paths (list[str] | None, optional): List of paths to include. Defaults to None.
|
276
|
+
paths_recursive (bool, optional): Whether to include paths recursively. Defaults to False.
|
277
|
+
**config (Any): Additional configuration options.
|
278
|
+
|
279
|
+
Returns:
|
280
|
+
MatlabHandler: An instance of MatlabHandler configured with the provided parameters.
|
281
|
+
"""
|
282
|
+
return MatlabHandler(
|
283
|
+
handler="matlab",
|
284
|
+
theme=theme,
|
285
|
+
custom_templates=custom_templates,
|
286
|
+
config_file_path=config_file_path,
|
287
|
+
paths=paths,
|
288
|
+
paths_recursive=paths_recursive,
|
289
|
+
)
|
290
|
+
|
291
|
+
|
292
|
+
if __name__ == "__main__":
|
293
|
+
handler = get_handler(theme="material")
|
294
|
+
pprint(handler.collect("matlab_startup", {}).docstring.parse("google"))
|