|
12 | 12 |
|
13 | 13 | import docutils |
14 | 14 | import docutils.frontend |
| 15 | +import docutils.writers |
15 | 16 | from docutils import nodes |
16 | 17 | from docutils.io import FileOutput |
17 | 18 | from docutils.parsers.rst import Directive, directives, roles |
@@ -499,14 +500,12 @@ def config(self) -> Config: |
499 | 500 | """ |
500 | 501 | return self.env.config |
501 | 502 |
|
502 | | - def get_source_info(self) -> tuple[str, int]: |
| 503 | + def get_source_info(self) -> tuple[str | None, int | None]: |
503 | 504 | """Get source and line number. |
504 | 505 |
|
505 | 506 | .. versionadded:: 3.0 |
506 | 507 | """ |
507 | 508 | source, line = self.state_machine.get_source_and_line(self.lineno) |
508 | | - assert source is not None |
509 | | - assert line is not None |
510 | 509 | return source, line |
511 | 510 |
|
512 | 511 | def set_source_info(self, node: Node) -> None: |
@@ -680,18 +679,20 @@ def config(self) -> Config: |
680 | 679 | """ |
681 | 680 | return self.env.config |
682 | 681 |
|
683 | | - def get_source_info(self, lineno: int | None = None) -> tuple[str, int]: |
| 682 | + def get_source_info( |
| 683 | + self, lineno: int | None = None |
| 684 | + ) -> tuple[str | os.PathLike[str] | None, int | None]: |
684 | 685 | # .. versionadded:: 3.0 |
685 | 686 | if lineno is None: |
686 | 687 | lineno = self.lineno |
687 | 688 | source, line = self.inliner.reporter.get_source_and_line(lineno) |
688 | | - assert source is not None |
689 | | - assert line is not None |
690 | | - return str(source), line |
| 689 | + return source, line |
691 | 690 |
|
692 | 691 | def set_source_info(self, node: Node, lineno: int | None = None) -> None: |
693 | 692 | # .. versionadded:: 2.0 |
694 | | - node.source, node.line = self.get_source_info(lineno) |
| 693 | + source, line = self.get_source_info(lineno) |
| 694 | + node.source = str(source) if source is not None else None |
| 695 | + node.line = line |
695 | 696 |
|
696 | 697 | def get_location(self) -> str: |
697 | 698 | """Get current location info for logging. |
@@ -879,6 +880,8 @@ def _parse_str_to_doctree( |
879 | 880 | transformer.add_transforms(_READER_TRANSFORMS) |
880 | 881 | transformer.add_transforms(transforms) |
881 | 882 | transformer.add_transforms(parser.get_transforms()) |
| 883 | + # https://github.com/sphinx-doc/sphinx/issues/13713 |
| 884 | + transformer.components['writer'] = _DummyWriter() # type: ignore[index] |
882 | 885 |
|
883 | 886 | if default_role: |
884 | 887 | default_role_cm = rst.default_role(env.current_document.docname, default_role) |
@@ -927,6 +930,11 @@ def _get_settings( |
927 | 930 | return settings |
928 | 931 |
|
929 | 932 |
|
| 933 | +class _DummyWriter(docutils.writers.Writer): # type: ignore[type-arg] |
| 934 | + # compat for MyST-Parser |
| 935 | + supported = ('html',) |
| 936 | + |
| 937 | + |
930 | 938 | if docutils.__version_info__[:2] < (0, 22): |
931 | 939 | from docutils.parsers.rst import roles |
932 | 940 |
|
|
0 commit comments