Simple API
The simple parser/collector iterates over the C++ file and returns a data structure with all elements in it. Not quite as flexible as implementing your own parser listener, but you can accomplish most things with it.
cxxheaderparser’s unit tests predominantly use the simple API for parsing, so you can expect it to be pretty stable.
The parse_string() and parse_file() functions are a great place
to start:
from cxxheaderparser.simple import parse_string
content = '''
int x;
'''
parsed_data = parse_string(content)
See below for the contents of the returned ParsedData.
Looking up declarations
Use get_declaration() to retrieve a parsed object by its qualified name:
from cxxheaderparser.simple import get_declaration, parse_string
data = parse_string('''
namespace name {
/** A counter. */
struct Bar {
/** Current count. */
int count();
};
}
''')
print(get_declaration(data, "name::Bar::count").doxygen)
print(get_declaration(data, "name::Bar").class_decl.doxygen)
Classes return ClassScope, so their documentation is on
class_decl.doxygen. Invalid or missing names raise KeyError;
multiple matches (including overloads) raise AmbiguousNameError.
Lookup does not follow inheritance, aliases, or using declarations.
Names are parsed with parse_name(), which returns a
PQName and supports templates and operators
without parameter lists. Use parse_typename() for type-ids such as
const C* instead.
API reference
- exception cxxheaderparser.simple.AmbiguousNameError
Raised by
get_declaration()when multiple declarations match a name.
- class cxxheaderparser.simple.ClassScope(class_decl, classes=<factory>, enums=<factory>, fields=<factory>, friends=<factory>, methods=<factory>, typedefs=<factory>, forward_decls=<factory>, using=<factory>, using_alias=<factory>)
Contains all data collected for a single C++ class
- Parameters:
class_decl (
ClassDecl)classes (
List[ClassScope])enums (
List[EnumDecl])fields (
List[Field])friends (
List[FriendDecl])methods (
List[Method])typedefs (
List[Typedef])forward_decls (
List[ForwardDecl])using (
List[UsingDecl])using_alias (
List[UsingAlias])
- classes: List[ClassScope]
Nested classes
- forward_decls: List[ForwardDecl]
- friends: List[FriendDecl]
- using_alias: List[UsingAlias]
- class cxxheaderparser.simple.Include(filename)
- Parameters:
filename (
str)
- filename: str
The filename includes the surrounding
<>or"
- class cxxheaderparser.simple.NamespaceScope(name='', inline=False, doxygen=None, classes=<factory>, enums=<factory>, functions=<factory>, method_impls=<factory>, typedefs=<factory>, variables=<factory>, forward_decls=<factory>, using=<factory>, using_ns=<factory>, using_alias=<factory>, ns_alias=<factory>, concepts=<factory>, template_insts=<factory>, namespaces=<factory>, deduction_guides=<factory>)
Contains all data collected for a single namespace. Content for child namespaces are found in the
namespacesattribute.- Parameters:
name (
str)inline (
bool)doxygen (
Optional[str])classes (
List[ClassScope])enums (
List[EnumDecl])functions (
List[Function])method_impls (
List[Method])typedefs (
List[Typedef])variables (
List[Variable])forward_decls (
List[ForwardDecl])using (
List[UsingDecl])using_ns (
List[UsingNamespace])using_alias (
List[UsingAlias])ns_alias (
List[NamespaceAlias])concepts (
List[Concept])template_insts (
List[TemplateInst])namespaces (
Dict[str,NamespaceScope])deduction_guides (
List[DeductionGuide])
- classes: List[ClassScope]
- deduction_guides: List[DeductionGuide]
Deduction guides
- doxygen: str | None = None
- forward_decls: List[ForwardDecl]
- inline: bool = False
- name: str = ''
- namespaces: Dict[str, NamespaceScope]
Child namespaces
- ns_alias: List[NamespaceAlias]
- template_insts: List[TemplateInst]
Explicit template instantiations
- using_alias: List[UsingAlias]
- using_ns: List[UsingNamespace]
- class cxxheaderparser.simple.ParsedData(namespace=<factory>, pragmas=<factory>, includes=<factory>)
Container for information parsed by the
parse_file()andparse_string()functions.Warning
Names are not resolved, so items are stored in the scope that they are found. For example:
namespace N { class C; } class N::C { void fn(); };
The ‘C’ class would be a forward declaration in the ‘N’ namespace, but the ClassDecl for ‘C’ would be stored in the global namespace instead of the ‘N’ namespace.
- Parameters:
namespace (
NamespaceScope)pragmas (
List[Pragma])includes (
List[Include])
- namespace: NamespaceScope
Global namespace
- class cxxheaderparser.simple.SimpleCxxVisitor
A simple visitor that stores all of the C++ elements passed to it in an “easy” to use data structure
You probably don’t want to use this directly, use
parse_file()orparse_string()instead.- data: ParsedData
- on_class_end(state)
- Parameters:
state (
ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]])- Return type:
None
- on_class_field(state, f)
- Parameters:
state (
ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]])f (
Field)
- Return type:
None
- on_class_friend(state, friend)
- Parameters:
state (
ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]])friend (
FriendDecl)
- Return type:
None
- on_class_method(state, method)
- Parameters:
state (
ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]])method (
Method)
- Return type:
None
- on_class_start(state)
- Parameters:
state (
ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]])- Return type:
Optional[bool]
- on_concept(state, concept)
- Parameters:
state (
Union[ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])concept (
Concept)
- Return type:
None
- on_deduction_guide(state, guide)
- Parameters:
state (
Union[ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])guide (
DeductionGuide)
- Return type:
None
- on_enum(state, enum)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])enum (
EnumDecl)
- Return type:
None
- on_extern_block_end(state)
- Parameters:
state (
ExternBlockState[NamespaceScope,NamespaceScope])- Return type:
None
- on_extern_block_start(state)
- Parameters:
state (
ExternBlockState[NamespaceScope,NamespaceScope])- Return type:
Optional[bool]
- on_forward_decl(state, fdecl)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])fdecl (
ForwardDecl)
- Return type:
None
- on_function(state, fn)
- Parameters:
state (
Union[ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])fn (
Function)
- Return type:
None
- on_include(state, filename)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])filename (
str)
- Return type:
None
- on_method_impl(state, method)
- Parameters:
state (
Union[ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])method (
Method)
- Return type:
None
- on_namespace_alias(state, alias)
- Parameters:
state (
Union[ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])alias (
NamespaceAlias)
- Return type:
None
- on_namespace_end(state)
- Parameters:
state (
NamespaceBlockState[NamespaceScope,NamespaceScope])- Return type:
None
- on_namespace_start(state)
- Parameters:
state (
NamespaceBlockState[NamespaceScope,NamespaceScope])- Return type:
Optional[bool]
- on_parse_start(state)
- Parameters:
state (
NamespaceBlockState[NamespaceScope,NamespaceScope])- Return type:
None
- on_pragma(state, content)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])content (
Value)
- Return type:
None
- on_template_inst(state, inst)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])inst (
TemplateInst)
- Return type:
None
- on_typedef(state, typedef)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])typedef (
Typedef)
- Return type:
None
- on_using_alias(state, using)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])using (
UsingAlias)
- Return type:
None
- on_using_declaration(state, using)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])using (
UsingDecl)
- Return type:
None
- on_using_namespace(state, namespace)
- Parameters:
state (
Union[ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])namespace (
List[str])
- Return type:
None
- on_variable(state, v)
- Parameters:
state (
Union[ClassBlockState[ClassScope,Union[ClassScope,NamespaceScope]],ExternBlockState[NamespaceScope,NamespaceScope],NamespaceBlockState[NamespaceScope,NamespaceScope]])v (
Variable)
- Return type:
None
- cxxheaderparser.simple.get_declaration(data, qualified_name)
Find a named declaration in parsed data.
Names are relative to the global namespace; a leading
::is optional. Returns the original object, includingClassScopefor classes andNamespaceScopefor namespaces. Enum values are addressed asEnum::value. Names are parsed withparse_name()and compared structurally, allowing whitespace in qualified names and template arguments. Operator names are supported, including conversions such asC::operator boolorC::operator const int*.This is declaration lookup, not C++ semantic name resolution: inheritance, using-directives/declarations, alias targets, and inline/anonymous namespace injection are not followed. Anonymous declarations, friends, deduction guides, and explicit template instantiations are not searched. Qualified declarations are matched even when stored outside their named scope.
- Raises:
KeyError – The name is invalid or no declaration matches.
AmbiguousNameError – Multiple declarations match. Overloads, repeated declarations, and forward declarations are not merged.
- Parameters:
data (
ParsedData)qualified_name (
str)
- Return type:
Union[NamespaceScope,ClassScope,EnumDecl,Enumerator,Function,Field,Typedef,Variable,ForwardDecl,UsingAlias,NamespaceAlias,Concept]
- cxxheaderparser.simple.parse_file(filename, encoding=None, *, options=None)
Simple function to parse a header from a file and return a data structure
- Parameters:
filename (
Union[str,PathLike])encoding (
Optional[str])options (
Optional[ParserOptions])
- Return type:
- cxxheaderparser.simple.parse_name(name, *, filename='<str>', options=None)
Parse a qualified declaration name, returning a
PQName.Supports template arguments, constructors, destructors, and operator names without parameter lists. Conversion operators use a final NameSpecifier containing
operatorfollowed by a space and the formatted target type.Unlike
parse_typename(), this parses names rather than type-ids:C::operator boolis a name, whereasconst C*is a type-id.- Raises:
CxxParseError – The input is not a supported declaration name.
- Parameters:
name (
str)filename (
str)options (
Optional[ParserOptions])
- Return type:
- cxxheaderparser.simple.parse_string(content, *, filename='<str>', options=None, cleandoc=False)
Simple function to parse a header and return a data structure
- Parameters:
content (
str)filename (
str)options (
Optional[ParserOptions])cleandoc (
bool)
- Return type:
- cxxheaderparser.simple.parse_typename(typename, *, filename='<str>', options=None)
Parse a C++ type name and return a TypeId.
- Parameters:
typename (
str)filename (
str)options (
Optional[ParserOptions])
- Return type:
Union[Array,MemberPointer,Pointer,MoveReference,Reference,Type,FunctionType]
- class cxxheaderparser.options.ParserOptions(verbose=False, convert_void_to_zero_params=True, preprocessor=None)
Options that control parsing behaviors
- Parameters:
verbose (
bool)convert_void_to_zero_params (
bool)preprocessor (
Optional[Callable[[str,Optional[str]],str]])
- convert_void_to_zero_params: bool = True
If true, converts a single void parameter to zero parameters
- preprocessor: Callable[[str, str | None], str] | None = None
A function that will preprocess the header before parsing. See
cxxheaderparser.preprocessorfor available preprocessors
- verbose: bool = False
If true, prints out
- cxxheaderparser.options.PreprocessorFunction
arguments are (filename, content)
alias of
Callable[[str,str|None],str]