Как изменить параметры `clang-format` для предотвращения торможения скобок - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть файл C с именем asdf.c (с этим можно воспроизвести проблему, даже если он не компилируется):

struct turn_parameters turns[][NUM_MODES] =
    {
    [MOVE_LEFT] =
        {
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
        },
    [MOVE_RIGHT] =
        {
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
        },
    [MOVE_LEFT_90] =
        {
        {-0.05, .8, 219, 291, -2.3 * PI},
        {-0.05, .8, 219, 291, -2.3 * PI},
        {-0.05, .8, 219, 291, -2.3 * PI},
        },
    [MOVE_RIGHT_90] =
        {
        {-0.05, .8, 219, 291, 2.3 * PI},
        {-0.05, .8, 219, 291, 2.3 * PI},
        {-0.05, .8, 219, 291, 2.3 * PI},
        },
    [MOVE_LEFT_180] =
        {
        {-0.04, .7, 400, 479, -2.5 * PI},
        {-0.04, .7, 400, 479, -2.5 * PI},
        {-0.04, .7, 400, 479, -2.5 * PI},
        },
    [MOVE_RIGHT_180] =
        {
        {-0.04, .7, 400, 479, 2.5 * PI},
        {-0.04, .7, 400, 479, 2.5 * PI},
        {-0.04, .7, 400, 479, 2.5 * PI},
        },
};

Теперь, если я запускаю clang-format -i asdf.c (используя версию 6.0.1, но могу воспроизвести и версию 5), я позволю clang-format выполнить для меня форматирование.

Однако я бы хотел, чтобы мой код соответствовал некоторым руководствам по стилю Linux (в конце концов, я программирую на C, а не на C ++), поэтому я использую checkpatch.pl в то же время, чтобы проверить мой стиль кода. Однако Checkpatch жалуется на то, как clang-format отформатировал код:

src/asdf.c:2: ERROR: that open brace { should be on the previous line
src/asdf.c:4: WARNING: Statements should start on a tabstop
src/asdf.c:4: ERROR: that open brace { should be on the previous line
src/asdf.c:10: WARNING: Statements should start on a tabstop
src/asdf.c:10: ERROR: that open brace { should be on the previous line
src/asdf.c:16: WARNING: Statements should start on a tabstop
src/asdf.c:16: ERROR: that open brace { should be on the previous line
src/asdf.c:22: WARNING: Statements should start on a tabstop
src/asdf.c:22: ERROR: that open brace { should be on the previous line
src/asdf.c:28: WARNING: Statements should start on a tabstop
src/asdf.c:28: ERROR: that open brace { should be on the previous line
src/asdf.c:34: WARNING: Statements should start on a tabstop
src/asdf.c:34: ERROR: that open brace { should be on the previous line

У меня вопрос, как я могу настроить clang-format, чтобы избежать этих ошибок / предупреждений?

Моя текущая .clang-format конфигурация следующая:

BasedOnStyle: LLVM
IndentWidth: 8
UseTab: Always
BreakBeforeBraces: Linux
AllowShortIfStatementsOnASingleLine: false
IndentCaseLabels: false
AllowShortFunctionsOnASingleLine: false
AllowShortLoopsOnASingleLine: false

1 Ответ

0 голосов
/ 02 ноября 2018

Если вы добавите BreakBeforeBinaryOperators: All в ваш файл .clang-format, формат clang не будет переносить открывающие скобки в вашем коде, если они уже находятся в предыдущих строках. Например, следующий код не будет плохо отформатирован в формате clang:

struct turn_parameters turns[][NUM_MODES] = {
    [MOVE_LEFT] = {
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
        {0.02, .448, 166, 260, -3. * PI},
    },
    [MOVE_RIGHT] = {
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
        {0.02, .448, 166, 260, 3. * PI},
    },
};
...