Sam McCall 8adc4d1ec7 [clangd] Add textDocument/ast extension method to dump the AST
This is a mass-market version of the "dump AST" tweak we have behind
-hidden-features.
I think in this friendlier form it'll be useful for people outside clang
developers, which would justify making it a real feature.
It could be useful as a step towards lightweight clang-AST tooling in clangd
itself (like matcher-based search).

Advantages over the tweak:
 - simplified information makes it more accessible, likely somewhat useful
   without learning too much clang internals
 - can be shown in a tree view
 - structured information gives some options for presentation (e.g.
   icon + two text colors + tooltip in vscode)
 - clickable nodes jump to the corresponding code
Disadvantages:
 - a bunch of code to handle different node types
 - likely missing some important info vs dump-ast due to brevity/oversight
 - may end up chasing/maintaining support for the long tail of nodes

Demo with VSCode support: https://imgur.com/a/6gKfyIV

Differential Revision: https://reviews.llvm.org/D89571
2020-11-20 01:13:28 +01:00

185 lines
4.0 KiB
CMake

add_subdirectory(support)
# Configure the Features.inc file.
if (NOT DEFINED CLANGD_BUILD_XPC)
if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
set(CLANGD_BUILD_XPC_DEFAULT ON)
else ()
set(CLANGD_BUILD_XPC_DEFAULT OFF)
endif ()
llvm_canonicalize_cmake_booleans(CLANGD_BUILD_XPC_DEFAULT)
set(CLANGD_BUILD_XPC ${CLANGD_BUILD_XPC_DEFAULT} CACHE BOOL "Build XPC Support For Clangd." FORCE)
unset(CLANGD_BUILD_XPC_DEFAULT)
endif ()
llvm_canonicalize_cmake_booleans(
CLANGD_BUILD_XPC
CLANGD_ENABLE_REMOTE
LLVM_ENABLE_ZLIB
)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Features.inc.in
${CMAKE_CURRENT_BINARY_DIR}/Features.inc
)
set(LLVM_LINK_COMPONENTS
Support
AllTargetsInfos
FrontendOpenMP
Option
)
include(${CMAKE_CURRENT_SOURCE_DIR}/quality/CompletionModel.cmake)
gen_decision_forest(${CMAKE_CURRENT_SOURCE_DIR}/quality/model CompletionModel clang::clangd::Example)
if(MSVC AND NOT CLANG_CL)
set_source_files_properties(CompileCommands.cpp PROPERTIES COMPILE_FLAGS -wd4130) # disables C4130: logical operation on address of string constant
endif()
include_directories(BEFORE "${CMAKE_CURRENT_BINARY_DIR}/../clang-tidy")
add_clang_library(clangDaemon
AST.cpp
ClangdLSPServer.cpp
ClangdServer.cpp
CodeComplete.cpp
CodeCompletionStrings.cpp
CollectMacros.cpp
CompileCommands.cpp
Compiler.cpp
Config.cpp
ConfigCompile.cpp
ConfigProvider.cpp
ConfigYAML.cpp
Diagnostics.cpp
DraftStore.cpp
DumpAST.cpp
ExpectedTypes.cpp
FindSymbols.cpp
FindTarget.cpp
FileDistance.cpp
Format.cpp
FS.cpp
FuzzyMatch.cpp
GlobalCompilationDatabase.cpp
Headers.cpp
HeaderSourceSwitch.cpp
Hover.cpp
IncludeFixer.cpp
JSONTransport.cpp
PathMapping.cpp
Protocol.cpp
Quality.cpp
ParsedAST.cpp
Preamble.cpp
RIFF.cpp
Selection.cpp
SemanticHighlighting.cpp
SemanticSelection.cpp
SourceCode.cpp
QueryDriverDatabase.cpp
TUScheduler.cpp
URI.cpp
XRefs.cpp
${CMAKE_CURRENT_BINARY_DIR}/CompletionModel.cpp
index/Background.cpp
index/BackgroundIndexLoader.cpp
index/BackgroundIndexStorage.cpp
index/BackgroundQueue.cpp
index/BackgroundRebuild.cpp
index/CanonicalIncludes.cpp
index/FileIndex.cpp
index/Index.cpp
index/IndexAction.cpp
index/MemIndex.cpp
index/Merge.cpp
index/Ref.cpp
index/Relation.cpp
index/Serialization.cpp
index/Symbol.cpp
index/SymbolCollector.cpp
index/SymbolID.cpp
index/SymbolLocation.cpp
index/SymbolOrigin.cpp
index/YAMLSerialization.cpp
index/dex/Dex.cpp
index/dex/Iterator.cpp
index/dex/PostingList.cpp
index/dex/Trigram.cpp
refactor/Rename.cpp
refactor/Tweak.cpp
DEPENDS
omp_gen
)
# Include generated CompletionModel headers.
target_include_directories(clangDaemon PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>
)
clang_target_link_libraries(clangDaemon
PRIVATE
clangAST
clangASTMatchers
clangBasic
clangDriver
clangFormat
clangFrontend
clangIndex
clangLex
clangSema
clangSerialization
clangTooling
clangToolingCore
clangToolingInclusions
clangToolingRefactoring
clangToolingSyntax
)
target_link_libraries(clangDaemon
PRIVATE
${LLVM_PTHREAD_LIB}
clangTidy
${ALL_CLANG_TIDY_CHECKS}
clangdSupport
)
add_subdirectory(refactor/tweaks)
if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# FIXME: Make fuzzer not use linux-specific APIs, build it everywhere.
add_subdirectory(fuzzer)
endif()
add_subdirectory(tool)
add_subdirectory(indexer)
if (LLVM_INCLUDE_BENCHMARKS)
add_subdirectory(benchmarks)
endif()
if ( CLANGD_BUILD_XPC )
add_subdirectory(xpc)
endif ()
if(CLANG_INCLUDE_TESTS)
add_subdirectory(test)
add_subdirectory(unittests)
endif()
# FIXME(kirillbobyrev): Document this in the LLVM docs once remote index is stable.
option(CLANGD_ENABLE_REMOTE "Use gRPC library to enable remote index support for Clangd" OFF)
set(GRPC_INSTALL_PATH "" CACHE PATH "Path to gRPC library manual installation.")
if (CLANGD_ENABLE_REMOTE)
include(FindGRPC)
endif()
add_subdirectory(index/remote)
add_subdirectory(index/dex/dexp)