mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-24 22:08:57 -04:00

when needed This commit implements the semicolon insertion logic into the extract refactoring. The following rules are used: - extracting expression: add terminating ';' to the extracted function. - extracting statements that don't require terminating ';' (e.g. switch): add terminating ';' to the callee. - extracting statements with ';': move (if possible) the original ';' from the callee and add terminating ';'. - otherwise, add ';' to both places. Differential Revision: https://reviews.llvm.org/D39441 llvm-svn: 317343
53 lines
1.7 KiB
C++
53 lines
1.7 KiB
C++
//===--- SourceExtraction.cpp - Clang refactoring library -----------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_CLANG_LIB_TOOLING_REFACTORING_EXTRACT_SOURCE_EXTRACTION_H
|
|
#define LLVM_CLANG_LIB_TOOLING_REFACTORING_EXTRACT_SOURCE_EXTRACTION_H
|
|
|
|
#include "clang/Basic/LLVM.h"
|
|
|
|
namespace clang {
|
|
|
|
class LangOptions;
|
|
class SourceManager;
|
|
class SourceRange;
|
|
class Stmt;
|
|
|
|
namespace tooling {
|
|
|
|
/// Determines which semicolons should be inserted during extraction.
|
|
class ExtractionSemicolonPolicy {
|
|
public:
|
|
bool isNeededInExtractedFunction() const {
|
|
return IsNeededInExtractedFunction;
|
|
}
|
|
|
|
bool isNeededInOriginalFunction() const { return IsNeededInOriginalFunction; }
|
|
|
|
/// Returns the semicolon insertion policy that is needed for extraction of
|
|
/// the given statement from the given source range.
|
|
static ExtractionSemicolonPolicy compute(const Stmt *S,
|
|
SourceRange &ExtractedRange,
|
|
const SourceManager &SM,
|
|
const LangOptions &LangOpts);
|
|
|
|
private:
|
|
ExtractionSemicolonPolicy(bool IsNeededInExtractedFunction,
|
|
bool IsNeededInOriginalFunction)
|
|
: IsNeededInExtractedFunction(IsNeededInExtractedFunction),
|
|
IsNeededInOriginalFunction(IsNeededInOriginalFunction) {}
|
|
bool IsNeededInExtractedFunction;
|
|
bool IsNeededInOriginalFunction;
|
|
};
|
|
|
|
} // end namespace tooling
|
|
} // end namespace clang
|
|
|
|
#endif // LLVM_CLANG_LIB_TOOLING_REFACTORING_EXTRACT_SOURCE_EXTRACTION_H
|