| //===--- RefactoringRuleContext.h - Clang refactoring library -------------===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_RULE_CONTEXT_H |
| #define LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_RULE_CONTEXT_H |
| |
| #include "clang/Basic/DiagnosticError.h" |
| #include "clang/Basic/SourceManager.h" |
| #include "clang/Tooling/Refactoring/ASTSelection.h" |
| |
| namespace clang { |
| |
| class ASTContext; |
| |
| namespace tooling { |
| |
| /// The refactoring rule context stores all of the inputs that might be needed |
| /// by a refactoring action rule. It can create the specialized |
| /// \c ASTRefactoringOperation or \c PreprocessorRefactoringOperation values |
| /// that can be used by the refactoring action rules. |
| /// |
| /// The following inputs are stored by the operation: |
| /// |
| /// - SourceManager: a reference to a valid source manager. |
| /// |
| /// - SelectionRange: an optional source selection ranges that can be used |
| /// to represent a selection in an editor. |
| class RefactoringRuleContext { |
| public: |
| RefactoringRuleContext(const SourceManager &SM) : SM(SM) {} |
| |
| const SourceManager &getSources() const { return SM; } |
| |
| /// Returns the current source selection range as set by the |
| /// refactoring engine. Can be invalid. |
| SourceRange getSelectionRange() const { return SelectionRange; } |
| |
| void setSelectionRange(SourceRange R) { SelectionRange = R; } |
| |
| bool hasASTContext() const { return AST; } |
| |
| ASTContext &getASTContext() const { |
| assert(AST && "no AST!"); |
| return *AST; |
| } |
| |
| void setASTContext(ASTContext &Context) { AST = &Context; } |
| |
| /// Creates an llvm::Error value that contains a diagnostic. |
| /// |
| /// The errors should not outlive the context. |
| llvm::Error createDiagnosticError(SourceLocation Loc, unsigned DiagID) { |
| return DiagnosticError::create(Loc, PartialDiagnostic(DiagID, DiagStorage)); |
| } |
| |
| llvm::Error createDiagnosticError(unsigned DiagID) { |
| return createDiagnosticError(SourceLocation(), DiagID); |
| } |
| |
| void setASTSelection(std::unique_ptr<SelectedASTNode> Node) { |
| ASTNodeSelection = std::move(Node); |
| } |
| |
| private: |
| /// The source manager for the translation unit / file on which a refactoring |
| /// action might operate on. |
| const SourceManager &SM; |
| /// An optional source selection range that's commonly used to represent |
| /// a selection in an editor. |
| SourceRange SelectionRange; |
| /// An optional AST for the translation unit on which a refactoring action |
| /// might operate on. |
| ASTContext *AST = nullptr; |
| /// The allocator for diagnostics. |
| PartialDiagnostic::DiagStorageAllocator DiagStorage; |
| |
| // FIXME: Remove when memoized. |
| std::unique_ptr<SelectedASTNode> ASTNodeSelection; |
| }; |
| |
| } // end namespace tooling |
| } // end namespace clang |
| |
| #endif // LLVM_CLANG_TOOLING_REFACTOR_REFACTORING_RULE_CONTEXT_H |