/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_REFACTORING_REFACTORINGRULECONTEXT_H |
10 | | #define LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGRULECONTEXT_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::DiagStorageAllocator 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_REFACTORING_REFACTORINGRULECONTEXT_H |