Coverage Report

Created: 2022-01-15 10:30

/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
88
    : IndexOpts(IndexOpts), DataConsumer(DataConsumer) {}
46
47
0
  const IndexingOptions &getIndexOpts() const { return IndexOpts; }
48
166
  IndexDataConsumer &getDataConsumer() { return DataConsumer; }
49
50
110
  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 = 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
89
  void handleMacroUndefined(const IdentifierInfo &Name, SourceLocation Loc,
90
                            const MacroInfo &MI);
91
92
  void handleMacroReference(const IdentifierInfo &Name, SourceLocation Loc,
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
112
  void indexNestedNameSpecifierLoc(NestedNameSpecifierLoc NNS,
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);
122
  bool indexDeclGroupRef(DeclGroupRef DG);
123
124
private:
125
  bool shouldIgnoreIfImplicit(const Decl *D);
126
127
  bool shouldIndexMacroOccurrence(bool IsRef, SourceLocation Loc);
128
129
  bool handleDeclOccurrence(const Decl *D, SourceLocation Loc,
130
                            bool IsRef, const Decl *Parent,
131
                            SymbolRoleSet Roles,
132
                            ArrayRef<SymbolRelation> Relations,
133
                            const Expr *RefE,
134
                            const Decl *RefD,
135
                            const DeclContext *ContainerDC);
136
};
137
138
} // end namespace index
139
} // end namespace clang
140
141
#endif