рдкрд╛рдЗрд▓рд┐рдВрдЯ рдЕрдВрджрд░ рд╕реЗ рдмрд╛рд╣рд░ред рд╡рд╣ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реИ

рдХреВрд▓ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХ рд╕рд┐рд░реНрдл рд╣рдорд╛рд░реЗ рд╕рд╛рде, рд▓рд┐рдВрдЯрд░, рдЯрд╛рдЗрдкрдХреЗрд░рд╛, рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛, рд╣рдорд╛рд░реЗ рдЪрд╛рд░реЛрдВ рдУрд░ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ "рдмреНрд▓реИрдХ рдмреЙрдХреНрд╕" рдЬреИрд╕реЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдореЗрдВ рдЬрд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рд▓реЛрдЧ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ, рдкрд╛рдпрдерди рдХреЛрдб рдХреЗ рдЕрдиреБрдХреВрд▓рди рдФрд░ рд╕реБрдзрд╛рд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЕрдкрд░рд┐рд╣рд╛рд░реНрдп рдЙрдкрдХрд░рдг рд╣реИрдВред

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



рд╣рдореЗрдВ Pylint рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ?


рдпрджрд┐ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╕рд╡рд╛рд▓ рдЙрда рд╕рдХрддрд╛ рд╣реИ: "рдХреНрдпреЛрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдХреЗ рдЕрдВрджрд░ рдХреНрдпрд╛ рд╣реИ, рдпрд╣ рдЬреНрдЮрд╛рди рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?"

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

рд▓рдВрдмреЗ рд╕рдордп рддрдХ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рд┐рдпрд╛рди рдЗрдВрд╕реНрдЯреАрдЯреНрдпреВрдЯ рдореЗрдВ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдХреЗ рд╕рд╛рде рдареАрдХ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рдорд╛рдореВрд▓реА рдЬреЛрдбрд╝-рдШрдЯрд╛рд╡ рдерд╛: рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдиреЛрдВ рдХреЛ рдмрджрд▓ рджрд┐рдпрд╛, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдирд┐рдпрдореЛрдВ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдФрд░ рдЕрдзрд┐рдХрддрдо рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓рдВрдмрд╛рдИ рдмрдврд╝рд╛ рджреАред

рд▓реЗрдХрд┐рди рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░ рд╡реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдП, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдореЗрдВ рдЧрд╣рд░реА рдЦреБрджрд╛рдИ рдХрд░рдиреА рдкрдбрд╝реА рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдкрдбрд╝рд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЗрд╕ рдкрд░ рдкрдврд╝реЗрдВред


рд╕реНрдкреАрдХрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ: рдореИрдХреНрд╕рд┐рдо рдорд╛рдЬрд╝реЗрд╡ ( рдмреИрдХрд╕реНрд▓реИрд╢ ), 5 рд╕рд╛рд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, CIAN рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЧрд╣рд░рд╛рдИ рд╕реЗ рдкрд╛рдпрдерди, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕реАрдЦрддрд╛ рд╣реИред

рд╕рд┐рдпрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ


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

рд╣рдо рдПрдХ рддрдХрдиреАрдХреА рдХрдВрдкрдиреА рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рднреА рд░рд┐рдПрдХреНрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рд╣реИрдВред

  • рдкреНрд░рддрд┐ рджрд┐рди 1 рдорд┐рд▓рд┐рдпрди рдЕрджреНрд╡рд┐рддреАрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред
  • рдорд╛рд╕реНрдХреЛ рдФрд░ рд╕реЗрдВрдЯ рдкреАрдЯрд░реНрд╕рдмрд░реНрдЧ рдореЗрдВ рдЕрдЪрд▓ рд╕рдВрдкрддреНрддрд┐ рдХреА рдмрд┐рдХреНрд░реА рдФрд░ рдХрд┐рд░рд╛рдпреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдмреБрд▓реЗрдЯрд┐рди рдмреЛрд░реНрдбред 2018 рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рд╕рдВрдШреАрдп рд╕реНрддрд░ рдкрд░ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдФрд░ рдкреВрд░реЗ рд░реВрд╕ рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ред
  • рд╡рд┐рдХрд╛рд╕ рдЯреАрдо рдореЗрдВ рд▓рдЧрднрдЧ 100 рд▓реЛрдЧ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ 30 рджреИрдирд┐рдХ рдкрд╛рдпрдерди рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред

