152d0cfc9SShaurya Gupta //===--- SourceExtraction.cpp - Clang refactoring library -----------------===// 252d0cfc9SShaurya Gupta // 352d0cfc9SShaurya Gupta // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 452d0cfc9SShaurya Gupta // See https://llvm.org/LICENSE.txt for license information. 552d0cfc9SShaurya Gupta // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 652d0cfc9SShaurya Gupta // 752d0cfc9SShaurya Gupta //===----------------------------------------------------------------------===// 852d0cfc9SShaurya Gupta 9*b4682816SKazu Hirata #ifndef LLVM_CLANG_TOOLING_REFACTORING_EXTRACT_SOURCEEXTRACTION_H 10*b4682816SKazu Hirata #define LLVM_CLANG_TOOLING_REFACTORING_EXTRACT_SOURCEEXTRACTION_H 1152d0cfc9SShaurya Gupta 1252d0cfc9SShaurya Gupta #include "clang/Basic/LLVM.h" 1352d0cfc9SShaurya Gupta 1452d0cfc9SShaurya Gupta namespace clang { 1552d0cfc9SShaurya Gupta 1652d0cfc9SShaurya Gupta class LangOptions; 1752d0cfc9SShaurya Gupta class SourceManager; 1852d0cfc9SShaurya Gupta class SourceRange; 1952d0cfc9SShaurya Gupta class Stmt; 2052d0cfc9SShaurya Gupta 2152d0cfc9SShaurya Gupta namespace tooling { 2252d0cfc9SShaurya Gupta 2352d0cfc9SShaurya Gupta /// Determines which semicolons should be inserted during extraction. 2452d0cfc9SShaurya Gupta class ExtractionSemicolonPolicy { 2552d0cfc9SShaurya Gupta public: isNeededInExtractedFunction()2652d0cfc9SShaurya Gupta bool isNeededInExtractedFunction() const { 2752d0cfc9SShaurya Gupta return IsNeededInExtractedFunction; 2852d0cfc9SShaurya Gupta } 2952d0cfc9SShaurya Gupta isNeededInOriginalFunction()3052d0cfc9SShaurya Gupta bool isNeededInOriginalFunction() const { return IsNeededInOriginalFunction; } 3152d0cfc9SShaurya Gupta 3252d0cfc9SShaurya Gupta /// Returns the semicolon insertion policy that is needed for extraction of 3352d0cfc9SShaurya Gupta /// the given statement from the given source range. 3452d0cfc9SShaurya Gupta static ExtractionSemicolonPolicy compute(const Stmt *S, 3552d0cfc9SShaurya Gupta SourceRange &ExtractedRange, 3652d0cfc9SShaurya Gupta const SourceManager &SM, 3752d0cfc9SShaurya Gupta const LangOptions &LangOpts); 3852d0cfc9SShaurya Gupta 3952d0cfc9SShaurya Gupta private: ExtractionSemicolonPolicy(bool IsNeededInExtractedFunction,bool IsNeededInOriginalFunction)4052d0cfc9SShaurya Gupta ExtractionSemicolonPolicy(bool IsNeededInExtractedFunction, 4152d0cfc9SShaurya Gupta bool IsNeededInOriginalFunction) 4252d0cfc9SShaurya Gupta : IsNeededInExtractedFunction(IsNeededInExtractedFunction), 4352d0cfc9SShaurya Gupta IsNeededInOriginalFunction(IsNeededInOriginalFunction) {} 4452d0cfc9SShaurya Gupta bool IsNeededInExtractedFunction; 4552d0cfc9SShaurya Gupta bool IsNeededInOriginalFunction; 4652d0cfc9SShaurya Gupta }; 4752d0cfc9SShaurya Gupta 4852d0cfc9SShaurya Gupta } // end namespace tooling 4952d0cfc9SShaurya Gupta } // end namespace clang 5052d0cfc9SShaurya Gupta 51*b4682816SKazu Hirata #endif // LLVM_CLANG_TOOLING_REFACTORING_EXTRACT_SOURCEEXTRACTION_H 52