1 //===--- RefactoringOptions.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_REFACTORINGOPTIONS_H 10 #define LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGOPTIONS_H 11 12 #include "clang/Basic/LLVM.h" 13 #include "clang/Tooling/Refactoring/RefactoringActionRuleRequirements.h" 14 #include "clang/Tooling/Refactoring/RefactoringOption.h" 15 #include "clang/Tooling/Refactoring/RefactoringOptionVisitor.h" 16 #include "llvm/Support/Error.h" 17 #include <optional> 18 #include <type_traits> 19 20 namespace clang { 21 namespace tooling { 22 23 /// A refactoring option that stores a value of type \c T. 24 template <typename T, 25 typename = std::enable_if_t<traits::IsValidOptionType<T>::value>> 26 class OptionalRefactoringOption : public RefactoringOption { 27 public: passToVisitor(RefactoringOptionVisitor & Visitor)28 void passToVisitor(RefactoringOptionVisitor &Visitor) final { 29 Visitor.visit(*this, Value); 30 } 31 isRequired()32 bool isRequired() const override { return false; } 33 34 using ValueType = std::optional<T>; 35 getValue()36 const ValueType &getValue() const { return Value; } 37 38 protected: 39 std::optional<T> Value; 40 }; 41 42 /// A required refactoring option that stores a value of type \c T. 43 template <typename T, 44 typename = std::enable_if_t<traits::IsValidOptionType<T>::value>> 45 class RequiredRefactoringOption : public OptionalRefactoringOption<T> { 46 public: 47 using ValueType = T; 48 getValue()49 const ValueType &getValue() const { 50 return *OptionalRefactoringOption<T>::Value; 51 } isRequired()52 bool isRequired() const final { return true; } 53 }; 54 55 } // end namespace tooling 56 } // end namespace clang 57 58 #endif // LLVM_CLANG_TOOLING_REFACTORING_REFACTORINGOPTIONS_H 59