рд╣рд░ рджрд┐рди, рдирдП рдХреЛрдб рдХреА рд╕реИрдХрдбрд╝реЛрдВ рдФрд░ рд╣рдЬрд╛рд░реЛрдВ рд▓рд╛рдЗрдиреЗрдВ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рдЬрд╛рддреА рд╣реИрдВред рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИрдВ:

  • рд╕рднреНрдп рдЧреБрдгрд╡рддреНрддрд╛ рдХрд╛ рдХреЛрдбред
  • рд╢реИрд▓реАрдЧрдд рд╕рдорд░реВрдкрддрд╛ред рд╕рднреА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ "рд╡рд┐рдиреИрдЧреНрд░реЗрдЯ" рдХреЗ рдмрд┐рдирд╛ рд▓рдЧрднрдЧ рд╕рдорд╛рди рдХреЛрдб рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛


CIAN рдореЗрдВ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рджреЛ рдЪрд░рдгреЛрдВ рдореЗрдВ рд╣реЛрддреА рд╣реИ:

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


рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдореБрджреНрджреЗ


рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рдХрд╛рд░рдг рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ:

  • рдЬрдм рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдЕрдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдпрд╛ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реЛ рддреЛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ;
  • рдХреЛрдб рд╢реИрд▓реА рдореБрджреНрджреЛрдВред

рдпрджрд┐ рд▓рд╛рдЗрдирд░ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИ рддреЛ рд╕реНрдЯрд╛рдЗрд▓ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ?

рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдкреАрдИрдкреА -8 рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЧрд╛рдЗрдб рд╣реИред рдХрд┐рд╕реА рднреА рдорд╛рдирдХ рдХреА рддрд░рд╣, PEP-8 рдмрд╣реБрдд рд╕рд╛рдорд╛рдиреНрдп рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рд▓рд┐рдП, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореИрдВ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдорд╛рдирдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рджреВрд╕рд░реЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рдЗрд╕рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рдЖрдВрддрд░рд┐рдХ рд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд╕рд╛рде рдЖрдП рдХрд┐ рдХреИрд╕реЗ рдХреЛрдб рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЙрдиреНрд╣реЗрдВ "рдЕрд╕реНрд╡реАрдХреГрдд рд╕реЗрд▓рд┐рдпрди рдкреНрд░рд╕реНрддрд╛рд╡" рдХрд╣рд╛ ред



"рдирд┐рдпрдд Cian рдкреНрд░рд╕реНрддрд╛рд╡" - рдирд┐рдпрдореЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рдЕрдм рд▓рдЧрднрдЧ 15. рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдЖрдзрд╛рд░ рд╣реИ рдФрд░ рд╕рдВрд╢реЛрдзрди рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред

рдЙрддреНрдкрд╛рджрдХ рдХреЛрдб рдХреА рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рдХреНрдпрд╛ рдмрд╛рдзрд╛ рд╣реИ?


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

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

рд╣рдо рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред

рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЕрдкрдирд╛ рд▓рд┐рдВрдЯрд░ рдордд рд▓рд┐рдЦреЛ?


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

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

рддреЛ рдЕрдЧрд░ рд╣рдо рдЕрдкрдирд╛ рд▓рд┐рдВрдЯрд░ рд▓рд┐рдЦрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд░реЗрдВ?

рдкрд╛рдЗрд▓рд┐рдВрдЯ рдкреНрд▓рдЧрд┐рди рд▓рд┐рдЦреЗрдВ


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

рдРрд╕реЗ рдЪреЗрдХрд░реНрд╕ рдХреЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ рез


рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХреЛрдб рдореЗрдВ "TODO" рдлрд╝реЙрд░реНрдо рдХреА рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ - рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд╛ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ, рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреЛрдб рд╣рдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдЗрд╕реЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрднреА рдирд╣реАрдВ, рд▓реЗрдХрд┐рди рдмрд╛рдж рдореЗрдВред рдРрд╕реА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ - рд╡реЗ рдмрд┐рд▓реНрдХреБрд▓ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдЪреАрдЬ рдХреЗ рд▓рд┐рдП рдЙрдкрдХреГрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛


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


рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ:

  • рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд▓рдЯрдХреА рд╣реБрдИ рд╣реИрдВ рдФрд░ рдЙрдирдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рдХреЛрдб рдЕрдЯреЗ рдкрдбрд╝реЗ рд╣реИрдВ;
  • рддрдХрдиреАрдХреА рдЛрдг рд╡рд░реНрд╖реЛрдВ рд╕реЗ рдЬрдорд╛ рд╣реБрдЖ рд╣реИред

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

рд╕рдорд╛рдзрд╛рди: Pylint рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдЪреЗрдХрд░ рд▓рд┐рдЦреЗрдВ


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

