18b09cf79SUtkarsh Saxena //===--- ASTSignals.h --------------------------------------------*- C++-*-===// 22f395b70SUtkarsh Saxena // 32f395b70SUtkarsh Saxena // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 42f395b70SUtkarsh Saxena // See https://llvm.org/LICENSE.txt for license information. 52f395b70SUtkarsh Saxena // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 62f395b70SUtkarsh Saxena // 72f395b70SUtkarsh Saxena //===----------------------------------------------------------------------===// 82f395b70SUtkarsh Saxena 92f395b70SUtkarsh Saxena #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANGD_ASTSIGNALS_H 102f395b70SUtkarsh Saxena #define LLVM_CLANG_TOOLS_EXTRA_CLANGD_ASTSIGNALS_H 112f395b70SUtkarsh Saxena 122f395b70SUtkarsh Saxena #include "ParsedAST.h" 13*042dd994SDavid Goldman #include "index/Symbol.h" 142f395b70SUtkarsh Saxena #include "index/SymbolID.h" 152f395b70SUtkarsh Saxena #include "llvm/ADT/DenseMap.h" 162f395b70SUtkarsh Saxena #include "llvm/ADT/StringMap.h" 172f395b70SUtkarsh Saxena 182f395b70SUtkarsh Saxena namespace clang { 192f395b70SUtkarsh Saxena namespace clangd { 202f395b70SUtkarsh Saxena 212f395b70SUtkarsh Saxena /// Signals derived from a valid AST of a file. 222f395b70SUtkarsh Saxena /// Provides information that can only be extracted from the AST to actions that 232f395b70SUtkarsh Saxena /// can't access an AST. The signals are computed and updated asynchronously by 242f395b70SUtkarsh Saxena /// the ASTWorker and thus they are always stale and also can be absent. 252f395b70SUtkarsh Saxena /// Example usage: Information about the declarations used in a file affects 262f395b70SUtkarsh Saxena /// code-completion ranking in that file. 272f395b70SUtkarsh Saxena struct ASTSignals { 282f395b70SUtkarsh Saxena /// Number of occurrences of each symbol present in the file. 292f395b70SUtkarsh Saxena llvm::DenseMap<SymbolID, unsigned> ReferencedSymbols; 302f395b70SUtkarsh Saxena /// Namespaces whose symbols are used in the file, and the number of such 312f395b70SUtkarsh Saxena /// distinct symbols. 322f395b70SUtkarsh Saxena llvm::StringMap<unsigned> RelatedNamespaces; 33*042dd994SDavid Goldman /// Preferred preprocessor directive to use for inclusions by the file. 34*042dd994SDavid Goldman Symbol::IncludeDirective InsertionDirective = 35*042dd994SDavid Goldman Symbol::IncludeDirective::Include; 362f395b70SUtkarsh Saxena 372f395b70SUtkarsh Saxena static ASTSignals derive(const ParsedAST &AST); 382f395b70SUtkarsh Saxena }; 392f395b70SUtkarsh Saxena 402f395b70SUtkarsh Saxena } // namespace clangd 412f395b70SUtkarsh Saxena } // namespace clang 422f395b70SUtkarsh Saxena 432f395b70SUtkarsh Saxena #endif // LLVM_CLANG_TOOLS_EXTRA_CLANGD_ASTSIGNALS_H 44