clang  9.0.0svn
IndexingContext.h
Go to the documentation of this file.
1 //===- IndexingContext.h - Indexing context data ----------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #ifndef LLVM_CLANG_LIB_INDEX_INDEXINGCONTEXT_H
10 #define LLVM_CLANG_LIB_INDEX_INDEXINGCONTEXT_H
11 
13 #include "clang/Basic/LLVM.h"
16 #include "clang/Lex/MacroInfo.h"
17 #include "llvm/ADT/ArrayRef.h"
18 
19 namespace clang {
20  class ASTContext;
21  class Decl;
22  class DeclGroupRef;
23  class ImportDecl;
24  class TagDecl;
25  class TypeSourceInfo;
26  class NamedDecl;
27  class ObjCMethodDecl;
28  class DeclContext;
29  class NestedNameSpecifierLoc;
30  class Stmt;
31  class Expr;
32  class TypeLoc;
33  class SourceLocation;
34 
35 namespace index {
36  class IndexDataConsumer;
37 
39  IndexingOptions IndexOpts;
40  IndexDataConsumer &DataConsumer;
41  ASTContext *Ctx = nullptr;
42 
43 public:
45  : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
46 
47  const IndexingOptions &getIndexOpts() const { return IndexOpts; }
48  IndexDataConsumer &getDataConsumer() { return DataConsumer; }
49 
50  void setASTContext(ASTContext &ctx) { Ctx = &ctx; }
51 
52  bool shouldIndex(const Decl *D);
53 
54  const LangOptions &getLangOpts() const;
55 
56  bool shouldSuppressRefs() const {
57  return false;
58  }
59 
61 
63 
65 
66  bool shouldIndexTemplateParameters() const;
67 
68  static bool isTemplateImplicitInstantiation(const Decl *D);
69 
70  bool handleDecl(const Decl *D, SymbolRoleSet Roles = SymbolRoleSet(),
71  ArrayRef<SymbolRelation> Relations = None);
72 
73  bool handleDecl(const Decl *D, SourceLocation Loc,
74  SymbolRoleSet Roles = SymbolRoleSet(),
75  ArrayRef<SymbolRelation> Relations = None,
76  const DeclContext *DC = nullptr);
77 
78  bool handleReference(const NamedDecl *D, SourceLocation Loc,
79  const NamedDecl *Parent,
80  const DeclContext *DC,
81  SymbolRoleSet Roles = SymbolRoleSet(),
82  ArrayRef<SymbolRelation> Relations = None,
83  const Expr *RefE = nullptr,
84  const Decl *RefD = nullptr);
85 
86  void handleMacroDefined(const IdentifierInfo &Name, SourceLocation Loc,
87  const MacroInfo &MI);
88 
90  const MacroInfo &MI);
91 
93  const MacroInfo &MD);
94 
95  bool importedModule(const ImportDecl *ImportD);
96 
97  bool indexDecl(const Decl *D);
98 
99  void indexTagDecl(const TagDecl *D,
100  ArrayRef<SymbolRelation> Relations = None);
101 
102  void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
103  const DeclContext *DC = nullptr,
104  bool isBase = false,
105  bool isIBType = false);
106 
107  void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
108  const DeclContext *DC = nullptr,
109  bool isBase = false,
110  bool isIBType = false);
111 
113  const NamedDecl *Parent,
114  const DeclContext *DC = nullptr);
115 
116  bool indexDeclContext(const DeclContext *DC);
117 
118  void indexBody(const Stmt *S, const NamedDecl *Parent,
119  const DeclContext *DC = nullptr);
120 
121  bool indexTopLevelDecl(const Decl *D);
123 
124 private:
125  bool shouldIgnoreIfImplicit(const Decl *D);
126 
127  bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
128  bool IsRef, const Decl *Parent,
129  SymbolRoleSet Roles,
130  ArrayRef<SymbolRelation> Relations,
131  const Expr *RefE,
132  const Decl *RefD,
133  const DeclContext *ContainerDC);
134 };
135 
136 } // end namespace index
137 } // end namespace clang
138 
139 #endif
Stmt - This represents one statement.
Definition: Stmt.h:65
void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
Decl - This represents one declaration (or definition), e.g.
Definition: DeclBase.h:87
Defines the clang::MacroInfo and clang::MacroDirective classes.
bool indexTopLevelDecl(const Decl *D)
Definition: IndexDecl.cpp:755
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
A container of type source information.
Definition: Decl.h:86
void handleMacroDefined(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MI)
void setASTContext(ASTContext &ctx)
IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
Base wrapper for a particular "section" of type source info.
Definition: TypeLoc.h:56
One of these records is kept for each identifier that is lexed.
const LangOptions & getLangOpts() const
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition: ASTContext.h:154
A C++ nested-name-specifier augmented with source location information.
void handleMacroReference(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MD)
bool shouldIndexParametersInDeclarations() const
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:49
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified...
bool shouldIndexFunctionLocalSymbols() const
bool indexDecl(const Decl *D)
Definition: IndexDecl.cpp:730
NodeId Parent
Definition: ASTDiff.cpp:191
unsigned SymbolRoleSet
Definition: IndexSymbol.h:127
This represents one expression.
Definition: Expr.h:108
bool indexDeclContext(const DeclContext *DC)
Definition: IndexDecl.cpp:748
bool indexDeclGroupRef(DeclGroupRef DG)
Definition: IndexDecl.cpp:765
static bool isTemplateImplicitInstantiation(const Decl *D)
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
bool handleReference(const NamedDecl *D, SourceLocation Loc, const NamedDecl *Parent, const DeclContext *DC, SymbolRoleSet Roles=SymbolRoleSet(), ArrayRef< SymbolRelation > Relations=None, const Expr *RefE=nullptr, const Decl *RefD=nullptr)
Encodes a location in the source.
Represents the declaration of a struct/union/class/enum.
Definition: Decl.h:3063
bool shouldIndexImplicitInstantiation() const
Describes a module import declaration, which makes the contents of the named module visible in the cu...
Definition: Decl.h:4155
bool shouldIndex(const Decl *D)
Dataflow Directional Tag Classes.
bool handleDecl(const Decl *D, SymbolRoleSet Roles=SymbolRoleSet(), ArrayRef< SymbolRelation > Relations=None)
DeclContext - This is used only as base class of specific decl types that can act as declaration cont...
Definition: DeclBase.h:1262
Encapsulates the data about a macro definition (e.g.
Definition: MacroInfo.h:39
void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
void handleMacroUndefined(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MI)
void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS, const NamedDecl *Parent, const DeclContext *DC=nullptr)
void indexTagDecl(const TagDecl *D, ArrayRef< SymbolRelation > Relations=None)
bool importedModule(const ImportDecl *ImportD)
IndexDataConsumer & getDataConsumer()
void indexBody(const Stmt *S, const NamedDecl *Parent, const DeclContext *DC=nullptr)
Definition: IndexBody.cpp:471
This represents a decl that may have a name.
Definition: Decl.h:248
const IndexingOptions & getIndexOpts() const