Loading…

О Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€Π΅ Objective-C Π€ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ ΠΊΠΎΠ΄Π° Objective-C

ВсС Π΅Ρ‰Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ с ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·ΠΎΠΉ Objective-C для iOS ΠΈΠ»ΠΈ macOS? Π­Ρ‚ΠΎΡ‚ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ пропускаСт ваш ΠΊΠΎΠ΄ Ρ‡Π΅Ρ€Π΅Π· clang-format Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ бэкСндС ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΎΡ‚ΠΏΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ .m / .mm с ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ отступами, ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ ΠΈ скобками. ИдСально для очистки ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ², стабилизации Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠΉ ΠΈ внСдрСния Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ стиля для всСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π±Π΅Π· измСнСния локальной ΠΈΠ½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½ΠΎΠΉ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ.

ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ особСнности

  • Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ исходныС Ρ„Π°ΠΉΠ»Ρ‹ Objective-C ΠΈ Objective-C++ (`.m`, `.mm`) ΠΎΠ΄Π½ΠΈΠΌ ΠΊΠ»ΠΈΠΊΠΎΠΌ
  • Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ clang-format ΠΎΡ‚ LLVM для прСдсказуСмого форматирования ΠΏΠΎ отраслСвым стандартам
  • НормализуСт ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ², сигнатур ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сообщСний
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ скобок для интСрфСйсов, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… конструкций
  • ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹ Π² чистотС ΠΈ сгруппированными для Π±ΠΎΠ»Π΅Π΅ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹Ρ… Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΈ исходников
  • ΠžΡ‚Π»ΠΈΡ‡Π½ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для legacy-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² Π½Π° Objective-C, ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Ρ… Swift/ObjC ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ быстрой очистки ΠΏΠ΅Ρ€Π΅Π΄ PR
  • Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π° сСрвСрС с Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π°ΠΌΠΈ ΠΈ ограничСниями Ρ€Π°Π·ΠΌΠ΅Ρ€Π° для ΠΎΡ‚Π·Ρ‹Π²Ρ‡ΠΈΠ²ΠΎΠ³ΠΎ интСрфСйса

πŸ› οΈ Как Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ΄ Objective-C for objectivec-formatter

1

1. Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ΠΈΠ»ΠΈ Π·Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚Π΅ ваш ΠΊΠΎΠ΄

Π’ΡΡ‚Π°Π²ΡŒΡ‚Π΅ ваш исходный ΠΊΠΎΠ΄ Objective-C / Objective-C++ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈΠ»ΠΈ ΠΏΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ» `.m` / `.mm`. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² для ΠΈΡ… быстрой очистки.

2

2. ЗапуститС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€

НаТмитС ΠΊΠ½ΠΎΠΏΠΊΡƒ **Format**. Π’Π°Ρˆ ΠΊΠΎΠ΄ отправляСтся Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ, Π³Π΄Π΅ запускаСтся clang-format с ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΌ стиля Objective-C. ΠžΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ возвращаСтся Π·Π° сСкунды.

3

3. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅, скопируйтС ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅

ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Π²Ρ‹Π²ΠΎΠ΄, Π·Π°Ρ‚Π΅ΠΌ скопируйтС Π΅Π³ΠΎ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² Xcode ΠΈΠ»ΠΈ ваш Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. Π—Π°ΠΊΠΎΠΌΠΌΠΈΡ‚ΡŒΡ‚Π΅ чистый Ρ„Π°ΠΉΠ», Ρ‡Ρ‚ΠΎΠ±Ρ‹ ваши Π΄ΠΈΡ„Ρ„Ρ‹ Ρ„ΠΎΠΊΡƒΡΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ΅, Π° Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π»Π°Ρ….

ВСхничСскиС характСристики

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅

Π‘ΠΎΠ·Π΄Π°Π½ΠΎ для повсСднСвной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π½Π° Objective-C / Objective-C++.

Π’ΠΈΠΏΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ
.m исходныС Ρ„Π°ΠΉΠ»Ρ‹ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ прСдставлСния, ΠΌΠΎΠ΄Π΅Π»ΠΈ, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Ρ‹ΠŸΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ для Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ ΠΈ вставки.
.mm Ρ„Π°ΠΉΠ»Ρ‹ Objective-C++Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ C++ с Cocoa APIΠ€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с использованиСм ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ Objective-C++ Π² clang-format.
Π€Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ²@interface Π±Π»ΠΎΠΊΠΈ, ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Ρ‹, катСгорииВставляйтС ΠΊΠΎΠ΄ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для очистки (Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΎΠΆΠΈΠ΄Π°Π΅Ρ‚ `.m` / `.mm`).

Π”Π²ΠΈΠΆΠΎΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€Π°

Π€ΠΎΡ€ΠΌΠ°Ρ‚Π΅Ρ€ Π΄Π΅Π»Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ clang-format Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΠΎΠΌ бэкСндС.

ΠΡΠΏΠ΅ΠΊΡ‚Π”Π΅Ρ‚Π°Π»ΡŒ
Π”Π²ΠΈΠΆΠΎΠΊLLVM clang-format (Objective-C / Objective-C++)
МодСль выполнСнияБСрвСрная Ρ‡Π΅Ρ€Π΅Π· Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ `/api/objectivec-formatter`
Π’Π°ΠΉΠΌΠ°ΡƒΡ‚~25 с Π·Π°Ρ‰ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ‚Π°ΠΉΠΌΠ°ΡƒΡ‚Π° Π½Π° запрос
ΠžΠ±Π»Π°ΡΡ‚ΡŒ Ρ€Π΅Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹, отступы, скобки, нСкоторая ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ° ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΎΠ²
Π‘Π΅ΠΌΠ°Π½Ρ‚ΠΈΠΊΠ°ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π΅ мСняСтся β€” коррСктируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°
Для Π²Ρ‹ΡΠΎΠΊΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΏΡ€ΠΈΠ΅Ρ‚Π°Ρ€Π½Ρ‹Ρ… ΠΊΠΎΠ΄ΠΎΠ²Ρ‹Ρ… Π±Π°Π· ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ clang-format локально Π² вашСм CI ΠΈΠ»ΠΈ Π½Π° вашСм собствСнном ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅, Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΠΈΠ΅-Π»ΠΈΠ±ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½-инструмСнты.

Π‘Ρ‚ΠΈΠ»ΡŒ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²ΠΊΠ°

Код выводится с использованиСм ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ профиля стиля clang-format.

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡΠ§Ρ‚ΠΎ нормализуСтся?ΠŸΠΎΡ‡Π΅ΠΌΡƒ это Π²Π°ΠΆΠ½ΠΎ
Π‘ΠΈΠ³Π½Π°Ρ‚ΡƒΡ€Ρ‹ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²ΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ `-`, Ρ‚ΠΈΠΏΡ‹ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈΠ”Π΅Π»Π°Π΅Ρ‚ объявлСния ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π»Π΅Π³ΠΊΠΎ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΈ рСализациях.
ΠžΡ‚ΠΏΡ€Π°Π²ΠΊΠ° ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠΉΠŸΡ€ΠΎΠ±Π΅Π»Ρ‹ послС запятых, Π²ΠΎΠΊΡ€ΡƒΠ³ Π΄Π²ΠΎΠ΅Ρ‚ΠΎΡ‡ΠΈΠΉ ΠΈ Π²ΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²Π°Ρ…Π£Π»ΡƒΡ‡ΡˆΠ°Π΅Ρ‚ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΠΎΡΡ‚ΡŒ Π³Π»ΡƒΠ±ΠΎΠΊΠΎ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² `-[obj doSomething:withOption:]`.
Π‘ΠΊΠΎΠ±ΠΊΠΈ ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅ конструкцииРазмСщСниС скобок для `@interface`, `@implementation`, `if`, `for`, `while`ΠŸΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ расхоТдСниС стилСй ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΈ участниками.
Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‹Π“Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹ для `#import` ΠΈ `#include`ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Π°ΠΊΠΊΡƒΡ€Π°Ρ‚Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»ΠΎΠ² Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π° ΠΈ ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния.
ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹ ΠΈ Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅Π•Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½Ρ‹Π΅ отступы для Π±Π»ΠΎΠΊΠΎΠ², ΠΏΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… областСйУстраняСт смСщСнныС Π±Π»ΠΎΠΊΠΈ ΠΈΠ·-Π·Π° быстрых Ρ€ΡƒΡ‡Π½Ρ‹Ρ… ΠΏΡ€Π°Π²ΠΎΠΊ.

ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΡ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½ΠΎ для Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ Objective-C Π±Π΅Π· Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΊΠΈ вашСго Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π°.

