Coverage Report

Created: 2020-09-22 08:39

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/include/clang/Tooling/Refactoring/RefactoringRuleContext.h
Line
Count
Source (jump to first uncovered line)
1
//===--- RefactoringRuleContext.h - Clang refactoring library -------------===//
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_TOOLING_REFACTOR_REFACTORING_RULE_CONTEXT_H
10
#define LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_RULE_CONTEXT_H
11
12
#include "clang/Basic/DiagnosticError.h"
13
#include "clang/Basic/SourceManager.h"
14
#include "clang/Tooling/Refactoring/ASTSelection.h"
15
16
namespace clang {
17
18
class ASTContext;
19
20
namespace tooling {
21
22
/// The refactoring rule context stores all of the inputs that might be needed
23
/// by a refactoring action rule. It can create the specialized
24
/// \c ASTRefactoringOperation or \c PreprocessorRefactoringOperation values
25
/// that can be used by the refactoring action rules.
26
///
27
/// The following inputs are stored by the operation:
28
///
29
///   - SourceManager: a reference to a valid source manager.
30
///
31
///   - SelectionRange: an optional source selection ranges that can be used
32
///     to represent a selection in an editor.
33
class RefactoringRuleContext {
34
public:
35
22
  RefactoringRuleContext(const SourceManager &SM) : SM(SM) {}
36
37
34
  const SourceManager &getSources() const { return SM; }
38
39
  /// Returns the current source selection range as set by the
40
  /// refactoring engine. Can be invalid.
41
190
  SourceRange getSelectionRange() const { return SelectionRange; }
42
43
65
  void setSelectionRange(SourceRange R) { SelectionRange = R; }
44
45
0
  bool hasASTContext() const { return AST; }
46
47
127
  ASTContext &getASTContext() const {
48
127
    assert(AST && "no AST!");
49
127
    return *AST;
50
127
  }
51
52
18
  void setASTContext(ASTContext &Context) { AST = &Context; }
53
54
  /// Creates an llvm::Error value that contains a diagnostic.
55
  ///
56
  /// The errors should not outlive the context.
57
25
  llvm::Error createDiagnosticError(SourceLocation Loc, unsigned DiagID) {
58
25
    return DiagnosticError::create(Loc, PartialDiagnostic(DiagID, DiagStorage));
59
25
  }
60
61
16
  llvm::Error createDiagnosticError(unsigned DiagID) {
62
16
    return createDiagnosticError(SourceLocation(), DiagID);
63
16
  }
64
65
41
  void setASTSelection(std::unique_ptr<SelectedASTNode> Node) {
66
41
    ASTNodeSelection = std::move(Node);
67
41
  }
68
69
private:
70
  /// The source manager for the translation unit / file on which a refactoring
71
  /// action might operate on.
72
  const SourceManager &SM;
73
  /// An optional source selection range that's commonly used to represent
74
  /// a selection in an editor.
75
  SourceRange SelectionRange;
76
  /// An optional AST for the translation unit on which a refactoring action
77
  /// might operate on.
78
  ASTContext *AST = nullptr;
79
  /// The allocator for diagnostics.
80
  PartialDiagnostic::StorageAllocator DiagStorage;
81
82
  // FIXME: Remove when memoized.
83
  std::unique_ptr<SelectedASTNode> ASTNodeSelection;
84
};
85
86
} // end namespace tooling
87
} // end namespace clang
88
89
#endif // LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_RULE_CONTEXT_H