引数(ソースコードとスタイルの指定方法)

概要:clang-format でソースコードとスタイルを指定する方法

※それぞれの設定項目については ClangFormatスタイルオプション を参照


ソースコードを指定する

標準入力 から 標準出力 へ

概要:引数でソースコードのファイル名を指定しない場合は、標準入力からコードをフォーマットし、結果を標準出力に書き込む
C:\>type input.cpp | clang-format.exe

ファイル から 標準出力 へ

概要:引数でソースコードのファイル名を指定した場合は、ファイルをフォーマットし、結果を標準出力に書き込む
C:\>clang-format.exe input.cpp

ファイル を上書きする

概要:引数 -i を、一緒に指定すると、ファイルを読み取り、フォーマットした内容で上書きする
C:\>clang-format.exe -i input1.cpp input2.cpp

注釈

ディレクトリーで指定したい場合、 ClangApplyReplacements 参照

注釈

エディターの選択範囲を指定したい場合、 ClangFormatClangFormat との統合 参照

スタイルを指定する

clang-format はカスタムスタイルオプションを指定する2つの方法をサポートしています。

  • 直接コマンドラインオプション -style= でスタイル設定を指定する
  • -style=file を使って、プロジェクトディレクトリー内の .clang-format または _clang-format ファイルでスタイル設定を設定する

コマンドラインオプションでスタイルを指定する

コマンドラインオプション -style= でスタイル設定を指定する

C:\>clang-format.exe -style="{BasedOnStyle: llvm, IndentWidth: 8}" input.cpp > output.cpp

※それぞれの設定項目については ClangFormatスタイルオプション を参照


設定ファイルでスタイルを指定する

設定ファイルの配置場所について

-style=file を使用する場合、 clang-format は、各入力ファイルの最も近い親ディレクトリーにある、 .clang-format ファイルを見つけようとします。 また、標準入力が使用される場合、探索は、現在のディレクトリーから開始されます。


設定ファイルの作成

コマンドプロンプトで以下を実行

C:\>clang-format.exe -style=llvm -dump-config > .clang-format

.clang-format が設定ファイルとなる

.clang-format:

---
Language:        Cpp
# BasedOnStyle:  LLVM
AccessModifierOffset: -2
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlinesLeft: false
AlignOperands:   true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
  AfterClass:      false
  AfterControlStatement: false
  AfterEnum:       false
  AfterFunction:   false
  AfterNamespace:  false
  AfterObjCDeclaration: false
  AfterStruct:     false
  AfterUnion:      false
  BeforeCatch:     false
  BeforeElse:      false
  IndentBraces:    false
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Attach
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
ColumnLimit:     80
CommentPragmas:  '^ IWYU pragma:'
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat:   false
ExperimentalAutoDetectBinPacking: false
ForEachMacros:   [ foreach, Q_FOREACH, BOOST_FOREACH ]
IncludeCategories:
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
  - Regex:           '^(<|"(gtest|isl|json)/)'
    Priority:        3
  - Regex:           '.*'
    Priority:        1
IndentCaseLabels: false
IndentWidth:     2
IndentWrappedFunctionNames: false
KeepEmptyLinesAtTheStartOfBlocks: true
MacroBlockBegin: ''
MacroBlockEnd:   ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 19
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 60
PointerAlignment: Right
ReflowComments:  true
SortIncludes:    true
SpaceAfterCStyleCast: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles:  false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard:        Cpp11
TabWidth:        8
UseTab:          Never
...

※それぞれの設定項目については ClangFormatスタイルオプション を参照