//===--- RefactoringActions.cpp - Constructs refactoring actions ----------===// // // 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 // //===----------------------------------------------------------------------===// #include "clang/Tooling/Refactoring/Extract/Extract.h" #include "clang/Tooling/Refactoring/RefactoringAction.h" #include "clang/Tooling/Refactoring/RefactoringOptions.h" #include "clang/Tooling/Refactoring/Rename/RenamingAction.h" namespace clang { namespace tooling { namespace { class DeclNameOption final : public OptionalRefactoringOption { public: StringRef getName() const { return "name"; } StringRef getDescription() const { return "Name of the extracted declaration"; } }; // FIXME: Rewrite the Actions to avoid duplication of descriptions/names with // rules. class ExtractRefactoring final : public RefactoringAction { public: StringRef getCommand() const override { return "extract"; } StringRef getDescription() const override { return "(WIP action; use with caution!) Extracts code into a new function"; } /// Returns a set of refactoring actions rules that are defined by this /// action. RefactoringActionRules createActionRules() const override { RefactoringActionRules Rules; Rules.push_back(createRefactoringActionRule( CodeRangeASTSelectionRequirement(), OptionRequirement())); return Rules; } }; class OldQualifiedNameOption : public RequiredRefactoringOption { public: StringRef getName() const override { return "old-qualified-name"; } StringRef getDescription() const override { return "The old qualified name to be renamed"; } }; class NewQualifiedNameOption : public RequiredRefactoringOption { public: StringRef getName() const override { return "new-qualified-name"; } StringRef getDescription() const override { return "The new qualified name to change the symbol to"; } }; class NewNameOption : public RequiredRefactoringOption { public: StringRef getName() const override { return "new-name"; } StringRef getDescription() const override { return "The new name to change the symbol to"; } }; // FIXME: Rewrite the Actions to avoid duplication of descriptions/names with // rules. class LocalRename final : public RefactoringAction { public: StringRef getCommand() const override { return "local-rename"; } StringRef getDescription() const override { return "Finds and renames symbols in code with no indexer support"; } /// Returns a set of refactoring actions rules that are defined by this /// action. RefactoringActionRules createActionRules() const override { RefactoringActionRules Rules; Rules.push_back(createRefactoringActionRule( SourceRangeSelectionRequirement(), OptionRequirement())); // FIXME: Use NewNameOption. Rules.push_back(createRefactoringActionRule( OptionRequirement(), OptionRequirement())); return Rules; } }; } // end anonymous namespace std::vector> createRefactoringActions() { std::vector> Actions; Actions.push_back(llvm::make_unique()); Actions.push_back(llvm::make_unique()); return Actions; } RefactoringActionRules RefactoringAction::createActiveActionRules() { // FIXME: Filter out rules that are not supported by a particular client. return createActionRules(); } } // end namespace tooling } // end namespace clang