Files
acceptance-tests
data
debian
docs
external
Newtonsoft.Json
api-doc-tools
api-snapshot
aspnetwebstack
bdwgc
binary-reference-assemblies
bockbuild
boringssl
cecil
cecil-legacy
corefx
corert
helix-binaries
ikdasm
ikvm
illinker-test-assets
linker
llvm-project
clang
INPUTS
bindings
cmake
docs
examples
include
lib
ARCMigrate
AST
ASTMatchers
Analysis
Basic
CodeGen
CrossTU
Driver
Edit
Format
AffectedRangeManager.cpp
AffectedRangeManager.h
BreakableToken.cpp
BreakableToken.h
CMakeLists.txt
ContinuationIndenter.cpp
ContinuationIndenter.h
Encoding.h
Format.cpp
FormatInternal.h
FormatToken.cpp
FormatToken.h
FormatTokenLexer.cpp
FormatTokenLexer.h
NamespaceEndCommentsFixer.cpp
NamespaceEndCommentsFixer.h
SortJavaScriptImports.cpp
SortJavaScriptImports.h
TokenAnalyzer.cpp
TokenAnalyzer.h
TokenAnnotator.cpp.REMOVED.git-id
TokenAnnotator.h
UnwrappedLineFormatter.cpp
UnwrappedLineFormatter.h
UnwrappedLineParser.cpp
UnwrappedLineParser.h
UsingDeclarationsSorter.cpp
UsingDeclarationsSorter.h
WhitespaceManager.cpp
WhitespaceManager.h
Frontend
FrontendTool
Headers
Index
Lex
Parse
Rewrite
Sema
Serialization
StaticAnalyzer
Tooling
CMakeLists.txt
runtime
tools
unittests
utils
www
.arcconfig
.clang-format
.clang-tidy
.gitignore
CMakeLists.txt
CODE_OWNERS.TXT
INSTALL.txt
LICENSE.TXT
ModuleInfo.txt
NOTES.txt
README.txt
clang-tools-extra
compiler-rt
libcxx
libcxxabi
libunwind
lld
lldb
llvm
openmp
polly
nuget-buildtasks
nunit-lite
roslyn-binaries
rx
xunit-binaries
how-to-bump-roslyn-binaries.md
ikvm-native
llvm
m4
man
mcs
mk
mono
msvc
netcore
po
runtime
samples
scripts
support
tools
COPYING.LIB
LICENSE
Makefile.am
Makefile.in
NEWS
README.md
acinclude.m4
aclocal.m4
autogen.sh
code_of_conduct.md
compile
config.guess
config.h.in
config.rpath
config.sub
configure.REMOVED.git-id
configure.ac.REMOVED.git-id
depcomp
install-sh
ltmain.sh.REMOVED.git-id
missing
mkinstalldirs
mono-uninstalled.pc.in
test-driver
winconfig.h
linux-packaging-mono/external/llvm-project/clang/lib/Format/FormatInternal.h

84 lines
3.0 KiB
C
Raw Normal View History

//===--- FormatInternal.h - Format C++ code ---------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
///
/// \file
/// \brief This file declares Format APIs to be used internally by the
/// formatting library implementation.
///
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_LIB_FORMAT_FORMATINTERNAL_H
#define LLVM_CLANG_LIB_FORMAT_FORMATINTERNAL_H
#include "BreakableToken.h"
#include "clang/Tooling/Core/Lookup.h"
#include <utility>
namespace clang {
namespace format {
namespace internal {
/// \brief Reformats the given \p Ranges in the code fragment \p Code.
///
/// A fragment of code could conceptually be surrounded by other code that might
/// constrain how that fragment is laid out.
/// For example, consider the fragment of code between 'R"(' and ')"',
/// exclusive, in the following code:
///
/// void outer(int x) {
/// string inner = R"(name: data
/// ^ FirstStartColumn
/// value: {
/// x: 1
/// ^ NextStartColumn
/// }
/// )";
/// ^ LastStartColumn
/// }
///
/// The outer code can influence the inner fragment as follows:
/// * \p FirstStartColumn specifies the column at which \p Code starts.
/// * \p NextStartColumn specifies the additional indent dictated by the
/// surrounding code. It is applied to the rest of the lines of \p Code.
/// * \p LastStartColumn specifies the column at which the last line of
/// \p Code should end, in case the last line is an empty line.
///
/// In the case where the last line of the fragment contains content,
/// the fragment ends at the end of that content and \p LastStartColumn is
/// not taken into account, for example in:
///
/// void block() {
/// string inner = R"(name: value)";
/// }
///
/// Each range is extended on either end to its next bigger logic unit, i.e.
/// everything that might influence its formatting or might be influenced by its
/// formatting.
///
/// Returns a pair P, where:
/// * P.first are the ``Replacements`` necessary to make all \p Ranges comply
/// with \p Style.
/// * P.second is the penalty induced by formatting the fragment \p Code.
/// If the formatting of the fragment doesn't have a notion of penalty,
/// returns 0.
///
/// If ``Status`` is non-null, its value will be populated with the status of
/// this formatting attempt. See \c FormattingAttemptStatus.
std::pair<tooling::Replacements, unsigned>
reformat(const FormatStyle &Style, StringRef Code,
ArrayRef<tooling::Range> Ranges, unsigned FirstStartColumn,
unsigned NextStartColumn, unsigned LastStartColumn, StringRef FileName,
FormattingAttemptStatus *Status);
} // namespace internal
} // namespace format
} // namespace clang
#endif