clang-format как игнорировать extern C? - PullRequest
0 голосов
/ 03 августа 2020

Это мой текущий пример кода

#ifdef __cplusplus
extern "C"
{
#endif

typedef enum 
{
  BUY = 1, 
  SELL = 2
} OrderAction_e; 

#ifdef __cplusplus
}
#endif

После того, как я запустил формат clang, он изменится, как показано ниже.

#ifdef __cplusplus
extern "C"
{
#endif

  typedef enum 
  {
    BUY = 1, 
    SELL = 2
  } OrderAction_e; 

#ifdef __cplusplus
}
#endif

Он добавляет два дополнительных пробела для всех моих функций и typedefs.

Есть ли опция, которую я могу использовать, чтобы игнорировать внешние C фигурные скобки, чтобы мой код выглядел без изменений, как первая версия кода, который я вставил выше.

Ниже приводится версия clang, используемая в моей компании

LLVM (http://llvm.org/):
  LLVM version 3.4.2

1 Ответ

1 голос
/ 12 августа 2020

Если бы вы использовали более позднюю версию clang-format, вы могли бы подойти очень близко. Но с 3.4.2 я так не думаю.

С версией 6.0.0 вы можете очень близко подойти, но кажется необходимым поставить скобку в той же строке, что и extern "C" чтобы отключить отступ в разделе extern "C". Для этого необходимо использовать настройку Custom для BreakBeforeBraces. Такое поведение при отключении отступа блока extern "C" нигде не задокументировано, но оно работает для меня.

Попробуйте изменить свой .clang-format файл, чтобы он содержал следующее:

BraceWrapping:
  AfterClass:      true
  AfterControlStatement: true
  AfterEnum:       true # <-- You need this
  AfterFunction:   true
  AfterNamespace:  true
  AfterObjCDeclaration: true
  AfterStruct:     true
  AfterUnion:      true
  AfterExternBlock: false # <-- And this
  BeforeCatch:     true
  BeforeElse:      true
  IndentBraces:    false
  SplitEmptyFunction: false
  SplitEmptyRecord: false
  SplitEmptyNamespace: false
BreakBeforeBraces: Custom # <-- And this

Обратите внимание, что там есть множество опций, которые вы можете оставить, как обычно. Для этого важны только значения AfterEnum, AfterExternBlock и BreakBeforeBraces. См. Дополнительную информацию об этих настройках в документации .

Если у вас еще нет файла .clang-format, вы должны начать с clang-format -dump-config > .clang-format, а затем отредактировать файл.

...