Giter Club home page Giter Club logo

vscode-clangd's Introduction

clangd

Provides C/C++ language IDE features for VS Code using clangd:

  • code completion
  • compile errors and warnings
  • go-to-definition and cross references
  • include management
  • code formatting
  • simple refactorings

Setup

clangd server

clangd is a language server that must be installed separately, see getting started. The extension will look for clangd on your PATH (you can change this in the settings).

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. by setting -DCMAKE_EXPORT_COMPILE_COMMANDS=1 when building with CMake, or with many other tools).

It should live at the top of your source tree: symlink or copy it there.

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.

Include management

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

clangd can also suggest inserting missing #includes, where they cause errors.

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 .clang-format file 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:

  • extract variable/function
  • expand auto types and macros
  • use raw strings
  • rename (bound to <F2>, rather than a contextual code action)

Bugs/contributing

clangd is part of the LLVM project.

If you'd like to help out, reach out to [email protected].

If you've found a bug, please file at https://github.com/clangd/clangd/issues.

vscode-clangd's People

Contributors

d0k avatar highcommander4 avatar hokein avatar ilya-biryukov avatar jvikstrom avatar kadircet avatar kirillbobyrev avatar kiszk avatar krasimirgg avatar markz3 avatar sam-mccall avatar trxcllnt avatar zmodem avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.