Coverage Report

Created: 2023-09-12 09:32

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/Index/IndexingContext.h
Line
Count
Source (jump to first uncovered line)
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
100
    : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
46
47
0
  const IndexingOptions &getIndexOpts() const { return IndexOpts; }
48
190
  IndexDataConsumer &getDataConsumer() { return DataConsumer; }
49
50
125
  void setASTContext(ASTContext &ctx) { Ctx = &ctx; }
51
52
  bool shouldIndex(const Decl *D);
53
54
  const LangOptions &getLangOpts() const;
55
56
0
  bool shouldSuppressRefs() const {
57
0
    return false;
58
0
  }
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