Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
14 | pmbaty | 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: |
||
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 |