Skip to content

Commit 64bebaf

Browse files
authored
Merge pull request #604 from AnnMarieW/fix-docstrings
Fix docstrings, reformat reference docs
2 parents a47506a + 3d4b101 commit 64bebaf

File tree

4 files changed

+65
-104
lines changed

4 files changed

+65
-104
lines changed

docs/components_page/api_doc.py

Lines changed: 0 additions & 45 deletions
This file was deleted.

docs/components_page/markdown_parser.py

Lines changed: 45 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
import re
22
from pathlib import Path
33

4+
import dash_bootstrap_components as dbc
45
import dash_core_components as dcc
56
import dash_html_components as html
67
import markdown
78

8-
from .api_doc import ApiDoc
99
from .helpers import ExampleContainer, load_source_with_environment
10-
from .metadata import get_component_metadata
1110

1211
__all__ = ["parse"]
1312

@@ -17,6 +16,14 @@
1716
SPLIT_PATTERN = re.compile(r"{{.*}}")
1817
EXAMPLE_DOC_PATTERN = re.compile(r"{{(.*)}}")
1918

19+
# To format the docstrings
20+
VERBATIM_PATTERN = re.compile(r"`((\\\[)((.|\n)*?)(\\]))`")
21+
LINK_PATTERN = re.compile(r"\\\[([\w\.\-:\/]+)\\\]\(([\w\.\-:#\/]+)\)")
22+
PROP_OPTIONAL_DEFAULT_PATTERN = re.compile(r"""default (.*)\)""")
23+
PROP_TYPE_PATTERN = re.compile(r"""(\s*- \w+?\s*\()([^;]*);""")
24+
PROP_NAME_PATTERN = re.compile(r"""(\n- )(\w+?) \(""")
25+
NESTED_PROP_NAME_PATTERN = re.compile(r"""(\n\s+- )(\w+?) \(""")
26+
2027

2128
def parse(app, markdown_path, extra_env_vars=None):
2229
extra_env_vars = extra_env_vars or {}
@@ -53,7 +60,9 @@ def _parse_block(block, app, extra_env_vars):
5360
if type_ == "example":
5461
return _parse_example(data, app, extra_env_vars)
5562
elif type_ == "apidoc":
56-
return _parse_doc(data)
63+
_, filename = data.rsplit("/", 1)
64+
component_name = filename[:-3]
65+
return component_reference(component_name)
5766
elif type_ == "code-example":
5867
return _parse_code_example(data)
5968
raise ValueError("Unable to parse block.")
@@ -92,15 +101,43 @@ def _parse_code_example(data):
92101
)
93102

94103

95-
def _parse_doc(data):
96-
_, filename = data.rsplit("/", 1)
97-
return ApiDoc(get_component_metadata(data), component_name=filename[:-3])
98-
99-
100104
def _interleave(l1, l2):
101105
n = len(l2)
102106
out = []
103107
for x in zip(l1[:n], l2):
104108
out.extend(x)
105109
out.extend(l1[n:])
106110
return out
111+
112+
113+
def component_reference(component_name):
114+
component = getattr(dbc, component_name)
115+
component_doc = component.__doc__
116+
117+
return_div = [
118+
dcc.Markdown("### Keyword arguments for {}".format(component_name))
119+
]
120+
121+
docs = component_doc.split("Keyword arguments:")[-1]
122+
123+
docs = re.sub(VERBATIM_PATTERN, r"`[\3]`", docs)
124+
# format links
125+
docs = re.sub(LINK_PATTERN, r"[\1](\2)", docs)
126+
127+
# formats the prop defaults
128+
docs = re.sub(PROP_OPTIONAL_DEFAULT_PATTERN, r"default `\1`)", docs)
129+
130+
# formats the prop type
131+
docs = re.sub(PROP_TYPE_PATTERN, r"\1*\2*;", docs)
132+
133+
# formats the prop name on first level only
134+
docs = re.sub(PROP_NAME_PATTERN, r"\1**`\2`** (", docs)
135+
136+
# formats keys of nested dicts
137+
docs = re.sub(NESTED_PROP_NAME_PATTERN, r"\1**`\2`** (", docs)
138+
139+
# removes a level of nesting
140+
docs = docs.replace("\n-", "\n")
141+
142+
return_div.append(dcc.Markdown(docs))
143+
return html.Div(return_div, className="reference")

package-lock.json

Lines changed: 19 additions & 50 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
"jest": "^24.9.0",
4949
"npm-run-all": "^4.1.5",
5050
"prettier": "^1.19.1",
51-
"react-docgen": "^2.21.0",
51+
"react-docgen": "^4.1.1",
5252
"style-loader": "^0.23.1",
5353
"webpack": "^4.44.1",
5454
"webpack-cli": "^3.3.12",

0 commit comments

Comments
 (0)