рд╣рдореЗрдВ TODO рдлрд╝реЙрд░реНрдо рдХреА рд╕рднреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХрд╛ рдЬреАрд░рд╛ рдореЗрдВ рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рд╣реИред рд▓рд┐рдЦрддреЗ рд╣реИрдВред

Pylint рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдЪреЗрдХрд░ рдХреНрдпрд╛ рд╣реИ? рдпрд╣ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдЪреЗрдХрд░ рдХреЗ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред

class TodoIssueChecker(BaseChecker): _ _implements_ _ = IRawChecker 

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ IRawChecker рд╣реИ - рддрдерд╛рдХрдерд┐рдд "рдХрдЪреНрдЪрд╛" рдЪреЗрдХрд░ред

рдПрдХ рдХрдЪреНрдЪрд╛ рдЪреЗрдХрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдХреА рддрд░реНрдЬ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд▓рд╛рдЗрди рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдкрд░, рдЪреЗрдХрд░ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдФрд░ рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рд▓рд┐рдВрдХ рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХреА рддрд▓рд╛рд╢ рдХрд░реЗрдЧрд╛ред

рдЪреЗрдХрд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрди рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕реВрдЪреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреА рд╣реЛрдЧреА рдЬреЛ рдЗрд╕реЗ рдЬрд╛рд░реА рдХрд░реЗрдВрдЧреЗ:

 msgs = { '9999': ('  TODO    ', issue-code-in-todo', ' ')} 

рд╕рдВрджреЗрд╢ рдореЗрдВ рд╣реИ:

  • рд╡рд░реНрдгрди рдЫреЛрдЯрд╛ рдФрд░ рд▓рдВрдмрд╛ рд╣реИ;
  • рдЪреЗрдХрд░ рдХреЛрдб рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рдореЗрдиреЗрдореЛрдирд┐рдХ рдирд╛рдо рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╕рдВрджреЗрд╢ рд╣реИред

рд╕рдВрджреЗрд╢ рдХреЛрдб рдореЗрдВ "C1234" рд░реВрдк рд╣реИ, рдЬрд┐рд╕рдореЗрдВ:

  • рдкрд╣рд▓рд╛ рдкрддреНрд░ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХреАрдХреГрдд рд╣реИ: [рд╕реА] рдЖрд╡рд┐рд╖реНрдХрд╛рд░; [рдбрдмреНрд▓реНрдпреВ] arning; [рдИ] рдпреЛрдЧ; [рдПрдл] рдЕрдЯрд▓; [рдЖрд░] efactoringред рдкрддреНрд░ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд░рд┐рдкреЛрд░реНрдЯ рддреБрд░рдВрдд рджрд┐рдЦрд╛рддреА рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ: рд╕рдордЭреМрддреЛрдВ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рдиреЗ рдпрд╛ рдШрд╛рддрдХ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рддрддреНрдХрд╛рд▓ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
  • 4 рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛ Pylint рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдпред

рдпрджрд┐ рдпрд╣ рдЕрдирд╛рд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЪреЗрдХ рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЖрдк рдкрд╛рдЗрд▓рд┐рдВрдЯ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ: рдЕрдХреНрд╖рдо рдХрд░реЗрдВ рдФрд░ рдПрдХ рдЫреЛрдЯрд╛ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рдХреЛрдб рдпрд╛ рдирд╛рдордорд╛рддреНрд░ рдХрд╛ рдирд╛рдо:

 # Pylint: disable=C9999 # Pylint: disable=issue-code-in-todo 

Pylint рдХреЗ рд▓реЗрдЦрдХреЛрдВ рдиреЗ рдЕрд▓реНрдлрд╝рд╛рдиреНрдпреВрдореЗрд░рд┐рдХ рдХреЛрдб рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдФрд░ mnemonic рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рд╣реИ, рдпрд╣ рдЕрдзрд┐рдХ рджреГрд╢реНрдп рд╣реИред

рдЕрдЧрд▓рд╛ рдХрджрдо process_module рдирд╛рдордХ рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ ред



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

рдиреЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕рд╕реЗ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдпрд╛ рдпрд╣ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╣реИ, рдпрд╣ рдпрд╛рдж рд░рдЦрдирд╛ рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдиреЛрдб рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░реАрдо рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд▓рд╛рдЗрди рдХреЛ рд▓рд╛рдЗрди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред

рдЖрдк рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдФрд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рд╣реИ, рд▓реЗрдХрд┐рди рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪреЗрдХрд░ рдХреЛрдб рдФрд░ рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдлреЙрд░реНрдо 'рдЗрд╢реНрдпреВ-рдХреЛрдб-рдЯреВ-рдЯреВ' рдлреЙрд░реНрдо рдХреА рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХ рджреЗрдВред рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред

рдЪреЗрдХрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ рддрд╛рдХрд┐ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рди рд╕рдХреЗред рдпрд╣ рд░рдЬрд┐рд╕реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 def register(linter: Pylinter) -> None: linter. register_checker ( TodoIssueChecker(linter) ) 

  • Pylint рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдлрдВрдХреНрд╢рди рдореЗрдВ рдЖрддрд╛ рд╣реИред
  • рдпрд╣ register_checker рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред
  • рд╣рдо рдЪреЗрдХрд░ рдХреЛ рд╡рд┐рдзрд┐ рд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ: рдЪреЗрдХрд░ рдореЙрдбреНрдпреВрд▓ PYTHONPATH рдореЗрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рддрд╛рдХрд┐ Pylint рдЗрд╕реЗ рдмрд╛рдж рдореЗрдВ рдЖрдпрд╛рдд рдХрд░ рд╕рдХреЗред

рдПрдХ рдкрдВрдЬреАрдХреГрдд рдкрд░реАрдХреНрд╖рдХ рдХреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рдмрд┐рдирд╛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рджреНрд╡рд╛рд░рд╛ рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред

 $ cat work. # T0D0:   , -! $ pylint work. --load-plugins todo_checker тАж 

рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдкрд╛рдЗрд▓рд┐рдВрдЯ рдЪрд▓рд╛рдПрдВ, рдореЙрдбреНрдпреВрд▓ рдХреЛ рдЗрд╕рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ, рд▓реЛрдбрд░ -рдкреНрд▓рдЧрдЗрдиреНрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЪреЗрдХрд░ рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рд▓рд┐рдВрдЯрд░ рдХреЗ рдЕрдВрджрд░, рджреЛ рдЪрд░рдг рдЪрд▓рд╛рдПрдВред

рдЪрд░рдг 1. рдкреНрд▓рдЧрдЗрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ


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

рдЪрд░рдг 2. рдЪреЗрдХрд░реНрд╕ рдХреЗ рдкреВрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ


рдЪрд░рдг 1 рдХреЗ рдмрд╛рдж, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЪреЗрдХрд░реНрд╕ рдХреА рдкреВрд░реА рд╕реВрдЪреА рдмрдиреА рд╣реБрдИ рд╣реИ:

  • рдПрдПрд╕рдЯреА рдЪреЗрдХрд░;
  • рдХрдЪреНрдЪрд╛ рдЪреЗрдХрд░;
  • рдЯреЛрдХрди рдЪреЗрдХрд░ред



рд╕реВрдЪреА рд╕реЗ рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрдЪреНрдЪреЗ рдЪреЗрдХрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ: рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреМрди рд╕реЗ рдЪреЗрдХрд░реНрд╕ IRawChecker рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд▓рд┐рдП рд▓реЗрддреЗ рд╣реИрдВред

рдкреНрд░рддреНрдпреЗрдХ рдЪрдпрдирд┐рдд рдЪреЗрдХрд░ рдХреЗ рд▓рд┐рдП, checker.process_module (рдореЙрдбреНрдпреВрд▓) рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ, рдФрд░ рдЪреЗрдХ рдЪрд▓рд╛рдПрдБред

рдкрд░рд┐рдгрд╛рдо


рдЬрд╛рдБрдЪрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЪрд▓рд╛рдПрдБ:

 $ cat work. # T0D0:   , -! $ pylint work,  --load-plugins todo_checker : 0,0:   T0D0     (issue-code-in-todo) 

рдПрдХ рд╕рдВрджреЗрд╢ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ TODO рдХреЗ рд╕рд╛рде рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд╣реИ рдФрд░ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИред

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

рдЙрджрд╛рд╣рд░рдг рд╕рдВрдЦреНрдпрд╛ 2. рдЦреЛрдЬрд╢рдмреНрдж-рддрд░реНрдХ


рдРрд╕реЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рд╕реНрдерд┐рддрд┐рдЧрдд рддрд░реНрдХ рджреЗрддреЗ рд╣реИрдВред рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рддрд░реНрдХ рд╣реИрдВ, рддреЛ рдЬрдм рд╡реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рддрд░реНрдХ рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИред

рд╕рдорд╕реНрдпрд╛


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ:

 get_offer_by_cian_id( "sale", rue, 859483, ) 

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

 get_offer_by_cian_id( deal_type="sale", truncate=True, cian_id=859483, ) 

рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╣рд╛рдВ рд╣реИ рдФрд░ рд╣рдо рдЙрдирдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЖрдЗрдП рдПрдХ рдЪреЗрдХрд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреЛ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред

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

рдПрдПрд╕рдЯреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЧреАрдд


рдПрдПрд╕рдЯреА рдпрд╛ рдПрдмреНрд╕реНрдЯреНрд░реИрдХреНрдЯ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдЯреНрд░реА рдХреЛрдб рдХрд╛ рдПрдХ рдкреЗрдбрд╝ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рд╣реИ, рдЬрд╣рд╛рдВ рд╢реАрд░реНрд╖ рдСрдкрд░реЗрдЯреНрд╕ рд╣реИ рдФрд░ рдкрддреНрддрд┐рдпрд╛рдВ рдСрдкрд░реЗрдЯрд░ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓, рдЬрд╣рд╛рдВ рдПрдХ рд╕реНрдерд┐рддрд┐ рддрд░реНрдХ рдФрд░ рджреЛ рдирд╛рдорд┐рдд рддрд░реНрдХ рд╣реЛрддреЗ рд╣реИрдВ, рдПрдХ рд╕рд╛рд░ рдкреЗрдбрд╝ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ:


рдЯрд╛рдЗрдк рдХреЙрд▓ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реАрд░реНрд╖ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рдирд┐рдореНрди рд╣реИ:

  • рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдлрдВрдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ;
  • рд╕реНрдерд┐рддрд┐ рд╕рдВрдмрдВрдзреА рддрд░реНрдХреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА, рдЬрд╣рд╛рдВ рдкреНрд░рдХрд╛рд░ рдХрд╛рдВрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдиреЛрдб рд╣реИ рдФрд░ 112 рдХрд╛ рдореВрд▓реНрдп рд╣реИ;
  • рдирд╛рдорд┐рдд рддрд░реНрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреАрд╡рд░реНрдбред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╛рд░реНрдп:

  • рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреЙрд▓ (рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓) рдХреЗ рд╕рд╛рде рдиреЛрдбреНрд╕ рдвреВрдВрдвреЗрдВред
  • рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реА рдЧрдИ рддрд░реНрдХреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВред
  • рдпрджрд┐ 2 рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд╣реИрдВ, рддреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдиреЛрдб рдореЗрдВ рдХреЛрдИ рд╕реНрдерд┐рддрд┐рдЧрдд рддрд░реНрдХ рдирд╣реАрдВ рд╣реИрдВред
  • рдпрджрд┐ рд╕реНрдерд┐рддрд┐рдЧрдд рддрд░реНрдХ рд╣реИрдВ, рддреЛ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдПрдВред


 ll( func=Name(name='get_offer'), args=[Const(value=1298880)], keywords=[ тАж ]))] 

