Почему clang-формат не прерывается перед скобками геттера? - PullRequest
0 голосов
/ 11 ноября 2019

Ответ из соответствующего поста как заставить clang-формат добавить новую строку перед открытием фигурной скобки функции? не помогает.

Я использую clang-формат 9.0.0с Cppstyle в Eclipse CDT для Windows. clang-format форматирует следующий метод получения следующим образом:

int returnNumber() { return 3; }

, но я предпочитаю формат

int returnNumber()
{
    return 3;
}

Я не смог заставить clang-format сделать это, ни со сломанным стилемBS_Allman ни с пользовательским стилем. Есть ли другое решение, кроме ручного форматирования?

Мой исходный файл примера выглядит следующим образом:

Header.h

#pragma once

namespace Test
{

class MyClass
{
public:
    int returnNumber() { return 3; }
};

} /* namespace Test */

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

Language: Cpp

AlwaysBreakTemplateDeclarations: 'true'

BreakBeforeBraces: Allman

ColumnLimit: '80'

IndentWidth: '2'

NamespaceIndentation: None

Standard: Cpp11

TabWidth: '2'

UseTab: Always

PointerAlignment: Left

AlignAfterOpenBracket: DontAlign

BreakConstructorInitializers: AfterColon

MaxEmptyLinesToKeep: 2

1 Ответ

1 голос
/ 11 ноября 2019

Проблема с вашей конфигурацией в том, что вы пропустили эту опцию, которая управляет поведением clang-format с короткой функцией.

Добавьте это в вашу конфигурацию, и все будет хорошо:

AllowShortFunctionsOnASingleLine: None

Цитирование из документации в формате clang :

AllowShortFunctionsOnASingleLine (ShortFunctionStyle)

В зависимости от значения, int f() { return 0; } можно поставитьодна строка.

Возможные значения:

  • SFS_None (в конфигурации: нет) Никогда не объединять функции в одну строку.

  • SFS_InlineOnly (в конфигурации: InlineOnly) Только функции слияния, определенные внутри класса. То же, что «inline», за исключением того, что оно не подразумевает «empty»: т.е. пустые функции верхнего уровня также не объединяются.

  • SFS_Empty (в конфигурации: Empty) Только объединение пустых функций.

  • SFS_Inline (в конфигурации: Inline) Только функции слияния, определенные внутри класса. Подразумевает «пусто».

  • SFS_All (в конфигурации: Все) Объединить все функции по одной строке.

...