Support extracting doxygen comments when declspec or attributes are present
This commit is contained in:
parent
079d643c67
commit
2ba5c3c829
@ -308,25 +308,34 @@ class CxxParser:
|
|||||||
";": lambda _1, _2: None,
|
";": lambda _1, _2: None,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_keep_doxygen = {"__declspec", "alignas", "__attribute__", "DBL_LBRACKET"}
|
||||||
|
|
||||||
tok = None
|
tok = None
|
||||||
|
|
||||||
get_token_eof_ok = self.lex.token_eof_ok
|
get_token_eof_ok = self.lex.token_eof_ok
|
||||||
get_doxygen = self.lex.get_doxygen
|
get_doxygen = self.lex.get_doxygen
|
||||||
|
|
||||||
|
doxygen = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
tok = get_token_eof_ok()
|
tok = get_token_eof_ok()
|
||||||
if not tok:
|
if not tok:
|
||||||
break
|
break
|
||||||
|
|
||||||
doxygen = get_doxygen()
|
if doxygen is None:
|
||||||
|
doxygen = get_doxygen()
|
||||||
|
|
||||||
fn = _translation_unit_tokens.get(tok.type)
|
fn = _translation_unit_tokens.get(tok.type)
|
||||||
if fn:
|
if fn:
|
||||||
fn(tok, doxygen)
|
fn(tok, doxygen)
|
||||||
|
|
||||||
|
if tok.type not in _keep_doxygen:
|
||||||
|
doxygen = None
|
||||||
else:
|
else:
|
||||||
# this processes ambiguous declarations
|
# this processes ambiguous declarations
|
||||||
self._parse_declarations(tok, doxygen)
|
self._parse_declarations(tok, doxygen)
|
||||||
|
doxygen = None
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
if self.verbose:
|
if self.verbose:
|
||||||
|
@ -329,3 +329,50 @@ def test_doxygen_namespace() -> None:
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_doxygen_declspec() -> None:
|
||||||
|
content = """
|
||||||
|
/// declspec comment
|
||||||
|
__declspec(thread) int i = 1;
|
||||||
|
"""
|
||||||
|
data = parse_string(content, cleandoc=True)
|
||||||
|
|
||||||
|
assert data == ParsedData(
|
||||||
|
namespace=NamespaceScope(
|
||||||
|
variables=[
|
||||||
|
Variable(
|
||||||
|
name=PQName(segments=[NameSpecifier(name="i")]),
|
||||||
|
type=Type(
|
||||||
|
typename=PQName(segments=[FundamentalSpecifier(name="int")])
|
||||||
|
),
|
||||||
|
value=Value(tokens=[Token(value="1")]),
|
||||||
|
doxygen="/// declspec comment",
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_doxygen_attribute() -> None:
|
||||||
|
content = """
|
||||||
|
/// hasattr comment
|
||||||
|
[[nodiscard]]
|
||||||
|
int hasattr();
|
||||||
|
"""
|
||||||
|
data = parse_string(content, cleandoc=True)
|
||||||
|
|
||||||
|
assert data == ParsedData(
|
||||||
|
namespace=NamespaceScope(
|
||||||
|
functions=[
|
||||||
|
Function(
|
||||||
|
return_type=Type(
|
||||||
|
typename=PQName(segments=[FundamentalSpecifier(name="int")])
|
||||||
|
),
|
||||||
|
name=PQName(segments=[NameSpecifier(name="hasattr")]),
|
||||||
|
parameters=[],
|
||||||
|
doxygen="/// hasattr comment",
|
||||||
|
)
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user