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
15namespace clang {
16namespace tooling {
17
18class RefactoringOptionVisitor;
19class RefactoringResultConsumer;
20class RefactoringRuleContext;
21
22struct 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).
34class RefactoringActionRuleBase {
35public:
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.
53class RefactoringActionRule : public RefactoringActionRuleBase {
54public:
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

source code of clang/include/clang/Tooling/Refactoring/RefactoringActionRule.h