Building on the new TraverseOffsetOfNode hook in RecursiveASTVisitor and the OffsetOfNode DynTypedNode kind, teach SelectionTree, FindTarget, and the explicit-references collector to address each designator component individually. Cursor positions inside a nested designator (for example the 'B' in __builtin_offsetof(A, B.c)) now resolve to the corresponding field instead of always picking the innermost component. - SelectionTree: wrap each OffsetOfNode visit in traverseNode so it becomes a selectable node alongside its enclosing OffsetOfExpr. - FindTarget::allTargetDecls: resolve OffsetOfNode (Field kind) to its FieldDecl, and drop the OffsetOfExpr fallback so non-component selections do not guess a field target. - ExplicitReferenceCollector: emit one ReferenceLoc per component via a new VisitOffsetOfNode hook, replacing the manual component loop in refInStmt. Tests: - TargetDeclTest.OffsetOf: precise resolution for outer/inner/base/ identifier components, macro form, array index expressions, and non-component selections. - Hover.All and Hover.OffsetOfBuiltin: field cases for nested offsetof, and expression hover on the builtin token. - LocateSymbol.All: simple, outer, inner, macro, inherited-field, and builtin-token cases. - AllRefsInFoo: existing offsetof cases continue to pass via the new per-component VisitOffsetOfNode path. Context: https://github.com/llvm/llvm-project/pull/194122 https://github.com/llvm/llvm-project/pull/192953
clangd
clangd is a language server, and provides C++ IDE features to editors. This is not its documentation.
- the website is https://clangd.llvm.org/.
- the bug tracker is https://github.com/clangd/clangd/issues
- the source code is hosted at https://github.com/llvm/llvm-project/tree/main/clang-tools-extra/clangd.
- the website source code is at https://github.com/llvm/clangd-www/
Communication channels
If you have any questions or feedback, you can reach community and developers through one of these channels:
- chat: #clangd room hosted on LLVM's Discord channel.
- user questions and feature requests can be asked in the clangd topic on LLVM Discussion Forums
Building and testing clangd
For a minimal setup on building clangd:
-
Clone the LLVM repo to
$LLVM_ROOT. -
Create a build directory, for example at
$LLVM_ROOT/build. -
Inside the build directory run:
cmake $LLVM_ROOT/llvm/ -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra".- We suggest building in
Releasemode as building DEBUG binaries requires considerably more resources. You can check Building LLVM with CMake documentation for more details about cmake flags. - In addition to that using
Ninjaas a generator rather than defaultmakeis preferred. To do that consider passing-G Ninjato cmake invocation. - Finally, you can turn on assertions via
-DLLVM_ENABLE_ASSERTS=On.
- We suggest building in
-
Afterwards you can build clangd with
cmake --build $LLVM_ROOT/build --target clangd, similarly run tests by changing target tocheck-clangd.