xref: /llvm-project/clang-tools-extra/clangd/ASTSignals.h (revision 042dd99484d6f393cc8a365def250e9d74c24d37)
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