clang-tools 22.0.0git
clang::clangd::config::Fragment::CompileFlagsBlock Struct Reference

Conditions in the CompileFlags block affect how a file is parsed. More...

#include <ConfigFragment.h>

Public Attributes

std::optional< Located< std::string > > Compiler
 Override the compiler executable name to simulate.
std::vector< Located< std::string > > Add
 List of flags to append to the compile command.
std::vector< Located< std::string > > Remove
 List of flags to remove from the compile command.
std::optional< Located< std::string > > CompilationDatabase
 Directory to search for compilation database (compile_commands.json etc).
std::optional< Located< std::string > > BuiltinHeaders
 Controls whether Clangd should use its own built-in system headers (like stddef.h), or use the system headers from the query driver.

Detailed Description

Conditions in the CompileFlags block affect how a file is parsed.

clangd emulates how clang would interpret a file. By default, it behaves roughly like clang $FILENAME, but real projects usually require setting the include path (with the -I flag), defining preprocessor symbols, configuring warnings etc. Often, a compilation database specifies these compile commands. clangd searches for compile_commands.json in parents of the source file.

This section modifies how the compile command is constructed.

Definition at line 135 of file ConfigFragment.h.

Member Data Documentation

◆ Add

std::vector<Located<std::string> > clang::clangd::config::Fragment::CompileFlagsBlock::Add

List of flags to append to the compile command.

Definition at line 147 of file ConfigFragment.h.

◆ BuiltinHeaders

std::optional<Located<std::string> > clang::clangd::config::Fragment::CompileFlagsBlock::BuiltinHeaders

Controls whether Clangd should use its own built-in system headers (like stddef.h), or use the system headers from the query driver.

Use the option value 'Clangd' (default) to indicate Clangd's headers, and use 'QueryDriver' to indicate QueryDriver's headers. Clangd is the fallback if no query driver is supplied or if the query driver regex string fails to match the compiler used in the CDB.

Definition at line 180 of file ConfigFragment.h.

◆ CompilationDatabase

std::optional<Located<std::string> > clang::clangd::config::Fragment::CompileFlagsBlock::CompilationDatabase

Directory to search for compilation database (compile_commands.json etc).

Valid values are:

  • A single path to a directory (absolute, or relative to the fragment)
  • Ancestors: search all parent directories (the default)
  • std::nullopt: do not use a compilation database, just default flags.

Definition at line 172 of file ConfigFragment.h.

◆ Compiler

std::optional<Located<std::string> > clang::clangd::config::Fragment::CompileFlagsBlock::Compiler

Override the compiler executable name to simulate.

The name can affect how flags are parsed (clang++ vs clang). If the executable name is in the –query-driver allowlist, then it will be invoked to extract include paths.

(That this simply replaces argv[0], and may mangle commands that use more complicated drivers like ccache).

Definition at line 144 of file ConfigFragment.h.

◆ Remove

std::vector<Located<std::string> > clang::clangd::config::Fragment::CompileFlagsBlock::Remove

List of flags to remove from the compile command.

  • If the value is a recognized clang flag (like "-I") then it will be removed along with any arguments. Synonyms like –include-dir= will also be removed.
  • Otherwise, if the value ends in * (like "-DFOO=*") then any argument with the prefix will be removed.
  • Otherwise any argument exactly matching the value is removed.

In all cases, -Xclang is also removed where needed.

Example: Command: clang++ –include-directory=/usr/include -DFOO=42 foo.cc Remove: [-I, -DFOO=*] Result: clang++ foo.cc

Flags added by the same CompileFlags entry will not be removed.

Definition at line 165 of file ConfigFragment.h.


The documentation for this struct was generated from the following file: