Skip to content

Commit 84c320b

Browse files
authored
👌 Change missing directive/role errors to warnings (#687)
If an unknown directive/role name is encountered, then a warning is emitted with the `myst.directive_unknown` or `myst.role_unknown` type, which can be suppressed.
1 parent c31ea80 commit 84c320b

File tree

6 files changed

+27
-20
lines changed

6 files changed

+27
-20
lines changed

docs/live_preview.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import traceback
12
from io import StringIO
23

34
import yaml
@@ -30,7 +31,7 @@ def convert(input_config: str, input_myst: str, writer_name: str) -> dict:
3031
settings_overrides=settings,
3132
)
3233
except Exception as exc:
33-
output = f"ERROR: conversion:\n{exc}"
34+
output = f"ERROR: conversion:\n{exc}\n{traceback.format_exc()}"
3435
return {"output": output, "warnings": warning_stream.getvalue()}
3536

3637

myst_parser/mdit_to_docutils/base.py

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1319,17 +1319,18 @@ def render_myst_role(self, token: SyntaxTreeNode) -> None:
13191319
role_func, messages = roles.role(
13201320
name, self.language_module_rst, lineno, self.reporter
13211321
)
1322-
inliner = MockInliner(self)
1323-
if role_func:
1324-
_nodes, messages2 = role_func(name, rawsource, text, lineno, inliner)
1325-
# return nodes, messages + messages2
1326-
self.current_node += _nodes
1327-
else:
1328-
message = self.reporter.error(
1329-
f'Unknown interpreted text role "{name}".', line=lineno
1322+
if not role_func:
1323+
self.create_warning(
1324+
f'Unknown interpreted text role "{name}".',
1325+
MystWarnings.UNKNOWN_ROLE,
1326+
line=lineno,
1327+
append_to=self.current_node,
13301328
)
1331-
problematic = inliner.problematic(text, rawsource, message)
1332-
self.current_node += problematic
1329+
self.current_node.extend(messages)
1330+
return
1331+
inliner = MockInliner(self)
1332+
_nodes, messages2 = role_func(name, rawsource, text, lineno, inliner)
1333+
self.current_node += _nodes + messages2
13331334

13341335
def render_colon_fence(self, token: SyntaxTreeNode) -> None:
13351336
"""Render a code fence with ``:`` colon delimiters."""
@@ -1470,11 +1471,12 @@ def run_directive(
14701471
)
14711472
directive_class, messages = output
14721473
if not directive_class:
1473-
error = self.reporter.error(
1474-
f'Unknown directive type "{name}".\n',
1474+
warn_node = self.create_warning(
1475+
f"Unknown directive type: {name!r}",
1476+
MystWarnings.UNKNOWN_DIRECTIVE,
14751477
line=position,
14761478
)
1477-
return [error] + messages
1479+
return ([warn_node] if warn_node else []) + messages
14781480

14791481
if issubclass(directive_class, Include):
14801482
# this is a Markdown only option,

myst_parser/warnings_.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@ class MystWarnings(Enum):
3131

3232
DIRECTIVE_PARSING = "directive_parse"
3333
"""Issue parsing directive."""
34+
UNKNOWN_DIRECTIVE = "directive_unknown"
35+
"""Unknown directive."""
36+
UNKNOWN_ROLE = "role_unknown"
37+
"""Unknown role."""
3438

3539
# cross-reference resolution
3640
XREF_AMBIGUOUS = "xref_ambiguous"

tests/test_renderers/fixtures/directive_options.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,9 @@ Unknown Directive:
147147
```
148148
.
149149
<document source="<src>/index.md">
150-
<system_message level="3" line="1" source="<src>/index.md" type="ERROR">
150+
<system_message level="2" line="1" source="<src>/index.md" type="WARNING">
151151
<paragraph>
152-
Unknown directive type "unknown".
152+
Unknown directive type: 'unknown' [myst.directive_unknown]
153153
<system_message level="1" line="1" source="<src>/index.md" type="INFO">
154154
<paragraph>
155155
No directive entry for "unknown" in module "docutils.parsers.rst.languages.en".

tests/test_renderers/fixtures/mock_include_errors.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@ Error in include file:
2020
```{include} bad.md
2121
```
2222
.
23-
tmpdir/bad.md:2: (ERROR/3) Unknown interpreted text role "a".
23+
tmpdir/bad.md:2: (WARNING/2) Unknown interpreted text role "a". [myst.role_unknown]
2424
.

tests/test_renderers/fixtures/reporter_warnings.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ abc
1919

2020
{xyz}`a`
2121
.
22-
<string>:3: (ERROR/3) Unknown interpreted text role "xyz".
22+
<string>:3: (WARNING/2) Unknown interpreted text role "xyz". [myst.role_unknown]
2323
.
2424

2525
Unknown directive:
@@ -28,7 +28,7 @@ Unknown directive:
2828
```{xyz}
2929
```
3030
.
31-
<string>:2: (ERROR/3) Unknown directive type "xyz".
31+
<string>:2: (WARNING/2) Unknown directive type: 'xyz' [myst.directive_unknown]
3232
.
3333

3434
Bad Front Matter:
@@ -174,5 +174,5 @@ Paragraph
174174
{unknown}`a`
175175
```
176176
.
177-
<string>:7: (ERROR/3) Unknown interpreted text role "unknown".
177+
<string>:7: (WARNING/2) Unknown interpreted text role "unknown". [myst.role_unknown]
178178
.

0 commit comments

Comments
 (0)