古川制御日記

佐賀県武雄市の組み込み開発屋ブログ

VSCodeでの(主に)clang-format(C/C++フォーマット)に関する設定

%USERPROFILE%\AppData\Roaming\Code\User\
ここにあるsettings.jsonの中身を変更することで各種動作を制御可能。

{
    "files.autoSave": "onFocusChange",
    "editor.mouseWheelZoom": true,
    "editor.formatOnType": true,
    "editor.formatOnSave": true,
    "editor.autoClosingBrackets": "never",
    "C_Cpp.clang_format_style": "{ BasedOnStyle: LLVM, BreakBeforeBraces: Attach, SpaceBeforeParens: Never, IndentWidth: 4, AllowShortBlocksOnASingleLine: false, AllowShortCaseLabelsOnASingleLine: false, AllowShortFunctionsOnASingleLine: false, AllowShortIfStatementsOnASingleLine: false, AllowShortLoopsOnASingleLine: false, ColumnLimit: 0, TabWidth: 4, UseTab: 'Never', SpacesBeforeTrailingComments: 1, AlignConsecutiveMacros: true, AllowShortCaseLabelsOnASingleLine: false, SpaceBeforeParens: true, PointerAlignment: Left }",
}

各オプション(C_Cpp.clang_format_style)の詳細はClang-Format Style Options — Clang 13 documentationに記載されてます。

C_Cpp.clang_format_style 項目ごとの意味[TODO]

{
    BasedOnStyle: LLVM,
    BreakBeforeBraces: Attach,
    SpaceBeforeParens: Never,
    IndentWidth: 4,
    AllowShortBlocksOnASingleLine: false,
    AllowShortCaseLabelsOnASingleLine: false,
    AllowShortFunctionsOnASingleLine: false,
    AllowShortIfStatementsOnASingleLine: false,
    AllowShortLoopsOnASingleLine: false,
    ColumnLimit: 0,
    TabWidth: 4,
    UseTab: 'Never',
    SpacesBeforeTrailingComments: 1,
    AlignConsecutiveMacros: true,
    AllowShortCaseLabelsOnASingleLine: false,
    SpaceBeforeParens: true,
    PointerAlignment: Left 
}

構造体変数配列の連続アラインメント

これは未対応なので

struct T xs[] = {
// clang-format off
  { 123,   1,  3 },
  { 1  ,  12,  3 },
  { 12 , 312,  3 },
// clang-format on
};

等で逃げる。

stackoverflow.com

clang-format.exeと.clang-formatにてフォーマットする(2021-12-23追記)

clang-format.exeをどこからか持ってきてC:/opt/bin/などに置く。

名前: Clang-Format
ID: xaver.clang-format
説明: Use Clang-Format in Visual Studio Code
バージョン: 1.9.0
パブリッシャー: xaver
VS Marketplace リンク: https://marketplace.visualstudio.com/items?itemName=xaver.clang-format

をインストール

C:\Users\%USERNAME%\AppData\Roaming\Code\User\settings.jsonは以下のように記述。

    "clang-format.executable": "C:/opt/bin/clang-format.exe",
    "[c]": {
        "editor.defaultFormatter": "xaver.clang-format"
    },
    "[cpp]": {
        "editor.defaultFormatter": "xaver.clang-format"
    },
    "[ino]": {
        "editor.defaultFormatter": "xaver.clang-format"
    },

これでフォーマッタの挙動をsettings.jsonではなく、ファイルシステム上の.clang-formatファイルで制御可能となる。

---
BasedOnStyle:       LLVM
IndentWidth:        4
TabWidth:           4
UseTab:             Never
ColumnLimit:        0
AllowShortIfStatementsOnASingleLine: true
AlignConsecutiveMacros: true
SpacesBeforeTrailingComments: 1
PointerAlignment: Left
...