[cfe-dev] Using clang-query on the whole project

Jacob Carlborg doob at me.com
Thu Jun 11 04:21:43 PDT 2015

On 2015-06-11 11:24, Kevin Funk wrote:
> Heya,
> I've found clang-query to be useful to query single files. Matching the Clang
> AST is easy enough and fast to learn. I don't see how to use clang-query on a
> whole project, though, which would be super useful.
> A simple example where it's effectively useless: Assume some header "global.h"
> containing "struct Global {};", every file in the project includes this header.
> Now the idiomatic way to run clang-query over all the files in the project:
>    clang-query -p $BUILD $(find . -name "*.cpp")
> Let's try to find record decls named "Global":
>    match recordDecl(hasName("Global"), isDefinition())
> => You get one match per file / translation unit. But in fact, this is not
> really what you want. You want one match here.
> So of course this is difficult: clang-query is TU-centric, while for a whole
> project you'd "somehow" want a global view over the source code and not have
> duplicate results for a query like above.
> Questions:
> - Is it possible to get clang-query to behave like that?
>    - Any research/pointers in that regard?
> - Is it possible to filter duplicates in the results without external tools?

In theory it should be easy to modify clang-query to check the location 
of a declaration and only return declarations for unique locations.

/Jacob Carlborg

More information about the cfe-dev mailing list