Mercurial > hg > CbC > CbC_llvm
view clang/lib/Tooling/Refactoring/RefactoringActions.cpp @ 176:de4ac79aef9d
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 17:13:11 +0900 |
parents | 1d019706d866 |
children | 2e18cbf3894f |
line wrap: on
line source
//===--- 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<std::string> { 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<ExtractFunction>( CodeRangeASTSelectionRequirement(), OptionRequirement<DeclNameOption>())); return Rules; } }; class OldQualifiedNameOption : public RequiredRefactoringOption<std::string> { 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<std::string> { 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<std::string> { 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<RenameOccurrences>( SourceRangeSelectionRequirement(), OptionRequirement<NewNameOption>())); // FIXME: Use NewNameOption. Rules.push_back(createRefactoringActionRule<QualifiedRenameRule>( OptionRequirement<OldQualifiedNameOption>(), OptionRequirement<NewQualifiedNameOption>())); return Rules; } }; } // end anonymous namespace std::vector<std::unique_ptr<RefactoringAction>> createRefactoringActions() { std::vector<std::unique_ptr<RefactoringAction>> Actions; Actions.push_back(std::make_unique<LocalRename>()); Actions.push_back(std::make_unique<ExtractRefactoring>()); 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