clang 20.0.0git
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
19namespace 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
35namespace index {
36 class IndexDataConsumer;
37
39 IndexingOptions IndexOpts;
40 IndexDataConsumer &DataConsumer;
41 ASTContext *Ctx = nullptr;
42
43public:
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
67
68 static bool isTemplateImplicitInstantiation(const Decl *D);
69
70 bool handleDecl(const Decl *D, SymbolRoleSet Roles = SymbolRoleSet(),
71 ArrayRef<SymbolRelation> Relations = {});
72
73 bool handleDecl(const Decl *D, SourceLocation Loc,
75 ArrayRef<SymbolRelation> Relations = {},
76 const DeclContext *DC = nullptr);
77
78 bool handleReference(const NamedDecl *D, SourceLocation Loc,
79 const NamedDecl *Parent, const DeclContext *DC,
81 ArrayRef<SymbolRelation> Relations = {},
82 const Expr *RefE = nullptr);
83
84 void handleMacroDefined(const IdentifierInfo &Name, SourceLocation Loc,
85 const MacroInfo &MI);
86
87 void handleMacroUndefined(const IdentifierInfo &Name, SourceLocation Loc,
88 const MacroInfo &MI);
89
90 void handleMacroReference(const IdentifierInfo &Name, SourceLocation Loc,
91 const MacroInfo &MD);
92
93 bool importedModule(const ImportDecl *ImportD);
94
95 bool indexDecl(const Decl *D);
96
97 void indexTagDecl(const TagDecl *D, ArrayRef<SymbolRelation> Relations = {});
98
99 void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
100 const DeclContext *DC = nullptr,
101 bool isBase = false,
102 bool isIBType = false);
103
104 void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
105 const DeclContext *DC = nullptr,
106 bool isBase = false,
107 bool isIBType = false);
108
109 void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
110 const NamedDecl *Parent,
111 const DeclContext *DC = nullptr);
112
113 bool indexDeclContext(const DeclContext *DC);
114
115 void indexBody(const Stmt *S, const NamedDecl *Parent,
116 const DeclContext *DC = nullptr);
117
118 bool indexTopLevelDecl(const Decl *D);
119 bool indexDeclGroupRef(DeclGroupRef DG);
120
121private:
122 bool shouldIgnoreIfImplicit(const Decl *D);
123
124 bool shouldIndexMacroOccurrence(bool IsRef, SourceLocation Loc);
125
126 bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
127 bool IsRef, const Decl *Parent,
128 SymbolRoleSet Roles,
129 ArrayRef<SymbolRelation> Relations,
130 const Expr *RefE,
131 const Decl *RefD,
132 const DeclContext *ContainerDC);
133};
134
135} // end namespace index
136} // end namespace clang
137
138#endif
NodeId Parent
Definition: ASTDiff.cpp:191
const Decl * D
Defines the clang::IdentifierInfo, clang::IdentifierTable, and clang::Selector interfaces.
Forward-declares and imports various common LLVM datatypes that clang wants to use unqualified.
Defines the clang::MacroInfo and clang::MacroDirective classes.
SourceLocation Loc
Definition: SemaObjC.cpp:759
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
Definition: ASTContext.h:188
Decl - This represents one declaration (or definition), e.g.
Definition: DeclBase.h:86
Keeps track of the various options that can be enabled, which controls the dialect of C or C++ that i...
Definition: LangOptions.h:499
Encodes a location in the source.
bool shouldIndexImplicitInstantiation() const
IndexDataConsumer & getDataConsumer()
bool importedModule(const ImportDecl *ImportD)
bool handleDecl(const Decl *D, SymbolRoleSet Roles=SymbolRoleSet(), ArrayRef< SymbolRelation > Relations={})
bool shouldIndex(const Decl *D)
bool indexDeclContext(const DeclContext *DC)
Definition: IndexDecl.cpp:798
bool handleReference(const NamedDecl *D, SourceLocation Loc, const NamedDecl *Parent, const DeclContext *DC, SymbolRoleSet Roles=SymbolRoleSet(), ArrayRef< SymbolRelation > Relations={}, const Expr *RefE=nullptr)
void indexTagDecl(const TagDecl *D, ArrayRef< SymbolRelation > Relations={})
bool shouldIndexFunctionLocalSymbols() const
const IndexingOptions & getIndexOpts() const
void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS, const NamedDecl *Parent, const DeclContext *DC=nullptr)
void handleMacroReference(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MD)
bool indexTopLevelDecl(const Decl *D)
Definition: IndexDecl.cpp:805
void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
void indexBody(const Stmt *S, const NamedDecl *Parent, const DeclContext *DC=nullptr)
Definition: IndexBody.cpp:512
bool shouldIndexParametersInDeclarations() const
bool indexDeclGroupRef(DeclGroupRef DG)
Definition: IndexDecl.cpp:818
void handleMacroUndefined(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MI)
static bool isTemplateImplicitInstantiation(const Decl *D)
const LangOptions & getLangOpts() const
bool indexDecl(const Decl *D)
Definition: IndexDecl.cpp:780
IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
void handleMacroDefined(const IdentifierInfo &Name, SourceLocation Loc, const MacroInfo &MI)
void setASTContext(ASTContext &ctx)
void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent, const DeclContext *DC=nullptr, bool isBase=false, bool isIBType=false)
@ Decl
The l-value was an access to a declared entity or something equivalently strong, like the address of ...
unsigned SymbolRoleSet
Definition: IndexSymbol.h:133
The JSON file list parser is used to communicate input to InstallAPI.