Skip to content

Commit

Permalink
C++, fix parsing of full xrefs.
Browse files Browse the repository at this point in the history
  • Loading branch information
jakobandersen committed Mar 30, 2019
1 parent a99d749 commit 8854580
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 2 deletions.
2 changes: 2 additions & 0 deletions CHANGES
Expand Up @@ -56,6 +56,8 @@ Features added
Bugs fixed
----------

* #6208: C++, properly parse full xrefs that happen to have a short xref as prefix.

Testing
--------

Expand Down
4 changes: 2 additions & 2 deletions sphinx/domains/cpp.py
Expand Up @@ -6391,6 +6391,7 @@ def parse_xref_object(self):
# if there are '()' left, just skip them
self.skip_ws()
self.skip_string('()')
self.assert_end()
templatePrefix = self._check_template_consistency(name, templatePrefix,
fullSpecShorthand=True)
res1 = ASTNamespace(name, templatePrefix)
Expand All @@ -6403,6 +6404,7 @@ def parse_xref_object(self):
# if there are '()' left, just skip them
self.skip_ws()
self.skip_string('()')
self.assert_end()
return res2, False
except DefinitionError as e2:
errs = []
Expand Down Expand Up @@ -7145,7 +7147,6 @@ def warn(self, msg):
parser = DefinitionParser(target, warner, env.config)
try:
ast, isShorthand = parser.parse_xref_object()
parser.assert_end()
except DefinitionError as e:
def findWarning(e): # as arg to stop flake8 from complaining
if typ != 'any' and typ != 'func':
Expand All @@ -7154,7 +7155,6 @@ def findWarning(e): # as arg to stop flake8 from complaining
parser2 = DefinitionParser(target[:-2], warner, env.config)
try:
parser2.parse_xref_object()
parser2.assert_end()
except DefinitionError as e2:
return target[:-2], e2
# strange, that we don't get the error now, use the original
Expand Down
14 changes: 14 additions & 0 deletions tests/test_domain_cpp.py
Expand Up @@ -755,6 +755,20 @@ def test_attributes():
check('member', 'int *[[attr]] *i', {1: 'i__iPP', 2: '1i'})


def test_xref_parsing():
def check(target):
class Config:
cpp_id_attributes = ["id_attr"]
cpp_paren_attributes = ["paren_attr"]
parser = DefinitionParser(target, None, Config())
ast, isShorthand = parser.parse_xref_object()
parser.assert_end()
check('f')
check('f()')
check('void f()')
check('T f()')


# def test_print():
# # used for getting all the ids out for checking
# for a in ids:
Expand Down

0 comments on commit 8854580

Please sign in to comment.