Π’ΠΈΠΏ Π²Π²ΠΎΠ΄Π°ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ
ВставлСнный исходный ΠΊΠΎΠ΄~2 ΠœΠ‘ тСкстаЖСсткоС ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅, примСняСмоС ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΎΠΉ Π½Π° сСрвСр.
Π—Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»~5 ΠœΠ‘ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΎ настройкой `maxFileSizeBytes` инструмСнта.
Випичная Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ°< 1–2 сЗависит ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ„Π°ΠΉΠ»Π°, сСтСвой Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ сСрвСра.
Π Π΅ΠΆΠΈΠΌΡ‹ сбоСвВаймаут / сообщСниС ΠΎΠ± ошибкСОшибки ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ Ρ‡Π΅Ρ‚ΠΊΠΎ, вмСсто зависания интСрфСйса.

МодСль ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ

БСрвСрная ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°, врСмСнная, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для форматирования.

ΠΡΠΏΠ΅ΠΊΡ‚ΠŸΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π°ΠšΠΎΠ΄ отправляСтся ΠΏΠΎ HTTPS Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ форматирования.
Π₯Ρ€Π°Π½Π΅Π½ΠΈΠ΅ΠŸΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΎ ΠΊΠ°ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅: Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² памяти ΠΈ Π½Π΅ хранятся долгосрочно.
Π‘Π΅ΠΊΡ€Π΅Ρ‚Ρ‹Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΠ·Π±Π΅Π³Π°Ρ‚ΡŒ вставки API-ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² ΠΈΠ»ΠΈ производствСнных ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ½Π»Π°ΠΉΠ½-инструмСнты.
Π›ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот инструмСнт для Π½Π΅Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ быстрой очистки; сохраняйтС CI ΠΈ критичСскоС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² собствСнной инфраструктурС.

Командная строка clang-format для Objective-C

Для повсСднСвной Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ CI, clang-format Π² вашСм локальном инструмСнтарии являСтся каноничСским способом поддСрТания согласованности ΠΊΠΎΠ΄Π° Objective-C.

macOS / 🐧 Linux

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° `.m` Π½Π° мСстС

clang-format -i MyViewController.m

ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ Ρ„Π°ΠΉΠ» Π½Π° дискС с использованиСм настроСнного стиля (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ· `.clang-format`).

ΠŸΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ просмотр Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ‹Π²ΠΎΠ΄Π° Π±Π΅Π· измСнСния Ρ„Π°ΠΉΠ»Π°

clang-format MyViewController.m

Π’Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ Π² stdout, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ сначала ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ различия.

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ всСх исходных Ρ„Π°ΠΉΠ»ΠΎΠ² Objective-C Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅

find . -name "*.m" -o -name "*.mm" | xargs clang-format -i

ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎ всСй ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π±Π°Π·Π΅ Objective-C / Objective-C++.

Windows

Π€ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π°

clang-format.exe -i MyClass.h

ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΡ‡Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» Π½Π° мСстС с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ стилСм clang-format.

Запуск Π² составС скрипта

forfiles /S /M *.m /C "cmd /c clang-format.exe -i @file"

ΠŸΡ€ΠΎΡΡ‚ΠΎΠ΅ ΠΏΠ°ΠΊΠ΅Ρ‚Π½ΠΎΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ исходных Ρ„Π°ΠΉΠ»ΠΎΠ² Objective-C Π² Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚Π΅ ΡΡ‚ΠΈΠ»ΡŒ вашСй ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² Ρ„Π°ΠΉΠ»Π΅ `.clang-format` Π² ΠΊΠΎΡ€Π½Π΅ вашСго рСпозитория, Π·Π°Ρ‚Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот Π²Π΅Π±-инструмСнт для быстрых Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… исправлСний, Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ clang-format β€” для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ поддСрТания Сдинообразия Π²ΠΎ всСм Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ случаи примСнСния

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ для iOS / macOS

ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΠΉΡ‚Π΅ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡƒΡ‰ΠΈΠ΅ Objective-C прилоТСния Π² сопровоТдСнии наряду с Π½ΠΎΠ²Ρ‹ΠΌΠΈ модулями Π½Π° Swift.

  • ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚Π΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Ρ‹ прСдставлСний ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΡ€ΡƒΠΏΠ½Ρ‹ΠΌΠΈ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³Π°ΠΌΠΈ.
  • ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠΉΡ‚Π΅ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ ΡΡ‚ΠΈΠ»ΡŒ Π² смСшанной ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΡ‚Π°Ρ€ΡˆΠΈΡ… ΠΈ ΠΌΠ»Π°Π΄ΡˆΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Objective-C.
  • ЗапускайтС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚Π°ΠΌΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠΌΠ΅Π½ΡŒΡˆΠΈΡ‚ΡŒ ΡˆΡƒΠΌΠ½Ρ‹Π΅ различия Π² pull request'Π°Ρ….
