clang 19.0.0git
clang::format::internal Namespace Reference


std::pair< tooling::Replacements, unsignedreformat (const FormatStyle &Style, StringRef Code, ArrayRef< tooling::Range > Ranges, unsigned FirstStartColumn, unsigned NextStartColumn, unsigned LastStartColumn, StringRef FileName, FormattingAttemptStatus *Status)
 Reformats the given Ranges in the code fragment Code.

Function Documentation

◆ reformat()

std::pair< tooling::Replacements, unsigned > clang::format::internal::reformat ( const FormatStyle Style,
StringRef  Code,
ArrayRef< tooling::Range Ranges,
unsigned  FirstStartColumn,
unsigned  NextStartColumn,
unsigned  LastStartColumn,
StringRef  FileName,
FormattingAttemptStatus Status 

Reformats the given Ranges in the code fragment 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:

  • FirstStartColumn specifies the column at which Code starts.
  • NextStartColumn specifies the additional indent dictated by the surrounding code. It is applied to the rest of the lines of Code.
  • LastStartColumn specifies the column at which the last line of 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 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 Ranges comply with Style.
  • P.second is the penalty induced by formatting the fragment 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 FormattingAttemptStatus.

Definition at line 3601 of file Format.cpp.

References clang::tooling::Replacements::add(), clang::format::addQualifierAlignmentFixerPasses(), clang::format::FormatStyle::DisableFormat, Env, clang::format::expandPresetsBraceWrapping(), clang::format::expandPresetsSpaceBeforeParens(), clang::format::expandPresetsSpacesInParens(), clang::FileName, clang::format::FormatStyle::FixNamespaceComments, clang::format::FormatStyle::IndentRequiresClause, clang::format::FormatStyle::InsertBraces, clang::format::FormatStyle::InsertTrailingCommas, clang::format::FormatStyle::isCpp(), clang::format::FormatStyle::isJavaScript(), clang::format::FormatStyle::isJson(), clang::format::isLikelyXml(), clang::format::isMpegTS(), clang::format::FormatStyle::JavaScriptQuotes, clang::format::FormatStyle::Language, clang::tooling::Replacements::merge(), clang::format::FormatStyle::ObjCPropertyAttributeOrder, clang::format::TokenAnalyzer::process(), clang::format::IntegerLiteralSeparatorFixer::process(), clang::format::FormatStyle::QualifierAlignment, clang::format::reformat(), clang::format::FormatStyle::RemoveBracesLLVM, clang::format::FormatStyle::RemoveParentheses, clang::format::FormatStyle::RemoveSemicolon, clang::format::FormatStyle::RequiresClausePosition, clang::format::FormatStyle::SeparateDefinitionBlocks, clang::format::FormatStyle::SortUsingDeclarations, and toString().

Referenced by clang::format::reformat().