IOS рдореЛрдмрд╛рдЗрд▓ рдмреИрдВрдХрд┐рдВрдЧ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ SwiftLint рд╕реНрдЯреЗрдЯрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛

рдУрд▓реЗрдЧ рдЗрд╡рд╛рдиреЛрд╡, рджреВрд░рд╕реНрде рд╕реЗрд╡рд╛ рдЪреИрдирд▓реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдорддрд╛ рдХреЗрдВрджреНрд░ рдХреЗ рдкреНрд░рдореБрдЦ



рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдЬреИрд╕рд╛ рдХрд┐ "ICD рдореЛрдмрд╛рдЗрд▓ рдмреИрдВрдХ: рд╡рд┐рдХрд╛рд╕ рдЗрддрд┐рд╣рд╛рд╕" рд▓реЗрдЦ рдореЗрдВ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЖрдЬ рдореИрдВ рд╕реНрдЯреЗрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдФрд░ рдмреИрдВрдХ рдХреЗ iOS рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЙрдирдХреЗ рдЖрд╡реЗрджрди рдХреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЖрдЗрдП рдЙрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЗрд╕ рдЯреВрд▓рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  • рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдорд┐рдпреЛрдВ рдХрд╛ рд╢реАрдШреНрд░ рдкрддрд╛ рд▓рдЧрд╛рдирд╛;
  • Code Style ( тАФ , ).

рд╣рдорд╛рд░реЗ рд▓рдХреНрд╖реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХрд╛ рдХреЛрдб - рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЬрд╛рдВрдЪрдирд╛ рд╣реИ ред

рдкрд░реАрдХреНрд╖рдХ рдпрд╛ рдкрд░реАрдХреНрд╖рдХреЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдХреЛрдб рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд╡реЗ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдпрд╛ рдХреЛрдб рдХреЗ рд╡рд░реНрдЧреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдЧрд▓рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреЛрдб рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд╕реБрдзрд╛рд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд┐рдлрд╛рд░рд┐рд╢реЗрдВ рджреЗрддреЗ рд╣реИрдВ, рдЬреЛ рдХреБрдЫ рд╕рдордп рдмрд╛рдж (!) рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рдбреЗрд╡рд▓рдкрд░ рджреНрд╡рд╛рд░рд╛ рд╕рд╣реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ рд▓рдВрдмреА рдФрд░ рдорд╣рдВрдЧреА рдХреЛрдб рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрднрд░ рд░рд╣реА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдореЗрд╢рд╛ рдПрдХ рдорд╛рдирд╡реАрдп рдХрд╛рд░рдХ рд╣реЛрддрд╛ рд╣реИ - рдХреБрдЫ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдмрд╕ рд╕рдореАрдХреНрд╖рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдпрд╣рд╛рдБ рд╕реНрдереИрддрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВред

рд╕реНрдЯреЗрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд░- рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдорд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВред

рд╕реНрдЯреЗрдЯрд┐рдХ рдХреЛрдб рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдПрдХ рд░рд╛рдордмрд╛рдг рдпрд╛ рдореИрдиреБрдЕрд▓ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реЗ рдПрдХ рдЙрддреНрдХреГрд╖реНрдЯ рдЙрдкрдХрд░рдг рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рдЪреЗрдХрд┐рдВрдЧ рдкрд░ рдЦрд░реНрдЪ рдХрд┐рдП рдЧрдП рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдФрд░ рдкреИрдЯрд░реНрди рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдЦреЛрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реНрдереИрддрд┐рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдХреЗрд╡рд▓ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрдврд╝реЗрдЧреАред

рд╣рдорд╛рд░реА iOS рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕реНрдерд┐рд░ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдо SwiftLint рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

