-
Notifications
You must be signed in to change notification settings - Fork 163
FAQ
There are at least three sets of implicit include paths. They take effect without your -I option in .cquery or compile_commands.json
// a.cc
// system C header, usually in /usr/include
#include <stdio.h>
// system C++ header. The location varies among distributions, e.g. /usr/include/c++/{6,7.2.1}
#include <new>
// In Clang resource directory
#include <stddef.h>Put a.cc in some directory with echo clang++ > .cquery. Open the file, you should be able to jump to stdio.h new stddef.h when you trigger textDocument/definition on the include lines.
system C/C++ headers can be detected reliably. For Clang resource directory, there is logic in wscript to detect it when you run ./waf configure [OPTIONS]
- For
--bundled-clang=5.0.1:../lib/clang+llvm-5.0.1-x86_64-linux-gnu-ubuntu-14.04/lib/clang/5.0.1which is relative to thebuild/release/bin/cqueryexecutable. The relative path ofbuild/release/bin/cqueryandbuild/release/lib/cannot change, otherwise libclang.so used by cquery cannot find the Clang resource directory. - For
--use-system-clang: it is recognized from-resource-diroption in the output ofclang++ '-###' -xc /dev/null)
./waf configure --prefix /tmp/opt && ./waf installIf you want the cquery binary at a specific location use a symlink - do not move the binary itself.
textDocument/definition can be used in many places. Some are current implementation details and may subject to change.
-
void foo();A declaration jumps to the definition -
void foo() {}The definition lists all declarations -
A a;For variables of custom types, besides declarations of the variable, both the type and the variable jump to the declaration/definition of its typeA -
class C {jumps to declarations (and constructors/destructors) -
a.fieldjumps to the member in the struct declaration -
#include <map>jumps to the header -
std::string a = "a";takes you to the constructor. Many implicit constructors can also be jumped in this way. -
a == boperator==for user defined operators -
namespace ns {find original or extension namespaces -
// ns::fooin comments, it recognizes the identifier around the cursor, approximately finds the best matching symbol and jumps to it; onns, it jumps to the namespace
-
#include <iostream>lists all#includelines in the project pointing to the included file -
[](){}lists all(?) lambda expressions thanks to implicitstd::functionmove constructor -
extern int a;IfReferenceContext.includeDeclarationis true, the definition and declarations are also listed.
-
struct A:B{void f()override;};listsBorB::f()
-
struct B{virtual void f();};derived classes or virtual function overrides
-
A a;lists all instances of user-definedA. -
int i;lists all instances ofint.
Recursively list members of a record type. 😂 nobody has implemented UI for the feature. Help wanted!