рдкрд╛рдЗрд▓рд┐рдВрдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдПрд╕рдЯреА-рдЖрдзрд╛рд░рд┐рдд рдЪреЗрдХрд░ рдПрдХ рд╡рд░реНрдЧ рд╣реИ рдЬреЛ рдмреЗрд╕ рдЪреЗрдХрд░ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЖрдИрдПрд╕реНрдЯреНрд░реЛрдЗрдб рдХреИрдЪрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:

 class NonKeywordArgsChecker(BaseChecker): -_ _implements_ _ = IAstroidChecker 

рдЬреИрд╕рд╛ рдХрд┐ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╕рдВрджреЗрд╢ рд╕реВрдЪреА рдореЗрдВ рдЪреЗрдХрд░ рд╡рд┐рд╡рд░рдг, рд╕рдВрджреЗрд╢ рдХреЛрдб, рд▓рдШреБ mnemonic рдирд╛рдо рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

 msgs = { '9191': (' ', keyword-only-args', ' ')} 

рдЕрдЧрд▓рд╛ рдЪрд░рдг visit_call рд╡рд┐рдзрд┐ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдирд╛ рд╣реИ:

 def visit_call(self, node: Call) тАж 

рд╡рд┐рдзрд┐ рдХреЛ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдореЗрдВ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд рдореБрд▓рд╛рдХрд╝рд╛рдд_ рдЙрдкрд╕рд░реНрдЧ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдЫреЛрдЯреЗ рдЕрдХреНрд╖рд░ рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рд╢реАрд░реНрд╖ рдХрд╛ рдирд╛рдо рдЖрддрд╛ рд╣реИред

  • рдПрдПрд╕рдЯреА рдкрд╛рд░реНрд╕рд░ рдкреЗрдбрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рд╢реАрд░реНрд╖ рдХреЗ рд▓рд┐рдП рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЪреЗрдХрд░ рдХрд╛ рджреМрд░рд╛_ <рдирд╛рдо> рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред
  • рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВред
  • рдкреБрди: рдЕрдкрдиреЗ рд╕рднреА рдмрдЪреНрдЪреЛрдВ рдХреЗ рд╕рд╛рде рдЧреБрдЬрд░рддрд╛ рд╣реИред
  • рдиреЛрдб рдЫреЛрдбрд╝рддреЗ рд╕рдордп, рдЗрд╕реЗ рд▓реАрд╡_ <рдирд╛рдо> рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, visit_call рд╡рд┐рдзрд┐ рдПрдХ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓-рдЯрд╛рдЗрдк рдиреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧреА рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдореЗрдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд╣реИрдВ рдФрд░ рдХреНрдпрд╛ рд╕реНрдерд┐рддрд┐ рд╕рдВрдмрдВрдзреА рддрд░реНрдХ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИрдВ рдФрд░ рдиреЛрдб рдХреЛ рд╣реА рдХреЛрдб рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реИред

 def visit_call(self, n): if node.args and len(node.args + node.keywords) > 2: self.add_message( 'keyword-only-args', node=node ) 

рд╣рдо рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЪреЗрдХрд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ: рд╣рдо рдкрд╛рдЗрд▓рд┐рдВрдЯ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд░рдЬрд┐рд╕реНрдЯрд░_рдЪреЗрдХрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЪреЗрдХрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

 def register(linter: Pylinter) -> None: linter.register_checker( TodoIssueChecker(linter) ) 

рдпрд╣ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд╣рд╛рдВ 3 рддрд░реНрдХ рд╣реИрдВ рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдХреЗрд╡рд▓ рдПрдХ рдХрд╛ рдирд╛рдо рд╣реИ:

 $ cat work. get_offers(1, True, deal_type="sale") $ Pylint work.py --load-plugins non_kwargs_checker тАж 

рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рд╣рдорд╛рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЧрд▓рдд рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдкрд╛рдЗрд▓рд┐рдВрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред

рдкреНрд▓рдЧрдЗрди рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг 1 рдкреВрд░реА рддрд░рд╣ рд╕реЗ рджреЛрд╣рд░рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИред

рдЪрд░рдг 2. рдПрдПрд╕рдЯреА рдореЗрдВ рдореЙрдбреНрдпреВрд▓ рдкрд╛рд░реНрд╕рд┐рдВрдЧ


рдХреЛрдб рдХреЛ AST рдЯреНрд░реА рдореЗрдВ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдПрд╕реНрдЯреНрд░реЛрдЗрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред

рдПрд╕реНрдЯреНрд░реЛрдЗрдб, рдПрдПрд╕рдЯреА (stdlib) рдХреНрдпреЛрдВ рдирд╣реАрдВ


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

 from module import Entity def foo(bar): # type: (Entity) -> None return 

рдкрд╣рд▓реЗ, рдПрд╕реНрдЯреНрд░реЛрдЗрдб рдиреЗ рдорд╛рдирдХ рдПрдПрд╕рдЯреА рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд╛рдпрдерди рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХреА рдЧрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд taiphints рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдпрджрд┐ рдЖрдк Pylint рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрд┐рдВрджреБ рддрдХ рдпрд╣ рдЕрдкреНрд░рдпреБрдХреНрдд рдЖрдпрд╛рдд рдкрд░ рд╢рдкрде рд▓реЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЖрдпрд╛рддрд┐рдд рдЗрдХрд╛рдИ рд╡рд░реНрдЧ рдХреЗрд╡рд▓ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдореМрдЬреВрдж рд╣реИред

GitHub рдХреЗ рдХреБрдЫ рдмрд┐рдВрджреБ рдкрд░, Guido Van Rossum рдПрд╕реНрдЯреНрд░реЛрдЗрдб рдореЗрдВ рдЖрдП рдФрд░ рдХрд╣рд╛: "рджреЛрд╕реНрддреЛрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ Pylint рд╣реИ рдЬреЛ рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдкрд░ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЯрд╛рдЗрдк рдПрдПрд╕рдЯреА рдкрд╛рд░реНрд╕рд░ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдм рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред рдЪрд▓реЛ рджреЛрд╕реНрдд рд╣реИрдВ! тАЭ

рдХрд╛рдо рдореЗрдВ рдЙрдмрд╛рд▓ рдЖрдиреЗ рд▓рдЧрд╛ рд╣реИ! 2 рд╕рд╛рд▓ рдмреАрдд рдЧрдП, рдЗрд╕ рд╡рд╕рдВрдд Pylint рдиреЗ рдЯрд╛рдЗрдк рдПрдПрд╕рдЯреА рдкрд╛рд░реНрд╕рд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд┐рдпрд╛ рдФрд░ рдРрд╕реА рдЪреАрдЬреЛрдВ рдкрд░ рд╢рдкрде рд▓реЗрдирд╛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред Taiphints рдХреЗ рд▓рд┐рдП рдЖрдпрд╛рдд рдЕрдм рдЕрдкреНрд░рдпреБрдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рд╣реИрдВред

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

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

  • рдПрд╕реНрдЯреНрд░реЛрдЗрдб рдХреЛ рдЕрдореВрд░реНрдд рдкреЗрдбрд╝ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЕрдЬрдЧрд░ рдХреА рдЧрддрд┐рд╢реАрд▓ рдкреНрд░рдХреГрддрд┐ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдВред
  • рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдПрдПрд╕рдЯреАред

рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг pylint-django рд╣реИ ред рдЬрдЯрд┐рд▓ рдбреЗрдВрдЬреЛ-рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рд▓рд╛рдЗрдирд░ рдЕрдХреНрд╕рд░ рдЕрдЬреНрдЮрд╛рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдкрд░ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИред Pylint-django рдмрд╕ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред

рдЪрд░рдг 3. рдЪреЗрдХрд░реНрд╕ рдХреЗ рдкреВрд▓ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░реЗрдВ


рд╣рдо рддрдкрд╛рдХ рд╕реЗ рд▓реМрдЯреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдлрд┐рд░ рд╕реЗ рдЪреЗрдХрд░реНрд╕ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдЙрди рд▓реЛрдЧреЛрдВ рдХреЛ рдвреВрдВрдврддреЗ рд╣реИрдВ рдЬреЛ рдПрдПрд╕рдЯреА рдЪреЗрдХрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред

рдЪрд░рдг 4. рдиреЛрдбреНрд╕ рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд░реНрд╕ рдЪреЗрдХрд░реНрд╕


рдЕрдЧрд▓рд╛, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХрд░ рдХреЗ рд▓рд┐рдП рддрд░реАрдХреЗ рдЦреЛрдЬрддреЗ рд╣реИрдВ, рд╡реЗ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ:

  • visit_ <рдиреЛрдб рдирд╛рдо>
  • lev_ <рдиреЛрдб рдирд╛рдо>ред

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

 _visit_methods = dict( < > : [checker1, checker2 ... checkerN] ) 

рд▓реАрд╡-рдореЗрдердбреНрд╕ рдХреЗ рд╕рд╛рде рднреА: рдиреЛрдб рдирд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА, рдЙрди рдЪреЗрдХрд░реНрд╕ рдХреА рд╕реВрдЪреА рдЬреЛ рдЗрд╕ рдиреЛрдб рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рддрдереНрдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВред

 _leave_methods = dict( < >: [checker1, checker2 ... checkerN] ) 

рдкрд╛рдЗрд▓рд┐рдВрдЯ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдпрд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд╣рд╛рдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐рдЧрдд рддрд░реНрдХ рд╣реИ:

 $ cat work. get_offers(1, True, deal_type="sale") $ Pylint work.py --load-plugins non_kwargs_checker C: 0, 0:  c >2      (keyword-only-args) 

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

рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП?


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

 class TestNonKwArgsChecker(CheckerTestCase): CHECKER_CLASS = NonKeywordArgsChecker 

рдЪрд░рдг 1. рд╣рдо рдЙрд╕ рдХреЛрдб рдХреЗ рднрд╛рдЧ рд╕реЗ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдПрдПрд╕рдЯреА-рдиреЛрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╛рдБрдЪ рд░рд╣реЗ рд╣реИрдВред

 node = astroid.extract_node( "get_offers(3, 'magic', 'args')" ) 

рдЪрд░рдг 2. рдЬрд╛рдБрдЪреЗрдВ рдХрд┐ рдЪреЗрдХрд░, рдиреЛрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ рдпрд╛ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдХреЛ рдлреЗрдВрдХрддрд╛ рдирд╣реАрдВ рд╣реИ:

 with self.assertAddsMessages(message): self.checker.visit_call(node) 

TokenChecker


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


рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо, рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдФрд░ рдХреАрд╡рд░реНрдб рдЯрд╛рдЗрдк NAME рдХреЗ тАЛтАЛрдЯреЛрдХрди рдмрди рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕реАрдорд╛рдВрдХрдХ, рдХреЛрд╖реНрдардХ, рдХреЙрд▓рди рдУрдкреА рдХреЗ рдкреНрд░рдХрд╛рд░ рдмрди рдЬрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрдВрдбреЗрдВрдЯреЗрд╢рди, рд▓рд╛рдЗрди рдлреАрдб рдФрд░ рд░рд┐рд╡рд░реНрд╕ рдЯреНрд░рд╛рдВрд╕рд▓реЗрд╢рди рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреЛрдХрди рд╣реИрдВред

Pylint TokenChecker рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рдкрд░реАрдХреНрд╖рдг рдХреЗ рддрд╣рдд рдореЙрдбреНрдпреВрд▓ рдЯреЛрдХрди рд╣реИред
  • рдЯреЛрдХрди рдХреА рдПрдХ рд╡рд┐рд╢рд╛рд▓ рд╕реВрдЪреА рд╕рднреА рдЪреЗрдХрд░реНрд╕ рдХреЛ рджреА рдЬрд╛рддреА рд╣реИ рдЬреЛ ITokenChecker рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ process_tokens (рдЯреЛрдХрди) рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рддреЗ рд╣реИрдВ ред

рд╣рдордиреЗ рдЯреЛрдХрдирдХреЗрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдкрд╛рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ рдЬреЛ рдкрд╛рдЗрд▓рд┐рдВрдЯ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ:

  • рдЬрд╛рдБрдЪ рдХрд░реЗрдВ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рднреА рдЯреЛрдХрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рда рдХреЗ рд╕рд╛рде рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рд╕рд╛рдХреНрд╖рд░рддрд╛ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕реНрдЯреЙрдк-рд╢рдмреНрдж рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рд╢рдмреНрджреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрджрд┐ред
  • рдЗрдВрдбреЗрдВрдЯ , рд╕реНрдкреЗрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ ред
  • рддрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкрд╛рдпрдерди 3 рдпреВрдирд┐рдХреЛрдб рд╢рд╛рдмреНрджрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ ASCI рдЕрдХреНрд╖рд░ рдмрд╛рдЗрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдореМрдЬреВрдж рд╣реИрдВред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдореЗрдВ рдХреЛрдб рд╕рдореАрдХреНрд╖рд╛ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдереАред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд▓рд┐рдВрдЯрд░ рдХрд╛ рдХрд╛рдо рдХрд┐рдпрд╛, рд╡реНрдпрд░реНрде рдХреЛрдб рд╕реНрдХреИрдирд┐рдВрдЧ рдкрд░ рдЕрдкрдирд╛ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рд▓реЗрдЦрдХ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд┐рдпрд╛ред Pylint рдХреЗ рд╕рд╛рде рд╣рдо:

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

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

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

Pylint рдЖрдВрддрд░рд┐рдХ рдбрд┐рдЬрд╛рдЗрди рдХрд╛ рдЬреНрдЮрд╛рди рдорд╛рдирд╡-рдШрдВрдЯреЗ рдмрдЪрд╛рддрд╛ рд╣реИ, рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИ
рдкреНрд░рджрд░реНрд╢рди рдФрд░ рдХреЛрдб рдореЗрдВ рд╕реБрдзрд╛рд░ред рдЕрдкрдирд╛ рд╕рдордп рдмрдЪрд╛рдПрдВ, рдЕрдЪреНрдЫрд╛ рдХреЛрдб рд▓рд┐рдЦреЗрдВ рдФрд░
рд▓рд┐рдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдЕрдЧрд▓рд╛ рдореЙрд╕реНрдХреЛ рдкрд╛рдпрдерди рдХреЙрдиреНрдл ++ рд╕рдореНрдореЗрд▓рди 5 рдЕрдкреНрд░реИрд▓, 2019 рдХреЛ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рдЖрдк рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╢реБрд░реБрдЖрддреА рдмрд┐рд░рдл рдЯрд┐рдХрдЯ рдмреБрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдПрдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░рдирд╛ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИ, рдлрд┐рд░ рдпрд╛рддреНрд░рд╛ рдореБрдлреНрдд рд╣реЛрдЧреА, рдФрд░ рд░рд┐рдкреЛрд░реНрдЯ рдХреЗ рддреИрдпрд╛рд░реА рдкрд░ рдХреЛрдЪрд┐рдВрдЧ рд╕рд╣рд┐рдд рдЕрдЪреНрдЫреЗ рдмрдиреНрд╕ рдПрдХ рдмреЛрдирд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗред

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

Source: https://habr.com/ru/post/hi433474/


All Articles