SwiftLint рдПрдХ рд╕реНрд╡рд┐рдлреНрдЯ рдХреЛрдб рдСрдЯреЛ-рдЪреЗрдХрд┐рдВрдЧ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдЪрд░рдг рдХреЗ рджреМрд░рд╛рди рдЪрд▓рддреА рд╣реИред рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдореЗрдВ рдЖрдкрдХреЗ рдХрд╕реНрдЯрдо рдирд┐рдпрдореЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕реЗрдЯ рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдХреНрдпреЛрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ?
рдЬрдм рдЖрдк рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реЛрддрд╛ рд╣реИ: рдЖрдк рдЕрдкрдиреА рд╢реИрд▓реА рдореЗрдВ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреЛрдб рдХреЛ рд╡рд╣рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:



рд▓реЗрдХрд┐рди рдЬрдм рдЖрдк рдПрдХ рдмрдбрд╝реА рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдореЗрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдХрд╛рд░рдХ рдХрд┐рд╕реА рдФрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ рдбрд╛рд▓рдиреЗ рдХреА рдЬрдЧрд╣ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдЦреЛрдЬрдиреЗ рдХреА рдЧрддрд┐ рд╣реИред
рдФрд░ рдпрд╣рд╛рдВ рд╕рднреА рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдпреЛрдВ рдХреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЗрд▓рдиреЛрдВ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЙрдирдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдПрдХ рдмрд╛рд░ рдлрд┐рд░, SwiftLint рд╕реНрдереИрддрд┐рдХ рдХреЛрдб рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред рдФрд░ рд╣рдорд╛рд░рд╛ рдХреЛрдб рдПрдХ рд╕реБрдЦрдж рд░реВрдк рд▓реЗрдЧрд╛ рдЬреЛ рдЯреАрдо рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рд╕рджрд╕реНрдп рдХреЛ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧрд╛:



рдЙрдкрдХрд░рдг рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рджрд╕реНрддрд╛рд╡реЗрдЬ рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред

SwiftLint рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:

  1. рдлрд▓реА 'SwiftLint' рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкреЙрдбрдлрд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ
  2. рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рдирдпрд╛ "рд░рди рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд░рдг" рдЬреЛрдбрд╝реЗрдВред

    "${PODS_ROOT}/SwiftLint/swiftlint"
  3. SwiftLint .swiftlint.yml
  4. .swiftlint.yml , SwiftLint

рдпрджрд┐ SwiftLint рдПрдореНрдмреЗрдбрд┐рдВрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдб рд╢рд╛рдорд┐рд▓ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдзреИрд░реНрдп рд░рдЦрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рд╕рднреА SwiftLint рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд░реВрдк рд╕реЗ рдареАрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╡рд╣ рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рддреНрд░реБрдЯрд┐ рдФрд░ рдЪреЗрддрд╛рд╡рдиреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред



рдХреЛрд╖реНрдардХ рдореЗрдВ рднреА, рдпрд╣ рдЙрд╕ рдирд┐рдпрдо рдХрд╛ рдирд╛рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╢реБрд░реВ рдХреА рдереА (рд╕рдВрдЪрд╛рд▓рдХ_рд╕реЗрдЬ_рд╡реНрд╣рд╛рдЗрдЯрд╕реНрдкреЗрд╕) ред

рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпреЗ рд╣реИрдВ:

рдСрдкрд░реЗрдЯрд░ рдЙрдкрдпреЛрдЧ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк
рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдПрдХ рд╣реА рд╕реНрдерд╛рди рд╕реЗ рдШрд┐рд░рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рд╣реА рдХреЛрдб:




рдЕрдиреБрд╢рдВрд╕рд┐рдд рдХреЛрдб:



: рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ

рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ : operator_usage_whitespace
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ : рд╡рд┐рдХрд▓рд╛рдВрдЧ
рд╕рдорд░реНрдерди рд╕реНрд╡рдд: рд╕реБрдзрд╛рд░ :рд╣рд╛рдВ
рдкреНрд░рдХрд╛рд░ : рд╢реИрд▓реА
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдирд┐рдпрдо : рд╕реНрд╡рд┐рдлреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдХреЛрдИ
рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдирд╣реАрдВ : 3.0.0
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди : рдЪреЗрддрд╛рд╡рдиреА "рд╕реНрд╡рд┐рдлреНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕рдВрд╕реНрдХрд░рдг" рдкрд░

