Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/Index/IndexingContext.h
35233 views
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
12
#include "clang/Basic/IdentifierTable.h"
13
#include "clang/Basic/LLVM.h"
14
#include "clang/Index/IndexSymbol.h"
15
#include "clang/Index/IndexingAction.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
38
class IndexingContext {
39
IndexingOptions IndexOpts;
40
IndexDataConsumer &DataConsumer;
41
ASTContext *Ctx = nullptr;
42
43
public:
44
IndexingContext(IndexingOptions IndexOpts, IndexDataConsumer &DataConsumer)
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
60
bool shouldIndexFunctionLocalSymbols() const;
61
62
bool shouldIndexImplicitInstantiation() const;
63
64
bool shouldIndexParametersInDeclarations() const;
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 = std::nullopt);
72
73
bool handleDecl(const Decl *D, SourceLocation Loc,
74
SymbolRoleSet Roles = SymbolRoleSet(),
75
ArrayRef<SymbolRelation> Relations = std::nullopt,
76
const DeclContext *DC = nullptr);
77
78
bool handleReference(const NamedDecl *D, SourceLocation Loc,
79
const NamedDecl *Parent, const DeclContext *DC,
80
SymbolRoleSet Roles = SymbolRoleSet(),
81
ArrayRef<SymbolRelation> Relations = std::nullopt,
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,
98
ArrayRef<SymbolRelation> Relations = std::nullopt);
99
100
void indexTypeSourceInfo(TypeSourceInfo *TInfo, const NamedDecl *Parent,
101
const DeclContext *DC = nullptr,
102
bool isBase = false,
103
bool isIBType = false);
104
105
void indexTypeLoc(TypeLoc TL, const NamedDecl *Parent,
106
const DeclContext *DC = nullptr,
107
bool isBase = false,
108
bool isIBType = false);
109
110
void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
111
const NamedDecl *Parent,
112
const DeclContext *DC = nullptr);
113
114
bool indexDeclContext(const DeclContext *DC);
115
116
void indexBody(const Stmt *S, const NamedDecl *Parent,
117
const DeclContext *DC = nullptr);
118
119
bool indexTopLevelDecl(const Decl *D);
120
bool indexDeclGroupRef(DeclGroupRef DG);
121
122
private:
123
bool shouldIgnoreIfImplicit(const Decl *D);
124
125
bool shouldIndexMacroOccurrence(bool IsRef, SourceLocation Loc);
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
140
141