eclipse-cdt-cloud / vscode-clangd

Fork of the VS Code extension for clangd with added support for multiple projects
https://eclipse.dev/cdt-cloud
MIT License
0 stars 2 forks source link
clangd vscode-extension

clangd (Eclipse CDT Cloud Fork)

clangd helps developers write, understand and improve C/C++ code by providing:

Full documentation for clangd is at clangd.llvm.org.

Eclipse CDT Cloud Fork

A fork of the clangd-vscode extension that adds support to properly handle multiple projects in one workspace. To achieve this each project is managed by a dedicated clangd client/server. This ensures that all resources that are associated with one project are handled in an isolated context and keeps project indexes strictly separated from each other.

A central ProjectService is used to identify each project in an open workspace/folder base on a defined ProjectResolution strategy. Adopters can define custom resolution strategies tailored to their needs (configurable via settings) The project service also keeps track of the currently active project and exposes API to listen to project changes and/or manually change the active project.

The multi-project support is fully opt-in and can be deactivated. If deactivated this extension will behave like the upstream clangd-vscode extension.

Note that at the moment this project should be rather seen as a proof-of-concept implementation an is not (yet) a full-fledged replacement for vscode-clangd. The focus has been set on providing the core clangd LSP functionality. Customizations on top like the Type Hierarchy View, Memory Usage etc. haven been disabled for now and do not working in clangd-vscode-multi-project.

Releases

Setup

clangd server

The extension requires the clangd language server. You will be prompted to download it if it's not found on your PATH. (Automatic installation is possible on x86-64 Linux, Windows, and Mac).

If you have an old version of clangd installed on your system already, you can run "Check for clangd language server update" from the command palette.

Project setup

clangd is based on the clang C++ compiler, and understands even complex C++ code. However, you must tell clangd how your project is built (compile flags). A compile_commands.json file can usually be generated by your build system (e.g. with CMake, by setting -DCMAKE_EXPORT_COMPILE_COMMANDS=1).

See Project Setup in the clangd documentation for details and alternatives.

Features

Code completion

Suggestions will appear as you type names, or after . or ->. Because clangd uses a full C++ parser, code completion has access to precise type information.

Code completion

Errors, warnings, and clang-tidy

Code errors are shown as you type (both as red squiggle underlines, and in the "Problems" panel). These are the same as produced by the clang compiler, and suggested fixes can automatically be applied.

Error with fix

Most clang-tidy checks are supported (these can be enabled using a .clang-tidy file).

Cross-references

Go-to-definition and find-references work across your code, using a project-wide index.

Cross-reference list

Press Ctrl-P # to quickly navigate to a symbol by name.

Hover and inlay hints

Clangd can describe almost any entity if you hover the mouse (or press Ctrl-KI).

Hover and inlay hints

Inlay hints for parameters and deduced types can be shown temporarily or permanently (the editor.inlayHints.enabled setting controls this).

Include management

Code completion works across your codebase and adds #include directives where needed. The shows includes that will be inserted.

clangd can suggest inserting missing #includes, where they cause errors. It can warn on unused includes.

Fix inserts include

Formatting

clangd uses the clang-format engine. You can format a file or the selection. When "Format on Type" is enabled in the settings, pressing enter will cause clangd to format the old line and semantically reindent.

Format-on-type

The style used for formatting (and certain other operations) is controlled by the project's .clang-format file.

Refactoring

clangd supports some local refactorings. When you select an expression or declaration, the lightbulb menu appears and you can choose a code action.

Extract variable code action

Current refactorings include:

Bugs/contributing

clangd is part of the LLVM project.

If you'd like to help out, reach out to clangd-dev@lists.llvm.org.

If you've found a bug in this extension, please file it at https://github.com/clangd/vscode-clangd/issues. If you've found a bug in clangd, please file at https://github.com/clangd/clangd/issues.