[cfe-users] libclang: Spelling on typedefs lacks namespaces

Michael via cfe-users cfe-users at lists.llvm.org
Tue Aug 30 10:00:43 PDT 2016


Hi

Hope I picked the right place for this kind of problem, if not please 
let me know.

I'm using libclang to parse header files and generate code from them. I 
found that clang_getTypeSpelling() usually includes the namespace(s) a 
type was declared in. However with the exception being typedefs (and 
same for "using A = B"). Not sure if this is a bug or intended behavior, 
but it seems at least inconsistent. I also couldn't really find a good 
workaround for this. I'd have to manually figure out all typedefs (not 
just pure typedefs, they could also be template parameters or whatever) 
and then their originating namespaces. This sounds a bit cumbersome and 
not really straight forward.

Minimal example:

namespace foo {
class Bar {
};
typedef Bar BarDef;
}

clang_getTypeSpelling on "Bar" (kind "Record") gives: "foo::Bar"
clang_getTypeSpelling on "BarDef" (kind "Typedef") gives: "BarDef" (<== 
missing "foo::")

Any idea how to solve this problem? Am I missing something?

Thanks

Michael



More information about the cfe-users mailing list