рдзреНрдпрд╛рди рджреЗрдВ - рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдФрд░ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдирд┐рдпрдореЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░реЗрдВред "рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди" рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рд╕рд╛рде рдирд┐рдпрдореЛрдВ рдХреЛ рдХреИрд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛: рдпрд╛ рддреЛ рдПрдХ рдирд┐рдпрдорд┐рдд рдЪреЗрддрд╛рд╡рдиреА, рдпрд╛ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐, рдЬреИрд╕реЗ рдХрд┐ рдлрд╝реЛрд░реНрд╕ рдХрд╛рд╕реНрдЯ рдирд┐рдпрдо (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рддреНрд░реБрдЯрд┐) рд╕рднреА рдирд┐рдпрдо рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдФрд░ рд╕рдЪрд┐рддреНрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ



ред

рдиреАрдЪреЗ рдореИрдВ рдЙрди рдирд┐рдпрдореЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдВрдЧрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рдЕрдкрдиреА рдЯреАрдо рдореЗрдВ рдЪреБрдирд╛ рд╣реИ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдордиреЗ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдФрд░ рд╢реИрд▓реАрдЧрдд рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рд╣реИ - рд╣рд╛рдВ, рд╣рд╛рдВ, рд╣рд╛рдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕ рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕реНрдерд╛рди, рдФрд░ рд╕рдорд╛рдкрди рдкреИрд░рд╛рдореАрдЯрд░ рдЙрджреНрдШрд╛рдЯрди рдХреЛрд╖реНрдардХ рдХреЗ рд╕рдорд╛рди рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ ... :)ред рдореИрдВ рдирд┐рдпрдореЛрдВ рдХреЛ рдЪрд┐рддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛, рдЖрдк рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдХрд╛рд░реНрдпрд╛рддреНрдордХ :

- private_outlet
- force_unwrapping
- force_cast
- force_try
- strong_iboutlet
- private_action
- block_based_kvo
- contains_over_first_not_nil
- discarded_notification_center_observer
- discouraged_direct_init
- discouraged_object_literal
- discouraged_optional_boolean
- discouraged_optional_collection
- duplicate_imports
- dynamic_inline
- empty_count
- empty_parameters
- empty_parentheses_with_trailing_closure
- empty_string
- explicit_enum_raw_value
- function_default_parameter_at_end
- generic_type_name
- identical_operands
- implicit_getter
- is_disjoint
- notification_center_detachment
- nsobject_prefer_isequal
- redundant_set_access_control
- unused_capture_list

рдХреА рд╢реИрд▓реА :

- unneeded_parentheses_in_closure_argument
- let_var_whitespace
- yoda_condition
- рдкреЗрдЯ
- рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо
- closure_parameter_position
- closure_spacing
- collection_alignment
- leading_whitespace
- рдорд╛рд░реНрдХ
- opening_brace
- operator_usage_whitespace
- operator_whitespace
- protocol_property_accessors_order
- return_arrow_whitespace
- switch_case_alignment
- statement_position
- trailing_comma
- trailing_newline
- unneeded_break_in_switch
- custom_rules
- closure_end_indentation
- file_name_no_space
- unowned_variable_capture
- no_space_in_method_call
- contains_over_filter_count
- contains_over_filter_is_empty
- contains_over_range_nil_comparison
- duplicate_enum_cases
- empty_collection_literal

рднреА рдПрдХ рд▓рдХреНрд╖реНрдп SwiftLint рдХреА рд╣рдо рд╡рд┐рдиреНрдпрд╛рд╕ рдлрд╛рдЗрд▓ .swiftlint.yml рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рд╕реЗрдЯрд┐рдВрдЧ рдЬреЛрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рдХреЛрдб рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рде рд╣реА рд╕реВрдЪреА рдЪреБрдирд╛ рд╣реИ:

рд╢рд╛рдорд┐рд▓ рд╣реИрдВ:

- <рдХреЛрдб рдмреЗрд╕ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛>


