1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- #pragma once
- #ifdef __GNUC__
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wunused-parameter"
- #endif
- //===--- RefactoringAction.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_REFACTORINGACTION_H
- #define LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGACTION_H
- #include "clang/Basic/LLVM.h"
- #include "clang/Tooling/Refactoring/RefactoringActionRules.h"
- #include <vector>
- namespace clang {
- namespace tooling {
- /// A refactoring action is a class that defines a set of related refactoring
- /// action rules. These rules get grouped under a common umbrella - a single
- /// clang-refactor subcommand.
- ///
- /// A subclass of \c RefactoringAction is responsible for creating the set of
- /// grouped refactoring action rules that represent one refactoring operation.
- /// Although the rules in one action may have a number of different
- /// implementations, they should strive to produce a similar result. It should
- /// be easy for users to identify which refactoring action produced the result
- /// regardless of which refactoring action rule was used.
- ///
- /// The distinction between actions and rules enables the creation of action
- /// that uses very different rules, for example:
- /// - local vs global: a refactoring operation like
- /// "add missing switch cases" can be applied to one switch when it's
- /// selected in an editor, or to all switches in a project when an enum
- /// constant is added to an enum.
- /// - tool vs editor: some refactoring operation can be initiated in the
- /// editor when a declaration is selected, or in a tool when the name of
- /// the declaration is passed using a command-line argument.
- class RefactoringAction {
- public:
- virtual ~RefactoringAction() {}
- /// Returns the name of the subcommand that's used by clang-refactor for this
- /// action.
- virtual StringRef getCommand() const = 0;
- virtual StringRef getDescription() const = 0;
- RefactoringActionRules createActiveActionRules();
- protected:
- /// Returns a set of refactoring actions rules that are defined by this
- /// action.
- virtual RefactoringActionRules createActionRules() const = 0;
- };
- /// Returns the list of all the available refactoring actions.
- std::vector<std::unique_ptr<RefactoringAction>> createRefactoringActions();
- } // end namespace tooling
- } // end namespace clang
- #endif // LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGACTION_H
- #ifdef __GNUC__
- #pragma GCC diagnostic pop
- #endif
|