рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ
- Objective-C рдФрд░ Objective-C++ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ (`.m`, `.mm`) рдПрдХ рдХреНрд▓рд┐рдХ рдореЗрдВ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░реЗрдВ
- LLVM рдХреЗ clang-format рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд, рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдФрд░ рдЙрджреНрдпреЛрдЧ-рдорд╛рдирдХ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ
- рдСрдкрд░реЗрдЯрд░реЛрдВ, рдореЗрдердб рд╕рд┐рдЧреНрдиреЗрдЪрд░ рдФрд░ рдореИрд╕реЗрдЬ рднреЗрдЬрдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реНрдкреЗрд╕ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ
- рдЗрдВрдЯрд░рдлреЗрд╕, рдЗрдореНрдкреНрд▓реАрдореЗрдВрдЯреЗрд╢рди рдФрд░ рдХрдВрдЯреНрд░реЛрд▓-рдлреНрд▓реЛ рдХреЗ рд▓рд┐рдП рд╕реБрд╕рдВрдЧрдд рдмреНрд░реЗрд╕ рд╕реНрдЯрд╛рдЗрд▓ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ
- рдЗрдореНрдкреЛрд░реНрдЯ рдХреЛ рд╕рд╛рдл рдФрд░ рд╕рдореВрд╣реАрдХреГрдд рд░рдЦрддрд╛ рд╣реИ, рд╣реЗрдбрд░ рдФрд░ рд╕реНрд░реЛрдд рдХреЛ рдЕрдзрд┐рдХ рдкрдардиреАрдп рдмрдирд╛рддрд╛ рд╣реИ
- рд▓реАрдЧреЗрд╕реА Objective-C рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕, рдорд┐рд╢реНрд░рд┐рдд Swift/ObjC рдРрдкреНрд╕ рдФрд░ рддреНрд╡рд░рд┐рдд рдкреНрд░реА-PR рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░реАрди
- UI рдХреЛ рдЙрддреНрддрд░рджрд╛рдпреА рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рдФрд░ рд╕рд╛рдЗрдЬ рд╕реАрдорд╛ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░-рд╕рдорд░реНрдерд┐рдд рдирд┐рд╖реНрдкрд╛рджрди
ЁЯЫая╕П Objective-C рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд░реЗрдВ for objectivec-formatter
1. рдЕрдкрдирд╛ рдХреЛрдб рдкреЗрд╕реНрдЯ рдпрд╛ рдЕрдкрд▓реЛрдб рдХрд░реЗрдВ
рдЕрдкрдирд╛ Objective-C / Objective-C++ рд╕реНрд░реЛрдд рдПрдбрд┐рдЯрд░ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ рдпрд╛ `.m` / `.mm` рдлрд╝рд╛рдЗрд▓ рдХреЛ рдбреНрд░реИрдЧ-рдПрдВрдб-рдбреНрд░реЙрдк рдХрд░реЗрдВред рдЖрдк рд╣реЗрдбрд░ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рднреА рддреНрд╡рд░рд┐рдд рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рдкреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
2. рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдЪрд▓рд╛рдПрдВ
**рдлрд╝реЙрд░реНрдореЗрдЯ** рдмрдЯрди рджрдмрд╛рдПрдВред рдЖрдкрдХрд╛ рдХреЛрдб рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ clang-format Objective-C рд╕реНрдЯрд╛рдЗрд▓ рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИред рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд░рд┐рдгрд╛рдо рд╕реЗрдХрдВрдбреЛрдВ рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред
3. рд╕рдореАрдХреНрд╖рд╛ рдХрд░реЗрдВ, рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдХрдорд┐рдЯ рдХрд░реЗрдВ
рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░реЗрдВ, рдлрд┐рд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ Xcode рдпрд╛ рдЕрдкрдиреЗ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВред рд╕рд╛рдл рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХрдорд┐рдЯ рдХрд░реЗрдВ рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдбрд┐рдлреНрд╕ рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рдХреЗ рдмрдЬрд╛рдп рд▓реЙрдЬрд┐рдХ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рд╣реЗрдВред
рддрдХрдиреАрдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛рдПрдВ
рд╕рдорд░реНрдерд┐рдд рдЗрдирдкреБрдЯ
рд░реЛрдЬрдорд░реНрд░рд╛ рдХреЗ Objective-C / Objective-C++ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рддред
| рдкреНрд░рдХрд╛рд░ | рдЙрджрд╛рд╣рд░рдг | рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ |
|---|---|---|
| .m рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЗрдВ | рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░, рдореЙрдбрд▓, рдореИрдиреЗрдЬрд░ | рдЕрдкрд▓реЛрдб рдФрд░ рдкреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рддред |
| .mm Objective-C++ рдлрд╝рд╛рдЗрд▓реЗрдВ | C++ рдХреЛ Cocoa API рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рдирд╛ | clang-format рдХреЗ Objective-C++ рд╕рдорд░реНрдерди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝реЙрд░реНрдореЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред |
| рд╣реЗрдбрд░ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ | @interface рдмреНрд▓реЙрдХ, рдкреНрд░реЛрдЯреЛрдХреЙрд▓, рд╢реНрд░реЗрдгрд┐рдпрд╛рдБ | рд╕рдлрд╛рдИ рдХреЗ рд▓рд┐рдП рд╣реЗрдбрд░ рдХреЛрдб рд╕реАрдзреЗ рдПрдбрд┐рдЯрд░ рдореЗрдВ рдкреЗрд╕реНрдЯ рдХрд░реЗрдВ (рдлрд╝рд╛рдЗрд▓ рдЕрдкрд▓реЛрдб `.m` / `.mm` рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ)ред |
рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдЗрдВрдЬрди
рдлрд╝реЙрд░реНрдореЗрдЯрд░ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдмреИрдХрдПрдВрдб рдкрд░ clang-format рдХреЛ рд╕реМрдВрдкрддрд╛ рд╣реИред
| рдкрд╣рд▓реВ | рд╡рд┐рд╡рд░рдг |
|---|---|
| рдЗрдВрдЬрди | LLVM clang-format (Objective-C / Objective-C++) |
| рдирд┐рд╖реНрдкрд╛рджрди рдореЙрдбрд▓ | рдПрдХ рд╕рдорд░реНрдкрд┐рдд `/api/objectivec-formatter` рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд░реНрд╡рд░-рд╕рдорд░реНрдерд┐рдд |
| рдЯрд╛рдЗрдордЖрдЙрдЯ | рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз ~25 рд╕реЗрдХрдВрдб рд╕реБрд░рдХреНрд╖рд╛ рдЯрд╛рдЗрдордЖрдЙрдЯ |
| рдкреБрдирдГ рд╕реНрд╡рд░реВрдкрдг рдХреНрд╖реЗрддреНрд░ | рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди, рдмреНрд░реЗрд╕рд┐рдЬрд╝, рдХреБрдЫ рдЖрдпрд╛рдд рд▓реЗрдЖрдЙрдЯ |
| рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ | рдХреЛрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдирд╣реАрдВ рдмрджрд▓рд╛ рдЬрд╛рддрд╛тАФрдХреЗрд╡рд▓ рд▓реЗрдЖрдЙрдЯ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ |
рд╢реИрд▓реА рдФрд░ рд▓реЗрдЖрдЙрдЯ
рдХреЛрдб рдПрдХ рд╕реНрдерд┐рд░ clang-format рд╢реИрд▓реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореБрджреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
| рд╢реНрд░реЗрдгреА | рдХреНрдпрд╛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╣реИ? | рдпрд╣ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ |
|---|---|---|
| рд╡рд┐рдзрд┐ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ | `-` рдХреЗ рдЖрд╕рдкрд╛рд╕ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рд░рд┐рдЯрд░реНрди рдкреНрд░рдХрд╛рд░, рдкреИрд░рд╛рдореАрдЯрд░ рдФрд░ рдкреЙрдЗрдВрдЯрд░реНрд╕ | рд╣реЗрдбрд░ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛рдУрдВ рдХреЛ рд╕реНрдХреИрди рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред |
| рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛ | рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдХреЗ рдмрд╛рдж рд░рд┐рдХреНрдд рд╕реНрдерд╛рди, рдХреЛрд▓рди рдХреЗ рдЖрд╕рдкрд╛рд╕ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓ рдореЗрдВ | рдЧрд╣рд░рд╛рдИ рд╕реЗ рдиреЗрд╕реНрдЯреЗрдб `-[obj doSomething:withOption:]` рдХреЙрд▓ рдХреА рдкрдардиреАрдпрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддрд╛ рд╣реИред |
| рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг-рдкреНрд░рд╡рд╛рд╣ | `@interface`, `@implementation`, `if`, `for`, `while` рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрд╕ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ | рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдпреЛрдЧрджрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╢реИрд▓реА рдмрд╣рд╛рд╡ рдХреЛ рд░реЛрдХрддрд╛ рд╣реИред |
| рдЖрдпрд╛рдд | `#import` рдФрд░ `#include` рдХреЗ рд▓рд┐рдП рд╕рдореВрд╣реАрдХрд░рдг рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рди | рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд╕рд╛рдл-рд╕реБрдерд░рд╛ рд░рдЦрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рд▓рдп рд╕рдВрдШрд░реНрд╖реЛрдВ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред |
| рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдФрд░ рд╕рдВрд░реЗрдЦрдг | рдмреНрд▓реЙрдХ, рд╕реНрд╡рд┐рдЪ рдФрд░ рдиреЗрд╕реНрдЯреЗрдб рд╕реНрдХреЛрдк рдХреЗ рд▓рд┐рдП рдПрдХрд╕рдорд╛рди рдЗрдВрдбреЗрдВрдЯреЗрд╢рди | рддреНрд╡рд░рд┐рдд рдореИрдиреНрдпреБрдЕрд▓ рд╕рдВрдкрд╛рджрди рд╕реЗ рдЧрд▓рдд рд╕рдВрд░реЗрдЦрд┐рдд рдмреНрд▓реЙрдХреНрд╕ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред |
рд╕реАрдорд╛рдПрдБ рдФрд░ рдкреНрд░рджрд░реНрд╢рди
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ Objective-C рдРрдкреНрд╕ рдФрд░ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдЬрд╝ рдХреЗ рд▓рд┐рдП рдЖрдХрд╛рд░рд┐рдд, рдЖрдкрдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдлреНрд░реАрдЬрд╝ рдХрд┐рдП рдмрд┐рдирд╛ред
| рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░ | рдЕрдиреБрдорд╛рдирд┐рдд рд╕реАрдорд╛ | рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ |
|---|---|---|
| рдЪрд┐рдкрдХрд╛рдпрд╛ рдЧрдпрд╛ рд╕реНрд░реЛрдд | ~2 MB рдкрд╛рда | рдмреИрдХрдПрдВрдб рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд▓рд╛рдЧреВ рдХрдареЛрд░ рд╕реАрдорд╛ред |
| рдЕрдкрд▓реЛрдб рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓ | ~5 MB | рдЯреВрд▓ рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП `maxFileSizeBytes` рджреНрд╡рд╛рд░рд╛ рд╕реАрдорд┐рддред |
| рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рд▓рдВрдмрддрд╛ | < 1тАУ2 s | рдлрд╝рд╛рдЗрд▓ рдЖрдХрд╛рд░, рдиреЗрдЯрд╡рд░реНрдХ рд╡рд┐рд▓рдВрдмрддрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рд▓реЛрдб рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред |
| рд╡рд┐рдлрд▓рддрд╛ рдореЛрдб | рдЯрд╛рдЗрдордЖрдЙрдЯ / рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ | рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рд╛рдлрд╝ рддрд░реАрдХреЗ рд╕реЗ рджрд┐рдЦрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдмрдЬрд╛рдп UI рдХреЛ рд▓рдЯрдХрд╛рдП рд░рдЦрдиреЗ рдХреЗред |
рдЧреЛрдкрдиреАрдпрддрд╛ рдореЙрдбрд▓
рдХреЗрд╡рд▓ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рдорд░реНрдерд┐рдд, рдХреНрд╖рдгрд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдгред
| рдкрд╣рд▓реВ | рд╡реНрдпрд╡рд╣рд╛рд░ |
|---|---|
| рдкрд░рд┐рд╡рд╣рди | рдХреЛрдб 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 рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдмреИрдЪ рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧред
рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ
iOS / macOS рдРрдк рд╡рд┐рдХрд╛рд╕
рдирдП рд╕реНрд╡рд┐рдлреНрдЯ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ Objective-C рдРрдкреНрд╕ рдХреЛ рд░рдЦрд░рдЦрд╛рд╡ рдпреЛрдЧреНрдп рдмрдирд╛рдП рд░рдЦреЗрдВред
- рдкреНрд░рдореБрдЦ рд░рд┐рдлреИрдХреНрдЯрд░ рд╕реЗ рдкрд╣рд▓реЗ рдкреБрд░рд╛рдиреЗ рд╡реНрдпреВ рдХрдВрдЯреНрд░реЛрд▓рд░ рдФрд░ рдореЙрдбрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдВред
- рд╡рд░рд┐рд╖реНрда рдФрд░ рдХрдирд┐рд╖реНрда Objective-C рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдорд┐рд╢реНрд░рд┐рдд рдЯреАрдо рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╢реИрд▓реА рд▓рд╛рдЧреВ рдХрд░реЗрдВред
- рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╢реЛрд░рдЧреБрд▓ рд╡рд╛рд▓реЗ рдЕрдВрддрд░реЛрдВ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд┐рдЯ рд╕реЗ рдкрд╣рд▓реЗ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдЪрд▓рд╛рдПрдВред
@interface MyViewController : UIViewController
@property(nonatomic, strong) NSString *titleText;
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];NSLog(@"Loaded: %@",_titleText);}
@end
рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рддреИрдпрд╛рд░реА
рд╕рдореАрдХреНрд╖рд╛ рдЪрд░реНрдЪрд╛рдУрдВ рдХреЛ рддрд░реНрдХ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХреЛ рдкреНрд░реА-рдлреНрд▓рд╛рдЗрдЯ рдЪрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕ рд╢реЛрд░ рдХреЛ рдЦрддреНрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдЦреЛрд▓рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдмрджрд▓реА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдкрд░ рдлреЙрд░реНрдореЗрдЯрд░ рдЪрд▓рд╛рдПрдВред
- рдмреНрд░реЗрд╕ рд╢реИрд▓реА рдФрд░ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдХреЛ рд╕реНрдерд┐рд░ рдХрд░рдХреЗ рдбрд┐рдлреНрд╕ рдХреЛ рдЫреЛрдЯрд╛ рдФрд░ рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдПрдВред
- рдПрдХрд▓ clang-format рдкреНрд░реЛрдлрд╛рдЗрд▓ рдХреЛ рд╕реМрдВрдкрдХрд░ рд╢реИрд▓реА рдмрд╣рд╕реЛрдВ рдХреЛ рдХрдо рдХрд░реЗрдВред
// Before review: inconsistent spacing
if(showAlert){[self showAlertWithMessage:message];}
// After formatting
if (showAlert) {
[self showAlertWithMessage:message];
}
тЭУ Frequently Asked Questions
ЁЯЫая╕ПрдЕрдВрджрд░реВрдиреА рд░реВрдк рд╕реЗ рдХрд┐рд╕ рдлреЙрд░реНрдореЗрдЯрд░ рдЗрдВрдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
ЁЯУДрдХреМрди рд╕реА рдлрд╝рд╛рдЗрд▓ рдкреНрд░рдХрд╛рд░ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ?
ЁЯУПрдХреНрдпрд╛ рдореИрдВ UI рд╕реЗ рдЗрдВрдбреЗрдВрдЯреЗрд╢рди рдпрд╛ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдЗрди рдЪреМрдбрд╝рд╛рдИ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
ЁЯФРрдХреНрдпрд╛ рдореЗрд░рд╛ рд╕реНрд░реЛрдд рдХреЛрдб рд╕рдВрдЧреНрд░рд╣реАрдд рдпрд╛ рд▓реЙрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
HTTPS рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЕрд▓реНрдкрдХрд╛рд▓рд┐рдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реЗ рджреАрд░реНрдШрдХрд╛рд▓рд┐рдХ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХрд╛ рдЗрд░рд╛рджрд╛ рдирд╣реАрдВ рд╣реИред рдлрд┐рд░ рднреА, рдПрдХ рд╕рд░реНрд╡реЛрддреНрддрдо рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдХрд┐рд╕реА рднреА рдСрдирд▓рд╛рдЗрди рдЯреВрд▓ рдореЗрдВ рдЧреБрдкреНрдд рдЬрд╛рдирдХрд╛рд░реА, рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕, рдпрд╛ рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВредтЪая╕ПрдХреНрдпрд╛ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХрднреА рдореЗрд░реЗ рдХреЛрдб рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ?
ЁЯЪАрдореБрдЭреЗ рдЗрд╕ рд╡реЗрдм рдЯреВрд▓ рдмрдирд╛рдо рд╕реНрдерд╛рдиреАрдп clang-format рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
Pro Tips
рдмреНрд░реЗрд╕ рдкреНрд▓реЗрд╕рдореЗрдВрдЯ рдХреЗ рдмрдЬрд╛рдп рд╡реНрдпрд╡рд╣рд╛рд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдорд┐рдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдлреЙрд░реНрдореЗрдЯрд░ рдЪрд▓рд╛рдПрдВред
рдЕрдкрдиреЗ CI рдореЗрдВ рдПрдХ `clang-format` рдЪрд░рдг рдЬреЛрдбрд╝реЗрдВ (рдпрд╛ рдкреНрд░реА-рдХрдорд┐рдЯ рд╣реБрдХ) рддрд╛рдХрд┐ рд╕реНрдЯрд╛рдЗрд▓ рд╕рдВрдмрдВрдзреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдХреЛрдб рд░рд┐рд╡реНрдпреВ рддрдХ рдХрднреА рди рдкрд╣реБрдВрдЪреЗрдВред
рдЗрдореНрдкреЛрд░реНрдЯреНрд╕ рдХреЛ рд╕реЙрд░реНрдЯреЗрдб рдФрд░ рдЧреНрд░реБрдк рдХрд┐рдпрд╛ рд░рдЦреЗрдВ; рдЗрд╕рд╕реЗ рдХрдИ рдЯреАрдордореЗрдЯреНрд╕ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╣реА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдЫреВрдиреЗ рдкрд░ рдорд░реНрдЬ рдХреЙрдиреНрдлреНрд▓рд┐рдХреНрдЯ рдХрдо рд╣реЛрддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рднреА рдСрдирд▓рд╛рдЗрди рдлреЙрд░реНрдореЗрдЯрд░ рдореЗрдВ рдкреНрд░реЛрдбрдХреНрд╢рди рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдпрд╛ рдЯреЛрдХрди рдкреЗрд╕реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдмрдЪреЗрдВред рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреЛрдб рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдХреЗ рдЕрдВрджрд░ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ clang-format рдЪрд▓рд╛рдПрдВред
Additional Resources
Other Tools
- рд╕реАрдПрд╕рдПрд╕ рд╕реБрдВрджрд░реАрдХрд░рдг
- рдПрдЪрдЯреАрдПрдордПрд▓ рд╕реБрдВрджрд░реАрдХрд░рдг
- рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрдВрджрд░реАрдХрд░рдг
- рдкреАрдПрдЪрдкреА рд╕реБрдВрджрд░реАрдХрд░рдг
- рд░рдВрдЧ рдЪрдпрдирдХрд░реНрддрд╛
- рд╕реНрдкреНрд░рд╛рдЗрдЯ рдПрдХреНрд╕рдЯреНрд░реИрдХреНрдЯрд░
- рдмреЗрд╕64 рдбрд┐рдХреЛрдбрд░
- рдмреЗрд╕64 рдПрдирдХреЛрдбрд░
- рд╕реАрд╢рд╛рд░реНрдк рдлреЙрд░реНрдореЗрдЯрд░
- рд╕реАрдПрд╕рд╡реА рдлреЙрд░реНрдореЗрдЯрд░
- Dockerfile Formatter
- рдПрд▓реНрдо рдлреЙрд░реНрдореЗрдЯрд░
- рдИрдПрдирд╡реА рдлреЙрд░реНрдореЗрдЯрд░
- рдЧреЛ рдлреЙрд░реНрдореЗрдЯрд░
- рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдлреЙрд░реНрдореЗрдЯрд░
- рдПрдЪрд╕реАрдПрд▓ рдлреЙрд░реНрдореЗрдЯрд░
- рдЖрдИрдПрдирдЖрдИ рдлреЙрд░реНрдореЗрдЯрд░
- рдЬреЗрдПрд╕рдУрдПрди рдлреЙрд░реНрдореЗрдЯрд░
- рд▓реЗрдЯреЗрдХреНрд╕ рдлреЙрд░реНрдореЗрдЯрд░
- рдорд╛рд░реНрдХрдбрд╛рдЙрди рдлреЙрд░реНрдореЗрдЯрд░
- Php Formatter
- рдкреНрд░реЛрдЯреЛ рдлреЙрд░реНрдореЗрдЯрд░
- рдкрд╛рдпрдерди рдлреЙрд░реНрдореЗрдЯрд░
- рд░реВрдмреА рдлреЙрд░реНрдореЗрдЯрд░
- рд░рд╕реНрдЯ рдлреЙрд░реНрдореЗрдЯрд░
- рд╕реНрдХрд╛рд▓рд╛ рдлреЙрд░реНрдореЗрдЯрд░
- рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдлреЙрд░реНрдореЗрдЯрд░
- рдПрд╕рдХреНрдпреВрдПрд▓ рдлреЙрд░реНрдореЗрдЯрд░
- SVG рдлреЙрд░реНрдореЗрдЯрд░
- Swift рдлреЙрд░реНрдореЗрдЯрд░
- TOML рдлреЙрд░реНрдореЗрдЯрд░
- Typescript Formatter
- XML рдлреЙрд░реНрдореЗрдЯрд░
- YAML рдлреЙрд░реНрдореЗрдЯрд░
- Yarn рдлреЙрд░реНрдореЗрдЯрд░
- рд╕реАрдПрд╕рдПрд╕ рдорд┐рдиреАрдлрд╛рдпрд░
- Html Minifier
- Javascript Minifier
- рдЬреЗрдПрд╕рдУрдПрди рдорд┐рдиреАрдлрд╛рдпрд░
- XML рдорд┐рдирд┐рдлрд╛рдпрд░
- рдПрдЪрдЯреАрдЯреАрдкреА рд╣реЗрдбрд░реНрд╕ рджрд░реНрд╢рдХ
- рдкреАрдбреАрдПрдл рд╕реЗ рдЯреЗрдХреНрд╕реНрдЯ
- рд░реЗрдЧреЗрдХреНрд╕ рдкрд░реАрдХреНрд╖рдХ
- рдПрд╕рдИрдЖрд░рдкреА рд░реИрдВрдХ рдЬрд╛рдВрдЪрдХрд░реНрддрд╛
- Whois рд▓реБрдХрдЕрдк