рд╣рдо рдЕрдорд╛рдиреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдирд┐рдпрдо рдмрдирд╛рдпрд╛ рд╣реИ рдкреНрд░рд┐рдВрдЯ рдХрд╛рд░реНрдпред рдкреНрд░рд┐рдВрдЯ рдПрдХ рдмрд╣реБрдд рдХрдард┐рди рдСрдкрд░реЗрд╢рди рд╣реИред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ .swiftlint.yml рдлрд╝рд╛рдЗрд▓:

custom_rules:
  disable_print:
    included: ".*\\.swift"
    name: "print usage"
    regex: "((\\bprint)|(Swift\\.print))\\s*\\("
    message: "Prefer os_log over print"
    severity: error

рдЗрд╕ рдирд┐рдпрдо рдиреЗ рд╣рдореЗрдВ рдЕрдкрдирд╛ рд▓реЙрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди (рд▓реЙрдЧрд┐рдВрдЧ рд╕реНрддрд░ рдХреЗ рд╕рд╛рде) рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдЗрд╕ рд▓реЙрдЧрд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рддреНрд╡рд░рд┐рдд рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ, рдЕрдиреБрд░реЛрдз / рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╢рд░реАрд░ рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ .none рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд▓реЙрдЧ рд╕реНрддрд░ред рдкреНрд░рд┐рдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмрд╛рдХреА рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рд▓реНрдб рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред

func logApp(level: Constants.LogLevel, items: Any...) {
    if Constants.logLevel == .none {
        return
    }
    
    if level.rawValue <= Constants.logLevel.rawValue {
        // swiftlint:disable disable_print
        if let strings = items as? [String] {
            for string in strings {
                print(string)
            }
        } else {
            print(items)
        }
        // swiftlunt:enable disable_print
    }

рд▓реЗрдХрд┐рди рдкреНрд░рд┐рдВрдЯ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХреЛрдб рдмреНрд▓реЙрдХ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдлреНрдЯрд▓рд┐рдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рд▓реЙрдЧрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЗрд╕рдХреА рдХреЙрд▓ рдХреЛ рдмрдВрдж рдХрд░рдирд╛ рдкрдбрд╝рд╛ред

// swiftlint:disable disable_print
// swiftlunt:enable disable_print

SwiftLint рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ:

// swiftlint:disable <rule1 [rule2 rule3тАж]>
<,   SwiftLint   rule1 [rule2 rule3тАж]>
// swiftlunt:enable <rule1 [rule2 rule3тАж]>

рдпрд╛

// swiftlint:disable all
<,   SwiftLint   >
// swiftlint:enable all

рдЗрд╕ рдЕрд╡рд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ!

рдЕрдВрдд рдореЗрдВ, рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ : рд╣рдорд╛рд░реА рдЯреАрдо рдореЗрдВ рд╕реНрд╡рд┐рдлреНрдЯрд▓рд┐рдВрдЯ рдХреЗ рдЙрдкрдпреЛрдЧ рдиреЗ рдореИрдиреБрдЕрд▓ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдХреА рд▓рд╛рдЧрдд рдХреЛ 20% рдХрдо рдХрд░ рджрд┐рдпрд╛ред рдЕрдм рд╣рдорд╛рд░реЗ рд╕рдореАрдХреНрд╖рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ (рдлреЛрд░реНрд╕ рдХрд╛рд╕реНрдЯ, рдЖрджрд┐), рдХреЛрдб рд╕реНрдЯрд╛рдЗрд▓ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдирдП рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдкрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрд┐рд╕рдиреЗ рд╕рдордЧреНрд░ рдЯреАрдо рджрдХреНрд╖рддрд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рдХреА (рдРрд╕реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдпреЗ рдпреЛрдЧреНрдп рдХрд░реНрдордЪрд╛рд░реА рд╣реИрдВ, рдЬрд┐рдирдХрд╛ рд╕рдордп рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ)ред

рд╕рдм! рдЕрдм SwiftLint рд╣рдореЗрд╢рд╛ рддреБрдореНрд╣рд╛рд░реЗ рд╕рд╛рде рд╣реИ :)


All Articles