Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Some Sphinx roles in subcommand descriptions cause a crash #93

Open
akaihola opened this issue Apr 10, 2018 · 0 comments
Open

Some Sphinx roles in subcommand descriptions cause a crash #93

akaihola opened this issue Apr 10, 2018 · 0 comments

Comments

@akaihola
Copy link

It seems that most Sphinx roles, when used in the description of an argparse subcommand, cause sphinx-argparse to crash. The ones listed under "Other semantic markup" on the Roles Sphinx documentation page seems to work correctly, though.

Here is a minimal Sphinx project to reproduce this problem:

conf.py

extensions = ['sphinxarg.ext']

contents.rst

.. argparse::
   :module: sphinxtest
   :func: get_parser

sphinxtest.py

import argparse

def get_parser():
    parser = argparse.ArgumentParser()
    subparsers = parser.add_subparsers()
    subparsers.add_parser('subcmd', description=':file:`role` makes sphinx-argparse fail')
    return parser

Build command (full virtualenv paths omitted for brevity)

$ rm html -rf ; PYTHONPATH=. sphinx-build -v . html     
Running Sphinx v1.7.2
making output directory...
loading pickled environment... not yet created
building [mo]: targets for 0 po files that are out of date
building [html]: targets for 1 source files that are out of date
updating environment: 1 added, 0 changed, 0 removed
reading sources... [100%] contents

Traceback (most recent call last):
  File "docutils/statemachine.py", line 307, in next_line
    self.line = self.input_lines[self.line_offset]
  File "docutils/statemachine.py", line 1152, in __getitem__
    return self.data[i]
IndexError: list index out of range

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "docutils/statemachine.py", line 230, in run
    self.next_line()
  File "docutils/statemachine.py", line 310, in next_line
    raise EOFError
EOFError

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "sphinx/cmdline.py", line 304, in main
    app.build(args.force_all, filenames)
  File "sphinx/application.py", line 331, in build
    self.builder.build_update()
  File "sphinx/builders/__init__.py", line 338, in build_update
    'out of date' % len(to_build))
  File "sphinx/builders/__init__.py", line 351, in build
    updated_docnames = set(self.env.update(self.config, self.srcdir, self.doctreedir))
  File "sphinx/environment/__init__.py", line 565, in update
    self._read_serial(docnames, self.app)
  File "sphinx/environment/__init__.py", line 584, in _read_serial
    self.read_doc(docname, app)
  File "sphinx/environment/__init__.py", line 659, in read_doc
    doctree = read_doc(self.app, self, self.doc2path(docname))
  File "sphinx/io.py", line 294, in read_doc
    pub.publish()
  File "docutils/core.py", line 217, in publish
    self.settings)
  File "docutils/readers/__init__.py", line 72, in read
    self.parse()
  File "docutils/readers/__init__.py", line 78, in parse
    self.parser.parse(self.input, document)
  File "sphinx/parsers.py", line 85, in parse
    self.statemachine.run(inputstring, document, inliner=self.inliner)
  File "docutils/parsers/rst/states.py", line 171, in run
    input_source=document['source'])
  File "docutils/statemachine.py", line 239, in run
    context, state, transitions)
  File "docutils/statemachine.py", line 460, in check_line
    return method(match, context, next_state)
  File "docutils/parsers/rst/states.py", line 2326, in explicit_markup
    nodelist, blank_finish = self.explicit_construct(match)
  File "docutils/parsers/rst/states.py", line 2338, in explicit_construct
    return method(self, expmatch)
  File "docutils/parsers/rst/states.py", line 2081, in directive
    directive_class, match, type_name, option_presets)
  File "docutils/parsers/rst/states.py", line 2130, in run_directive
    result = directive_instance.run()
  File "sphinxarg/ext.py", line 486, in run
    settings=self.state.document.settings))
  File "sphinxarg/ext.py", line 192, in print_subcommands
    for element in renderList(desc, markDownHelp):
  File "sphinxarg/ext.py", line 66, in renderList
    Parser().parse('\n\n'.join(l) + '\n', document)
  File "docutils/parsers/rst/__init__.py", line 191, in parse
    self.statemachine.run(inputlines, document, inliner=self.inliner)
  File "docutils/parsers/rst/states.py", line 171, in run
    input_source=document['source'])
  File "docutils/statemachine.py", line 245, in run
    result = state.eof(context)
  File "docutils/parsers/rst/states.py", line 2696, in eof
    self.blank(None, context, None)
  File "docutils/parsers/rst/states.py", line 2688, in blank
    context, self.state_machine.abs_line_number() - 1)
  File "docutils/parsers/rst/states.py", line 418, in paragraph
    textnodes, messages = self.inline_text(text, lineno)
  File "docutils/parsers/rst/states.py", line 427, in inline_text
    return self.inliner.parse(text, lineno, self.memo, self.parent)
  File "docutils/parsers/rst/states.py", line 645, in parse
    lineno)
  File "docutils/parsers/rst/states.py", line 787, in interpreted_or_phrase_ref
    lineno)
  File "docutils/parsers/rst/states.py", line 871, in interpreted
    nodes, messages2 = role_fn(role, rawsource, text, lineno, self)
  File "sphinx/roles.py", line 292, in emph_literal_role
    env = inliner.document.settings.env
AttributeError: 'Values' object has no attribute 'env'

Exception occurred:
  File "sphinx/roles.py", line 292, in emph_literal_role
    env = inliner.document.settings.env
AttributeError: 'Values' object has no attribute 'env'
The full traceback has been saved in /tmp/sphinx-err-kdcf92c8.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
A bug report can be filed in the tracker at <https://github.com/sphinx-doc/sphinx/issues>. Thanks!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant