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,
|
||||
}
|
||||
|
||||
_keep_doxygen = {"__declspec", "alignas", "__attribute__", "DBL_LBRACKET"}
|
||||
|
||||
tok = None
|
||||
|
||||
get_token_eof_ok = self.lex.token_eof_ok
|
||||
get_doxygen = self.lex.get_doxygen
|
||||
|
||||
doxygen = None
|
||||
|
||||
try:
|
||||
while True:
|
||||
tok = get_token_eof_ok()
|
||||
if not tok:
|
||||
break
|
||||
|
||||
doxygen = get_doxygen()
|
||||
if doxygen is None:
|
||||
doxygen = get_doxygen()
|
||||
|
||||
fn = _translation_unit_tokens.get(tok.type)
|
||||
if fn:
|
||||
fn(tok, doxygen)
|
||||
|
||||
if tok.type not in _keep_doxygen:
|
||||
doxygen = None
|
||||
else:
|
||||
# this processes ambiguous declarations
|
||||
self._parse_declarations(tok, doxygen)
|
||||
doxygen = None
|
||||
|
||||
except Exception as e:
|
||||
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