1 //===--- RefactoringActionRule.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_REFACTORINGACTIONRULE_H 10 #define LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGACTIONRULE_H 11 12 #include "clang/Basic/LLVM.h" 13 #include "llvm/ADT/StringRef.h" 14 15 namespace clang { 16 namespace tooling { 17 18 class RefactoringOptionVisitor; 19 class RefactoringResultConsumer; 20 class RefactoringRuleContext; 21 22 struct RefactoringDescriptor { 23 /// A unique identifier for the specific refactoring. 24 StringRef Name; 25 /// A human readable title for the refactoring. 26 StringRef Title; 27 /// A human readable description of what the refactoring does. 28 StringRef Description; 29 }; 30 31 /// A common refactoring action rule interface that defines the 'invoke' 32 /// function that performs the refactoring operation (either fully or 33 /// partially). 34 class RefactoringActionRuleBase { 35 public: ~RefactoringActionRuleBase()36 virtual ~RefactoringActionRuleBase() {} 37 38 /// Initiates and performs a specific refactoring action. 39 /// 40 /// The specific rule will invoke an appropriate \c handle method on a 41 /// consumer to propagate the result of the refactoring action. 42 virtual void invoke(RefactoringResultConsumer &Consumer, 43 RefactoringRuleContext &Context) = 0; 44 45 /// Returns the structure that describes the refactoring. 46 // static const RefactoringDescriptor &describe() = 0; 47 }; 48 49 /// A refactoring action rule is a wrapper class around a specific refactoring 50 /// action rule (SourceChangeRefactoringRule, etc) that, in addition to invoking 51 /// the action, describes the requirements that determine when the action can be 52 /// initiated. 53 class RefactoringActionRule : public RefactoringActionRuleBase { 54 public: 55 /// Returns true when the rule has a source selection requirement that has 56 /// to be fulfilled before refactoring can be performed. 57 virtual bool hasSelectionRequirement() = 0; 58 59 /// Traverses each refactoring option used by the rule and invokes the 60 /// \c visit callback in the consumer for each option. 61 /// 62 /// Options are visited in the order of use, e.g. if a rule has two 63 /// requirements that use options, the options from the first requirement 64 /// are visited before the options in the second requirement. 65 virtual void visitRefactoringOptions(RefactoringOptionVisitor &Visitor) = 0; 66 }; 67 68 } // end namespace tooling 69 } // end namespace clang 70 71 #endif // LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGACTIONRULE_H 72