プロジェクトのルートディレクトリに次の.clang形式のファイルを取得しました。
---
AlignTrailingComments: true
AllowShortFunctionsOnASingleLine: false
AllowShortIfStatementsOnASingleLine: true
AllowShortLoopsOnASingleLine: true
BreakBeforeBinaryOperators: false
IndentWidth: 4
SortIncludes: false
NamespaceIndentation: All
...
C++ヘッダーでclang-formatを実行すると問題が発生し、クラスは次のように自動インデントされます。
ご覧のとおり、publicおよびprivateのラベルは2つのスペースだけでインデントされています。しかし、私が達成しようとしているのは以下の出力です(インデントは手動で調整されました):
このようにして、コードを折りたたむことは本当に楽しいことになります。
この効果を実現するために.clang形式をどのように調整できますか?それが不可能な場合、この望ましい動作を実現するためにclang形式のソースコードにどのようにパッチを適用しますか?
編集:
AccessModifierOffsetの失敗を試しましたが、値{-2,0,2,4}の例を使用しました:
ご覧のとおり、publicブロック内のステートメントは適切にインデントされていません。
EDIT2:
私は@Henrique Jungソリューションを試しましたが、それが私が望んでいることではありません。その組み合わせを使用すると、結果は次のようなものになります。
ご覧のとおり、関数内のコンテンツは4スペースではなく8スペースインデントされています。これは良くありません。
EDIT3:
数か月前に賞金を差し上げたので、これは間違いなく興味深いので、もう一度やり直します。 clang形式のソースコードについて十分な知識を得たら、試してみますが、残念ながらできません。
私の知る限りでは、clang-formatは、非アクセス修飾子クラスの内容とは異なり、関数の内容をインデントするオプションを提供していません。つまり、次のコードを検討してください。
class A {
public:
void foo() {}
}
void bar() {
int a;
}
このコードでは、「void foo(){}」という行は常に「int a;」と同じ量だけインデントされます。 clang形式による。
使用できるように思われるスタイルに最も近いものは、アクセス修飾子をインデントしないことから得られます。例:
class A {
public:
void foo() {}
}
void bar() {
int a;
}
これは、たとえば、WebKit、Mozilla、およびLLVMスタイルによって行われます。これは、次の設定によって実現されます。
IndentWidth: 4
AccessModifierOffset: -4
AccessModifierOffsetとIndentWidthの両方を変更することで、必要な効果を達成できました。基本的に、1つ目は2つ目のオフセットとして使用されるため、。clang-formatを次のように作成すると、必要なものが得られます。
AccessModifierOffset: -4
IndentWidth: 8
AccessModifierOffset
が0の場合、public
キーワードはメンバーと同じレベルのインデントになります。ただし、IndentWidth
を変更すると、クラス宣言の外のコードも含めて、すべてのコードが8スペースインデントされます。これはサンプルコードです:
class Foo {
public:
Foo();
virtual ~Foo(); };
int main(int argc, char *argv[]) {
std::cout << "Hello world" << std::endl;
return 0;
}
私は同じ問題に遭遇し、最も速い解決策はclangのデフォルト設定のコピーを作成することです(Preference-> Package Settings-> Clang Formatで見つかります)-> Custom Style-Default)をユーザーのカスタム設定に追加(Preference-> Package Settings-> Clang Format-> カスタムスタイル-ユーザー)の場合は、コメントを外してオプションを変更し、好みに合わせます。例えば:
"ColumnLimit": 119,
// Indent width for line continuations.
"ContinuationIndentWidth": 4,
// The number of columns to use for indentation.
"IndentWidth": 4,
"TabWidth": 4,
"UseTab": "Never"