@interface MyViewController : UIViewController
@property(nonatomic, strong) NSString *titleText;
@end

@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];NSLog(@"Loaded: %@",_titleText);}
@end

ΠŸΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΊΠ° ΠΊ Ρ€Π΅Π²ΡŒΡŽ ΠΊΠΎΠ΄Π° ΠΈ Pull Request'Π°ΠΌ

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ шаг, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒ обсуТдСния Ρ€Π΅Π²ΡŒΡŽ Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ΅.

  • ЗапускайтС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π½Ρ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ… ΠΏΠ΅Ρ€Π΅Π΄ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ PR, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡˆΡƒΠΌ ΠΎΡ‚ ΠΏΡ€ΠΎΠ±Π΅Π»ΠΎΠ².
  • Π£ΠΌΠ΅Π½ΡŒΡˆΠ°ΠΉΡ‚Π΅ различия ΠΈ ΡƒΠΏΡ€ΠΎΡ‰Π°ΠΉΡ‚Π΅ Ρ€Π΅Π²ΡŒΡŽ, стабилизируя ΡΡ‚ΠΈΠ»ΡŒ скобок ΠΈ отступов.
  • Π‘ΠΎΠΊΡ€Π°Ρ‰Π°ΠΉΡ‚Π΅ споры ΠΎ стилС, дСлСгируя ΠΈΡ… Π΅Π΄ΠΈΠ½ΠΎΠΌΡƒ ΠΏΡ€ΠΎΡ„ΠΈΠ»ΡŽ clang-format.
// ΠŸΠ΅Ρ€Π΅Π΄ Ρ€Π΅Π²ΡŒΡŽ: нСпостоянныС ΠΏΡ€ΠΎΠ±Π΅Π»Ρ‹
if(showAlert){[self showAlertWithMessage:message];}

// ПослС форматирования
if (showAlert) {
  [self showAlertWithMessage:message];
}

❓ Frequently Asked Questions

πŸ› οΈΠšΠ°ΠΊΠΎΠΉ Π΄Π²ΠΈΠΆΠΎΠΊ форматирования ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π²Π½ΡƒΡ‚Ρ€ΠΈ?

Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ `clang-format` ΠΎΡ‚ LLVM, стандартный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ для C, C++, Objective-C, Objective-C++ ΠΈ связанных языков. Π’Π°Ρˆ ΠΊΠΎΠ΄ анализируСтся ΠΈ пСрСпСчатываСтся Π² соотвСтствии со ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΌ стиля Objective-C.

πŸ“„ΠšΠ°ΠΊΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ?

Π—Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ для Ρ„Π°ΠΉΠ»ΠΎΠ² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ `.m` ΠΈ `.mm`. Π’Ρ‹ всС Π΅Ρ‰Π΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ содСрТимоС Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² (`.h`) Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ Π² Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ для ΠΈΡ… очистки, Π½ΠΎ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Ρ„Π°ΠΉΠ»ΠΎΠ² сСйчас сосрСдоточСна Π½Π° `.m` / `.mm`.

πŸ“ΠœΠΎΠ³Ρƒ Π»ΠΈ я ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ отступами ΠΈΠ»ΠΈ максимальной ΡˆΠΈΡ€ΠΈΠ½ΠΎΠΉ строки ΠΈΠ· интСрфСйса?

Π’Π΅Π±-интСрфСйс запускаСт clang-format с ΠΏΡ€Π΅Π΄ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΌ стиля Objective-C. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ΅Π½ Π΄Π΅Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ Π½Π°Π΄ опциями, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ `IndentWidth` ΠΈΠ»ΠΈ `ColumnLimit`, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„Π°ΠΉΠ» `.clang-format` ΠΈ запускайтС clang-format локально Π² вашСм ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΠ»ΠΈ CI.

