123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- 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_REFACTORING_REFACTORINGRULECONTEXT_H
- #define LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGRULECONTEXT_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_REFACTORING_REFACTORINGRULECONTEXT_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|