clang-форматирование нескольких базовых стилей для нескольких языков

#llvm #clang-format

#llvm #clang-форматирование

Вопрос:

В clang-format документации вы можете установить параметры по умолчанию для clang-format , создав файл с именем .clang-format .

И синтаксис, приведенный в документе, выглядит следующим образом:

 ---
# We'll use defaults from the LLVM style, but with 4 columns indentation.
BasedOnStyle: LLVM
IndentWidth: 4
---
Language: Cpp
# Force pointers to the type for C  .
DerivePointerAlignment: false
PointerAlignment: Left
---
Language: JavaScript
# Use 100 columns for JS.
ColumnLimit: 100
---
Language: Proto
# Don't format .proto files.
DisableFormat: true
---
Language: CSharp
# Use 100 columns for C#.
ColumnLimit: 100
...
 

Однако, когда я пытаюсь применить BasedOnStyle переменную к отдельному Language , как показано ниже:

 Language: C
BasedOnStyle: LLVM

Language: Cpp
BasedOnStyle: LLVM

Language: Java
BasedOnStyle: Google

Language: JavaScript
BasedOnStyle: Google
 

похоже, это не работает.

Вопрос в том

  1. Можно ли использовать разные BasedOnStyle для разных языков?
  2. Если да, то как я могу это сделать?

Ответ №1:

Кажется, что BasedOnStyle определяет только стили для Language: Cpp .

Это может быть показано следующей командой:

 clang-format -style=llvm -dump-config
 

Приведенная выше команда выводит стили, которые завершаются успешно Language: Cpp . То же самое относится и к другим значениям BasedOnStyle .

Поэтому, если BasedOnStyle за ним следует Language ключ и значение, отличное от Cpp , clang-format произойдет сбой.

Следовательно, невозможно применять разные предопределенные стили ( LLVM Google , и т.д.) К разным языкам.