Top Related Projects
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
Official repository for the Microsoft C/C++ extension for VS Code.
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more
C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
Mirror of CMake upstream repository
A set of Swift libraries for parsing, inspecting, generating, and transforming Swift source code.
Quick Overview
Clangd is a language server that provides intelligent code completion, diagnostics, and other language-related features for C and C++ projects. It is built on top of the Clang compiler infrastructure and integrates with various editors and IDEs to enhance the development experience for C/C++ programmers.
Pros
- Provides accurate and context-aware code completion, improving developer productivity
- Offers real-time diagnostics and error checking, helping to catch issues early in the development process
- Supports cross-references and navigation features, making it easier to explore and understand large codebases
- Integrates well with popular editors and IDEs through the Language Server Protocol (LSP)
Cons
- Can be resource-intensive, especially for large projects
- Initial setup and configuration may be challenging for some users
- May have occasional inconsistencies or limitations compared to full compiler analysis
- Requires a compilation database or compile_commands.json file for optimal functionality
Getting Started
To use Clangd with Visual Studio Code:
- Install the "clangd" extension from the VS Code marketplace
- Install Clangd on your system (e.g., using a package manager or building from source)
- Create a
compile_commands.json
file in your project root (or use a build system that generates one) - Open a C/C++ file in VS Code, and Clangd should start providing language features automatically
For other editors, consult their documentation for Language Server Protocol integration with Clangd.
Competitor Comparisons
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
Pros of llvm-project
- Comprehensive suite of compiler and toolchain technologies
- Broader scope, including multiple programming languages and architectures
- Larger community and more frequent updates
Cons of llvm-project
- More complex and potentially overwhelming for newcomers
- Requires more resources to build and maintain
- May include unnecessary components for those focused solely on C/C++ development
Code Comparison
llvm-project (LLVM IR example):
define i32 @add(i32 %a, i32 %b) {
%result = add i32 %a, %b
ret i32 %result
}
clangd (JSON configuration example):
{
"CompileFlags": {
"Add": ["-std=c++17", "-Wall"]
}
}
Summary
llvm-project is a more extensive project encompassing various compiler technologies, while clangd focuses specifically on providing IDE-like features for C/C++ development. llvm-project offers a broader range of tools and supports multiple languages, but it comes with increased complexity. clangd, being more specialized, provides a simpler setup for C/C++ developers seeking intelligent code completion and analysis.
Official repository for the Microsoft C/C++ extension for VS Code.
Pros of vscode-cpptools
- More comprehensive C/C++ development features, including debugging and build task integration
- Better integration with Visual Studio Code's ecosystem and UI
- Supports a wider range of compilers and platforms
Cons of vscode-cpptools
- Heavier resource usage compared to clangd
- Configuration can be more complex, especially for non-standard projects
- May have slower indexing and code completion in large codebases
Code comparison
vscode-cpptools (launch.json):
{
"version": "0.2.0",
"configurations": [
{
"name": "Debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.out"
}
]
}
clangd (compile_commands.json):
[
{
"directory": "/path/to/project",
"command": "clang++ -std=c++17 main.cpp",
"file": "main.cpp"
}
]
The code examples show the different configuration approaches: vscode-cpptools uses a launch configuration for debugging, while clangd relies on a compilation database for project-wide analysis.
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more
Pros of cquery
- Faster indexing and query response times for large codebases
- Lower memory usage, especially for projects with many files
- More customizable and configurable for specific project needs
Cons of cquery
- Less actively maintained compared to clangd
- May have fewer features and language support options
- Potentially less stable or reliable for newer C++ standards
Code Comparison
cquery:
void IndexFile::serialize(Writer& writer) const {
writer.StartObject();
writer.Key("includes");
writer.StartArray();
for (const auto& include : includes)
include.serialize(writer);
writer.EndArray();
// ...
}
clangd:
void IndexFileOut::serialize(llvm::json::OStream &OS) const {
OS.object([&] {
OS.attributeArray("includes", [&] {
for (const auto &Include : Includes)
Include.serialize(OS);
});
// ...
});
}
Both projects use similar serialization approaches, but clangd leverages LLVM's JSON library for a more concise implementation. cquery's code is more verbose but potentially offers finer control over the serialization process.
C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
Pros of ccls
- Faster indexing and lower memory usage for large projects
- Better support for C++ templates and complex code structures
- More customizable configuration options
Cons of ccls
- Less frequent updates and maintenance compared to clangd
- Smaller community and fewer resources for support
- May require more manual configuration for optimal performance
Code Comparison
ccls configuration example:
{
"index": {
"threads": 4,
"comments": 2,
"multiVersion": 0
}
}
clangd configuration example:
CompileFlags:
Add: [-std=c++17, -Wall]
Remove: -W*
Index:
Background: Build
Both projects aim to provide language server capabilities for C/C++/Objective-C, but they have different approaches and trade-offs. ccls tends to offer better performance for large codebases and more advanced C++ features, while clangd benefits from being part of the LLVM project with more frequent updates and broader community support. The choice between the two often depends on specific project requirements and personal preferences.
Mirror of CMake upstream repository
Pros of CMake
- Widely adopted build system generator with cross-platform support
- Extensive documentation and large community
- Flexible and powerful scripting language for complex build configurations
Cons of CMake
- Steeper learning curve compared to Clangd
- Can be verbose and require more boilerplate code
- Less focused on code completion and IDE integration
Code Comparison
CMake example:
cmake_minimum_required(VERSION 3.10)
project(MyProject)
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE MyLibrary)
Clangd example (compile_commands.json):
[
{
"directory": "/path/to/project",
"command": "clang++ -std=c++17 -c main.cpp -o main.o",
"file": "main.cpp"
}
]
CMake is a build system generator that creates platform-specific build files, while Clangd is a language server providing IDE-like features for C/C++ development. CMake offers more flexibility in defining complex build processes, but Clangd excels in providing real-time code analysis and completion. The code examples show CMake's project configuration approach versus Clangd's compilation database format, highlighting their different focuses in the development workflow.
A set of Swift libraries for parsing, inspecting, generating, and transforming Swift source code.
Pros of swift-syntax
- Specifically designed for Swift language parsing and manipulation
- Provides a more intuitive API for working with Swift code structures
- Offers better performance for Swift-specific tasks
Cons of swift-syntax
- Limited to Swift language, unlike clangd's multi-language support
- Smaller community and fewer resources compared to clangd
- Less mature and potentially less stable than clangd
Code Comparison
swift-syntax:
import SwiftSyntax
let sourceFile = try SyntaxParser.parse(source: "let x = 5")
let variable = sourceFile.statements.first?.item.as(VariableDeclSyntax.self)
print(variable?.bindings.first?.pattern)
clangd:
#include "clang/AST/ASTConsumer.h"
#include "clang/Frontend/CompilerInstance.h"
class MyASTConsumer : public clang::ASTConsumer {
void HandleTranslationUnit(clang::ASTContext &Context) override {
// Process the AST here
}
};
Summary
swift-syntax is tailored for Swift development, offering a more specialized and potentially more efficient solution for Swift-specific tasks. However, clangd provides broader language support and a more established ecosystem. The choice between the two depends on the specific project requirements and the primary programming language used.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
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 in this repository: 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
Top Related Projects
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
Official repository for the Microsoft C/C++ extension for VS Code.
C/C++ language server supporting multi-million line code base, powered by libclang. Emacs, Vim, VSCode, and others with language server protocol support. Cross references, completion, diagnostics, semantic highlighting and more
C/C++/ObjC language server supporting cross references, hierarchies, completion and semantic highlighting
Mirror of CMake upstream repository
A set of Swift libraries for parsing, inspecting, generating, and transforming Swift source code.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot