xref: /llvm-project/clang/include/clang/Tooling/Refactoring/Extract/SourceExtraction.h (revision b4682816bc6e35fb4e207227f73b88b2603d4363)
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