markdown-it-py icon indicating copy to clipboard operation
markdown-it-py copied to clipboard

Traceback when ending file with list and two empty lines

Open Griatch opened this issue 3 years ago • 1 comments

Describe the problem

Building a markdown file that ends with a bullet (or numbered) list and two (or more) spaces leads to a traceback:

- foo 
- bar 


The result is a traceback with no clear info on what is wrong. Just leaving two spaces in the middle of the document, or leaving only a single space works correctly.

Link to your repository or website

No response

Steps to reproduce

  • Run sphinx + MyST-Parser on file with above structure.
  • Traceback.

The version of Python you're using

3.9

Your operating system

Linux

Versions of your packages

No response

Additional context

Relevant parts of traceback:

# Sphinx version: 3.2.1
# Python version: 3.9.6 (CPython)
# Docutils version: 0.17.1 release
# Jinja2 version: 3.0.0
# [...]
# Loaded extensions:
#   sphinx.ext.mathjax (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/mathjax.py
#   sphinxcontrib.applehelp (1.0.2) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinxcontrib/applehelp/__init__.py
#   sphinxcontrib.devhelp (1.0.2) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinxcontrib/devhelp/__init__.py
#   sphinxcontrib.htmlhelp (1.0.3) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinxcontrib/htmlhelp/__init__.py
#   sphinxcontrib.serializinghtml (1.1.4) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinxcontrib/serializinghtml/__init__.py
#   sphinxcontrib.qthelp (1.0.3) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinxcontrib/qthelp/__init__.py
#   alabaster (0.7.12) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/alabaster/__init__.py
#   sphinx_multiversion (0.2) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx_multiversion/__init__.py
#   sphinx.ext.autodoc.type_comment (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/autodoc/type_comment.py
#   sphinx.ext.autodoc (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/autodoc/__init__.py
#   sphinx.ext.napoleon (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/napoleon/__init__.py
#   sphinx.ext.viewcode (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/viewcode.py
#   sphinx.ext.todo (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/todo.py
#   sphinx.ext.githubpages (3.2.1) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/ext/githubpages.py
#   myst_parser (0.15.2) from /home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/myst_parser/__init__.py
Traceback (most recent call last):
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/cmd/build.py", line 280, in build_main
    app.build(args.force_all, filenames)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/application.py", line 348, in build
    self.builder.build_update()
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 297, in build_update
    self.build(to_build,
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 311, in build
    updated_docnames = set(self.read())
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 418, in read
    self._read_serial(docnames)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 439, in _read_serial
    self.read_doc(docname)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/builders/__init__.py", line 479, in read_doc
    doctree = read_doc(self.app, self.env, self.env.doc2path(docname))
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/io.py", line 223, in read_doc
    pub.publish()
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/docutils/core.py", line 217, in publish
    self.document = self.reader.read(self.source, self.parser,
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/sphinx/io.py", line 128, in read
    self.parse()
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/myst_parser/sphinx_parser.py", line 56, in parse
    tokens = parser.parse(inputstring, env)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/main.py", line 260, in parse
    self.core.process(state)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/parser_core.py", line 33, in process
    rule(state)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/rules_core/block.py", line 14, in block
    state.md.block.parse(
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/parser_block.py", line 107, in parse
    self.tokenize(state, state.line, state.lineMax)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/parser_block.py", line 77, in tokenize
    if rule(state, line, endLine, False):
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/rules_block/list.py", line 272, in list_block
    prevEmptyEnd = (state.line - startLine) > 1 and state.isEmpty(state.line - 1)
  File "/home/griatch/Devel/Home/evennia/.vienv3.9/lib/python3.9/site-packages/markdown_it/rules_block/state_block.py", line 137, in isEmpty
    return (self.bMarks[line] + self.tShift[line]) >= self.eMarks[line]
IndexError: list index out of range

Griatch avatar Sep 29 '21 22:09 Griatch

Thanks for opening your first issue here! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out EBP's Code of Conduct. Also, please try to follow the issue template as it helps other community members to contribute more effectively.
If your issue is a feature request, others may react to it, to raise its prominence (see Feature Voting).
Welcome to the EBP community! :tada:

welcome[bot] avatar Sep 29 '21 22:09 welcome[bot]

thanks, I will move this over to markdown-it-py, where the bug originates

chrisjsewell avatar Sep 30 '21 21:09 chrisjsewell

Thanks for opening your first issue here! Engagement like this is essential for open source projects! :hugs:
If you haven't done so already, check out EBP's Code of Conduct. Also, please try to follow the issue template as it helps other community members to contribute more effectively.
If your issue is a feature request, others may react to it, to raise its prominence (see Feature Voting).
Welcome to the EBP community! :tada:

welcome[bot] avatar Sep 30 '21 21:09 welcome[bot]

I cannot reproduce this report:

eslerm@kin:~$ cat foo.md 
- foo 
- bar


eslerm@kin:~$ markdown-it foo.md 
<ul>
<li>foo</li>
<li>bar</li>
</ul>
eslerm@kin:~$ markdown-it -v
markdown-it-py [version 2.1.0]

eslerm avatar Feb 07 '23 18:02 eslerm

Me neither, so possibly just from an old version

chrisjsewell avatar Feb 22 '23 04:02 chrisjsewell