Fix trailing text in doctest-syntax plot_directive. #20109
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The problem was that an input like
would get split to
and
and that unescape_doctest would then believe that
The end.
is alreadypython code (as it doesn't contain a
>>>
) and try to run it as is.To fix this, instead of repeatedly calling
contains_doctest
everywhereto guess whether fragments are doctest or python, just do it once at the
beginning, do the escaping once if needed at the beginning and then call
the new _functions (
_split_code_at_show
,_run_code
) which don't try toguess anymore. Because of the new (non-guessing) semantics these must
go to new functions, so let's make them private and just deprecate the old
(public) ones.
The escaping itself was done by
unescape_doctest
, but that had aseparate bug misparsing
the last line would get incorrectly misparsed as a line continuation,
despite the blank line in between. Instead of trying to fix that
ourselves, just use
doctest.script_from_examples
which exactly servesthat purpose.
Closes #11007.
Closes #19111.
PR Summary
PR Checklist
pytest
passes).flake8
on changed files to check).flake8-docstrings
and runflake8 --docstring-convention=all
).doc/users/next_whats_new/
(follow instructions in README.rst there).doc/api/next_api_changes/
(follow instructions in README.rst there).