1//===--- SourceExtraction.cpp - 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_EXTRACT_SOURCE_EXTRACTION_H
10#define LLVM_CLANG_TOOLING_REFACTORING_EXTRACT_SOURCE_EXTRACTION_H
11
12#include "clang/Basic/LLVM.h"
13
14namespace clang {
15
16class LangOptions;
17class SourceManager;
18class SourceRange;
19class Stmt;
20
21namespace tooling {
22
23/// Determines which semicolons should be inserted during extraction.
24class ExtractionSemicolonPolicy {
25public:
26  bool isNeededInExtractedFunction() const {
27    return IsNeededInExtractedFunction;
28  }
29
30  bool isNeededInOriginalFunction() const { return IsNeededInOriginalFunction; }
31
32  /// Returns the semicolon insertion policy that is needed for extraction of
33  /// the given statement from the given source range.
34  static ExtractionSemicolonPolicy compute(const Stmt *S,
35                                           SourceRange &ExtractedRange,
36                                           const SourceManager &SM,
37                                           const LangOptions &LangOpts);
38
39private:
40  ExtractionSemicolonPolicy(bool IsNeededInExtractedFunction,
41                            bool IsNeededInOriginalFunction)
42      : IsNeededInExtractedFunction(IsNeededInExtractedFunction),
43        IsNeededInOriginalFunction(IsNeededInOriginalFunction) {}
44  bool IsNeededInExtractedFunction;
45  bool IsNeededInOriginalFunction;
46};
47
48} // end namespace tooling
49} // end namespace clang
50
51#endif //LLVM_CLANG_TOOLING_REFACTORING_EXTRACT_SOURCE_EXTRACTION_H
52