llvm-project/clang-tools-extra/clangd
Sam McCall 04b4190489 [Driver] Make "upgrade" of -include to include-pch optional; disable in clangd
If clang is passed "-include foo.h", it will rewrite to "-include-pch foo.h.pch"
before passing it to cc1, if foo.h.pch exists.

Existence is checked, but validity is not. This is probably a reasonable
assumption for the compiler itself, but not for clang-based tools where the
actual compiler may be a different version of clang, or even GCC.
In the end, we lose our -include, we gain a -include-pch that can't be used,
and the file often fails to parse.

I would like to turn this off for all non-clang invocations (i.e.
createInvocationFromCommandLine), but we have explicit tests of this behavior
for libclang and I can't work out the implications of changing it.

Instead this patch:
 - makes it optional in the driver, default on (no change)
 - makes it optional in createInvocationFromCommandLine, default on (no change)
 - changes driver to do IO through the VFS so it can be tested
 - tests the option
 - turns the option off in clangd where the problem was reported

Subsequent patches should make libclang opt in explicitly and flip the default
for all other tools. It's probably also time to extract an options struct
for createInvocationFromCommandLine.

Fixes https://github.com/clangd/clangd/issues/856
Fixes https://github.com/clangd/vscode-clangd/issues/324

Differential Revision: https://reviews.llvm.org/D124970
2022-05-05 16:47:17 +02:00
..
benchmarks [clangd] Cleanup of readability-identifier-naming 2022-02-01 13:31:52 +00:00
fuzzer [clangd] Cleanup of readability-identifier-naming 2022-02-01 13:31:52 +00:00
index [Index] [clangd] Support for concept declarations and requires expressions 2022-04-26 13:50:01 +00:00
indexer [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
quality Make clangd CompletionModel not depend on directory layout. 2021-05-05 19:25:34 +01:00
refactor [clangd] Fix a declare-constructor tweak crash on incomplete fields. 2022-04-21 19:44:43 +02:00
support [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
test [cmake] Provide CURRENT_TOOLS_DIR centrally, replacing CLANG_TOOLS_DIR 2022-03-25 20:22:01 +01:00
tool [clangd] Output inlay hints with `clangd --check` 2022-04-27 02:36:09 -04:00
unittests Change the behavior of implicit int diagnostics 2022-05-04 08:35:47 -04:00
xpc [NFC][clangd] fix llvm-namespace-comment finding 2021-11-16 15:10:32 +00:00
AST.cpp [clangd] Add code action to generate a constructor for a C++ class 2022-04-06 16:23:50 +02:00
AST.h [clangd] Add code action to generate a constructor for a C++ class 2022-04-06 16:23:50 +02:00
ASTSignals.cpp [clangd] Record latency for ASTSignal derivation 2022-04-28 14:34:39 +02:00
ASTSignals.h [clangd] Trivial: Documentation fix in ASTSignals. 2021-01-14 18:38:42 +01:00
CMakeLists.txt [clangd] Helper for determining member insertion point. 2022-01-03 17:59:45 +01:00
ClangdLSPServer.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
ClangdLSPServer.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
ClangdServer.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
ClangdServer.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
CodeComplete.cpp [Index] [clangd] Support for concept declarations and requires expressions 2022-04-26 13:50:01 +00:00
CodeComplete.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
CodeCompletionStrings.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
CodeCompletionStrings.h
CollectMacros.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
CollectMacros.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
CompileCommands.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
CompileCommands.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Compiler.cpp [Driver] Make "upgrade" of -include to include-pch optional; disable in clangd 2022-05-05 16:47:17 +02:00
Compiler.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Config.cpp [clangd] config() -> Config::current to avoid confict with NS 2020-06-29 23:05:19 +02:00
Config.h [clangd] IncludeCleaner: Add filtering mechanism 2022-04-19 14:56:27 +02:00
ConfigCompile.cpp [clangd] IncludeCleaner: Add filtering mechanism 2022-04-19 14:56:27 +02:00
ConfigFragment.h [clangd] IncludeCleaner: Add filtering mechanism 2022-04-19 14:56:27 +02:00
ConfigProvider.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
ConfigProvider.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
ConfigYAML.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Diagnostics.cpp [clangd] Remove trivial uses of FileEntry::getName 2022-04-04 20:59:51 +02:00
Diagnostics.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
DraftStore.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
DraftStore.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
DumpAST.cpp Reland "[AST] Add a new TemplateKind for template decls found via a using decl."" 2022-04-14 11:04:55 +02:00
DumpAST.h [clang] Forward-declare DynTypedNode (NFC) 2022-01-23 13:28:04 -08:00
ExpectedTypes.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
ExpectedTypes.h [clangd] cleanup of header guard names 2021-12-02 15:58:35 +00:00
FS.cpp
FS.h
Feature.cpp [clangd] Rename Features.h -> Feature.h to avoid confilct with libstdc++ 2021-08-06 18:56:41 +02:00
Feature.h [clangd] Rename Features.h -> Feature.h to avoid confilct with libstdc++ 2021-08-06 18:56:41 +02:00
FeatureModule.cpp [clangd] Rename Module -> FeatureModule to avoid confusion. NFC 2021-03-05 10:04:00 +01:00
FeatureModule.h [clangd] Add beforeExecute() callback to FeatureModules. 2022-04-21 18:03:39 +02:00
Features.inc.in [clangd] Add CMake option to (not) link in clang-tidy checks 2021-07-14 10:04:21 +02:00
FileDistance.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
FileDistance.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
FindSymbols.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
FindSymbols.h
FindTarget.cpp [clangd] Handle the new Using TemplateName. 2022-04-20 15:42:24 +02:00
FindTarget.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Format.cpp [clangd] Handle tabs in getIncrementalChangesAfterNewline() 2022-03-29 01:43:09 -04:00
Format.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
FuzzyMatch.cpp [NFC][clangd] cleanup llvm-else-after-return findings 2021-11-17 14:37:03 +00:00
FuzzyMatch.h
GlobalCompilationDatabase.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
GlobalCompilationDatabase.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
HeaderSourceSwitch.cpp [clangd] Test against path insensitivity 2022-03-21 17:27:05 +01:00
HeaderSourceSwitch.h [clangd] cleanup of header guard names 2021-12-02 15:58:35 +00:00
Headers.cpp [clangd] Include Cleaner: suppress unused warnings for IWYU pragma: export 2022-04-21 17:00:06 +02:00
Headers.h [clang][lex] NFCI: Use FileEntryRef in PPCallbacks::InclusionDirective() 2022-04-14 10:46:12 +02:00
HeuristicResolver.cpp [clangd] Use castAs<> instead of getAs<> to avoid dereference of nullptr 2022-01-23 13:24:36 +00:00
HeuristicResolver.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Hover.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Hover.h [clangd] getHover - pass FormatStyle argument by const reference 2022-02-18 17:27:45 +00:00
IncludeCleaner.cpp [clangd] Handle the new Using TemplateName. 2022-04-20 15:42:24 +02:00
IncludeCleaner.h Reland "[clangd] IncludeCleaner: Add support for IWYU pragma private" 2022-04-05 16:57:39 +02:00
IncludeFixer.cpp Generalize calls to ImplicitlyDefineFunction 2022-04-30 10:03:51 -04:00
IncludeFixer.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
InlayHints.cpp [clangd] Add inlay hints for mutable reference parameters 2022-05-02 15:57:23 -04:00
InlayHints.h [clangd] Polish clangd/inlayHints and expose them by default. 2022-01-07 15:12:43 +01:00
JSONTransport.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
LSPBinder.h [clangd] Bind outgoing calls through LSPBinder too. NFC 2021-02-17 10:56:06 +01:00
ParsedAST.cpp Reland [clangd] More precisely enable clang warnings through ClangTidy options 2022-04-30 11:07:11 +02:00
ParsedAST.h [clangd] Code action to declare missing move/copy constructor/assignment 2022-04-06 16:14:42 +02:00
PathMapping.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
PathMapping.h [clangd] cleanup of header guard names 2021-12-02 15:58:35 +00:00
Preamble.cpp [clangd] Add beforeExecute() callback to FeatureModules. 2022-04-21 18:03:39 +02:00
Preamble.h [clangd] Export preamble AST and serialized size as metrics 2022-04-13 14:43:06 +02:00
Protocol.cpp [clangd] Output inlay hints with `clangd --check` 2022-04-27 02:36:09 -04:00
Protocol.h [clangd] Output inlay hints with `clangd --check` 2022-04-27 02:36:09 -04:00
Quality.cpp [Index] [clangd] Support for concept declarations and requires expressions 2022-04-26 13:50:01 +00:00
Quality.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
QueryDriverDatabase.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
README.md [Branch-Rename] Fix some links 2021-02-01 16:43:21 +05:30
RIFF.cpp [clangd] Add error() function for creating formatv-style llvm::Errors. NFC 2020-09-14 10:43:42 +02:00
RIFF.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Selection.cpp [AST] Improve traversal of concepts and concept requirements 2022-04-28 09:33:26 +00:00
Selection.h [clangd] SelectionTree should prefer lexical declcontext 2021-10-28 17:39:35 +02:00
SemanticHighlighting.cpp Reland "[AST] Add a new TemplateKind for template decls found via a using decl."" 2022-04-14 11:04:55 +02:00
SemanticHighlighting.h Add semantic token modifier for non-const reference parameter 2021-09-13 00:51:09 -04:00
SemanticSelection.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
SemanticSelection.h [clangd] Implement textDocument/foldingRange 2020-07-14 09:28:42 +02:00
SourceCode.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
SourceCode.h [clangd] Don't index __reserved_names in headers. 2022-01-05 16:34:04 +01:00
TUScheduler.cpp [clangd] Dont include version string in update tasks 2022-04-19 19:27:04 +02:00
TUScheduler.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
TidyProvider.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
TidyProvider.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
Transport.h [clangd] Rename Features.h -> Feature.h to avoid confilct with libstdc++ 2021-08-06 18:56:41 +02:00
URI.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
URI.h [clangd] cleanup of header guard names 2021-12-02 15:58:35 +00:00
XRefs.cpp [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00
XRefs.h [clangd] Clean up unused includes. NFCI 2022-02-26 12:00:16 +01:00

README.md

clangd

clangd is a language server, and provides C++ IDE features to editors. This is not its documentation.

Communication channels

If you have any questions or feedback, you can reach community and developers through one of these channels:

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 Release mode 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 Ninja as a generator rather than default make is preferred. To do that consider passing -G Ninja to cmake invocation.
    • Finally, you can turn on assertions via -DLLVM_ENABLE_ASSERTS=On.
  • Afterwards you can build clangd with cmake --build $LLVM_ROOT/build --target clangd, similarly run tests by changing target to check-clangd.