πŸ”Π‘ΠΎΡ…Ρ€Π°Π½ΡΠ΅Ρ‚ΡΡ ΠΈΠ»ΠΈ логируСтся Π»ΠΈ ΠΌΠΎΠΉ исходный ΠΊΠΎΠ΄?

Код отправляСтся ΠΏΠΎ HTTPS Π½Π° Π·Π°Ρ‰ΠΈΡ‰Π΅Π½Π½ΡƒΡŽ ΠΊΠΎΠ½Π΅Ρ‡Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ форматирования ΠΈ обрабатываСтся ΠΊΠ°ΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅. Он Π½Π΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для долгосрочного хранСния. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΊΠ°ΠΊ Π»ΡƒΡ‡ΡˆΠ°Ρ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, ΠΈΠ·Π±Π΅Π³Π°ΠΉΡ‚Π΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ сСкрСтов, ΡƒΡ‡Π΅Ρ‚Π½Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π²Ρ‹ΡΠΎΠΊΠΎΡ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ Π² любой ΠΎΠ½Π»Π°ΠΉΠ½-инструмСнт.

βš οΈΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π°?

clang-format фокусируСтся Π½Π° ΠΏΡ€ΠΎΠ±Π΅Π»Π°Ρ… ΠΈ располоТСнии ΠΈ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ сСмантику. Однако, Ссли ваш ΠΊΠΎΠ΄ полагаСтся Π½Π° Π½Π΅ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Π΅ макросы ΠΈΠ»ΠΈ инструмСнты, Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ, всСгда запускайтС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π° ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ‚ΠΊΠ΅ ΠΈΠ»ΠΈ Ρ€Π΅Π·Π΅Ρ€Π²Π½ΠΎΠΉ ΠΊΠΎΠΏΠΈΠΈ ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΠΉΡ‚Π΅ΡΡŒ Π½Π° тСсты для подтвСрТдСния нСизмСнности повСдСния.

πŸš€ΠšΠΎΠ³Π΄Π° ΠΌΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ этот Π²Π΅Π±-инструмСнт вмСсто локального clang-format?

Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ этот Π²Π΅Π±-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Ρ‰ΠΈΠΊ для быстрой очистки, Ρ€Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈΠ»ΠΈ ΠΊΠΎΠ³Π΄Π° Π²Ρ‹ Π½Π° машинС Π±Π΅Π· установлСнного clang-format. Для ΠΏΠΎΠ»Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ², Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… процСссов ΠΈ обСспСчСния стиля Π΄Π΅Ρ€ΠΆΠΈΡ‚Π΅ clang-format Π² вашСм Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Π΅ ΠΈ CI с ΠΎΠ±Ρ‰Π΅ΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠ΅ΠΉ `.clang-format`.

Pro Tips

Best Practice

ЗапускайтС Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΈΡ„Ρ„Ρ‹ pull request Π±Ρ‹Π»ΠΈ сосрСдоточСны Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠΈ, Π° Π½Π΅ Π½Π° расстановкС скобок.

CI Tip

Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ шаг `clang-format` Π² ваш CI (ΠΈΠ»ΠΈ pre-commit Ρ…ΡƒΠΊ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ стиля Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π΄ΠΎΡ…ΠΎΠ΄ΠΈΠ»ΠΈ Π΄ΠΎ ΠΊΠΎΠ΄-Ρ€Π΅Π²ΡŒΡŽ.

Best Practice

Π‘ΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΡƒΠΉΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‹; это ΡƒΠΌΠ΅Π½ΡŒΡˆΠ°Π΅Ρ‚ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Ρ‹ слияния, ΠΊΠΎΠ³Π΄Π° нСсколько Ρ‡Π»Π΅Π½ΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ с ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ.

Best Practice

Π˜Π·Π±Π΅Π³Π°ΠΉΡ‚Π΅ вставки производствСнных сСкрСтов ΠΈΠ»ΠΈ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² Π² Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠ½Π»Π°ΠΉΠ½-Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‚Π΅Ρ€Ρ‹. Для Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° запускайтС clang-format локально Π² вашСй собствСнной инфраструктурС.

Additional Resources

Other Tools