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

рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдореЛрдиреЛрд▓рд┐рде рд╣реИ, рдЬреЛ рдПрдХ рдмрдбрд╝реА рдХреЛрдб рдмреЗрд╕ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХрдИ рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдФрд░ рдХрдИ рд╣рдЬрд╛рд░ Django рдХреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (
рдпрд╣рд╛рдВ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдкрд░ Django рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ
рдореЗрдВ рдПрдХ рдмрд╛рдд рд╣реИ)ред рдпрд╣ рд╕рдм рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЛрдб рдФрд░ рдкрд░реЛрд╕рд╛ рдЬрд╛рддрд╛ рд╣реИред рдореЛрдиреЛрд▓рд┐рде рд╕реЗ рдХрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реА рдпреЛрдЬрдирд╛ рдореЗрдВ рдореЛрдиреЛрд▓рд┐рде рдХрд╛ рдордЬрдмреВрдд рдЕрд▓рдЧрд╛рд╡ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИред
рд╣рдорд╛рд░рд╛ рд╕рд░реНрд╡рд░ рд╕рд┐рд╕реНрдЯрдо рдПрдХ рдореЛрдиреЛрд▓рд┐рде рд╣реИ рдЬреЛ рдмрд╣реБрдд рдмрд╛рд░ рдмрджрд▓рддрд╛ рд╣реИред рд╣рд░ рджрд┐рди, рд╕реИрдХрдбрд╝реЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реИрдХрдбрд╝реЛрдВ рдЖрд╡рд╛рдЧрдорди рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд▓рдЧрд╛рддрд╛рд░ рдЗрди рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рддреИрдирд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рд╣рд░ рд╕рд╛рдд рдорд┐рдирдЯ рдореЗрдВ рдРрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред рдирддреАрдЬрддрди, рдкрд░рд┐рдпреЛрдЬрдирд╛ рджрд┐рди рдореЗрдВ рд▓рдЧрднрдЧ рд╕реМ рдмрд╛рд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рддреИрдирд╛рдд рдХреА рдЬрд╛рддреА рд╣реИред рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдореЗрдВ рдХрдорд┐рдЯрдореЗрдВрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреЛрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмреАрдЪ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдЧреБрдЬрд░рддрд╛ рд╣реИ (
рдпрд╣рд╛рдБ PyCon 2019 рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдЧрдИ рд╣реИ)ред
рдЗрд╕ рд╡рд┐рд╢рд╛рд▓ рдЕрдЦрдВрдб рдХреЛрдб рдЖрдзрд╛рд░ рдХреЛ рдмрдирд╛рдП рд░рдЦрдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд░реЛрдЬрд╛рдирд╛ рд╕реИрдХрдбрд╝реЛрдВ рдЖрд╡рд╛рдЧрдорди рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рд╕рд╛рде рд╣реА рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд░рд╛рдЬрдХрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдирд╣реАрдВ рд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдХреЛ рдПрдХ рдРрд╕реА рдЬрдЧрд╣ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд╣рд╛рдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЙрддреНрдкрд╛рджрдХ рд╣реЛ рд╕рдХреЗрдВ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреА рдирдИ рдЙрдкрдпреЛрдЧреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХреЗрдВред
рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдЗрд╕ рдмрд╛рдд рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рд╣рдо рдкрд╛рдпрдерди рдХреЛрдбрдмреЗрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рдХреБрдЫ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд╣рдордиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕
LibCST рдХреА рд╢реНрд░реЗрдгреА рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐
рд▓рд╛рдЗрдирд┐рдВрдЧ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреЛрдб рд░реАрдлреИрдХреНрдЯрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдХрдИ рдЖрдВрддрд░рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд░реЗрдЦрд╛рдВрдХрд┐рдд рдХрд░рддрд╛ рд╣реИред
тЖТ
рджреВрд╕рд░рд╛ рднрд╛рдЧрд▓рд╛рдЗрдирд┐рдВрдЧ: рд╡рд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдЬрд╣рд╛рдБ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ
рд▓рд╛рдЗрдирд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдЙрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдФрд░ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдирд┐рджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЦреБрдж рдХреЛрдб рдореЗрдВ рдЙрдиреНрд╣реЗрдВ рдиреЛрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реЛрдВрдЧреЗред рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреЛрдб рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╡рд┐рдЪрд╛рд░ рд╡рд┐рддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИрдВ, рдЕрдзрд┐рдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╕реИрдХрдбрд╝реЛрдВ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред

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

Python Parse Tree (CST рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░) lib2to3 рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрдирджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рддрд░рд╣ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рдЬрдЯрд┐рд▓ рд╡реГрдХреНрд╖ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рд╣рдореЗрдВ рдЗрд╕рд╕реЗ рдмреНрдпрд╛рдЬ рдХреА рд╢рдмреНрджрд╛рд░реНрде рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдкрд╛рдпрдерди рдкрд╛рд░реНрд╕ рдЯреНрд░реА рдХреЛ рдПрдХ рд╕рд╛рд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЯреНрд░реА (рдПрдПрд╕рдЯреА) рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдЦреЛ рдЬрд╛рддреА рд╣реИред рд╣рдо "рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдЬрд╛рдирдХрд╛рд░реА" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ - рдЬреИрд╕реЗ рдХрд┐ рдЯрд┐рдкреНрдкрдгреА, рдХреЛрд╖реНрдардХ, рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдоред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрдПрд╕рдЯреА рдореЗрдВ рдХреЛрдб рдХреЗ рд╢рдмреНрджрд╛рд░реНрде рдХреЛ рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред
рдПрд╕реНрдЯреНрд░реЛ рдореЙрдбреНрдпреВрд▓ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдЕрдЬрдЧрд░ рд╕рд╛рд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╡реГрдХреНрд╖рд╣рдордиреЗ
LibCST рд╡рд┐рдХрд╕рд┐рдд
рдХрд┐рдпрд╛ - рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреЛ рд╣рдореЗрдВ рд╕реАрдПрд╕рдЯреА рдФрд░ рдПрдПрд╕рдЯреА рдХреА рджреБрдирд┐рдпрд╛ рдХрд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЙрд╕ рдХреЛрдб рдХрд╛ рдПрдХ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рднреА рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреА рд╣реИ (рдЬреИрд╕реЗ рдХрд┐ рд╕реАрдПрд╕рдЯреА рдореЗрдВ), рд▓реЗрдХрд┐рди рдХреЛрдб рдХреЗ рдРрд╕реЗ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ (рдЬреИрд╕реЗ рдПрдПрд╕рдЯреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп) рд╕реЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рдмреНрджрд╛рд░реНрде рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИред
рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ LibCST рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдкреЗрдбрд╝ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡рд╣рдорд╛рд░реЗ рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд┐рдпрдо рдХреЛрдб рдореЗрдВ рдкреИрдЯрд░реНрди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП LibCST
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдпрд╣ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдкреЗрдбрд╝, рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдпрд╣ рдЖрдкрдХреЛ "рдЕрдирд┐рдпрдорд┐рдд" рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдЖрдпрд╛рдд рдХреЗ рдХрд╛рд░рдг рдЪрдХреНрд░реАрдп рдирд┐рд░реНрднрд░рддрд╛ рд╣реИред
if TYPE_CHECKING
рдмреНрд▓реЙрдХ рдореЗрдВ рдЯрд╛рдЗрдк рдЗрдВрдкреЛрд░реНрдЯ рдХрдорд╛рдВрдб рд░рдЦрдХрд░ рдкрд╛рдпрдерди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдкрд░ рдХреБрдЫ рднреА рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрд░рдХреНрд╖рд╛ рд╣реИред
рдмрд╛рдж рдореЗрдВ, рдХрд┐рд╕реА рдиреЗ рджреВрд╕рд░реЗ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЖрдпрд╛рдд рдХреЛ рдЬреЛрдбрд╝рд╛ рдФрд░ рджреВрд╕рд░рд╛
if
рдХреЛрдб рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдРрд╕рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреЛ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХрд╛ рддрдВрддреНрд░ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИред
рд▓рд┐рдВрдЯрд░ рдирд┐рдпрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдЗрд╕ рдЕрддрд┐рд░реЗрдХ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ!
рдЖрдЗрдП рдХреЛрдб рдореЗрдВ рдкрд╛рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ "рд╕реБрд░рдХреНрд╖рд╛рддреНрдордХ" рдмреНрд▓реЙрдХреЛрдВ рдХреЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд╢реБрд░реВ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВред
class OnlyOneTypeCheckingIfBlockLintRule(CstLintRule): def __init__(self, context: Context) -> None: super().__init__(context) self.__type_checking_blocks = 0
рдлрд┐рд░, рдЗрд╕реА рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░рд╛ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЬрд╛рдВрдЪрддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред рдпрджрд┐ рдпрд╣ рд╢рд░реНрдд рдкреВрд░реА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рдХреЛрдб рдореЗрдВ рдЙрдкрдпреБрдХреНрдд рдЬрдЧрд╣ рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗрддреЗ рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреА рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╣рд╛рдпрдХ рддрдВрддреНрд░ рдХреЛ рдмреБрд▓рд╛рддреЗ рд╣реИрдВред
def visit_If(self, node: cst.If) -> None: if node.test.value == "TYPE_CHECKING": self.__type_checking_blocks += 1 if self.__type_checking_blocks > 1: self.context.report( node, "More than one 'if TYPE_CHECKING' section!" )
рдЗрд╕реА рддрд░рд╣ рдХреЗ рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд┐рдпрдо LibCST рдХреЗ рдкреЗрдбрд╝ рдХреЛ рджреЗрдЦрдХрд░ рдФрд░ рдЬрд╛рдирдХрд╛рд░реА рдЗрдХрдЯреНрдард╛ рдХрд░рдХреЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдВрдЯрд░ рдореЗрдВ, рдпрд╣ рд╡рд┐рдЬрд╝рд┐рдЯрд░ рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдирд┐рдпрдо
visit
рддрд░реАрдХреЛрдВ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдиреЛрдб рдкреНрд░рдХрд╛рд░ рд╕реЗ рдЬреБрдбрд╝реЗ рддрд░реАрдХреЛрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддреЗ рд╣реИрдВред рдЗрди "рд╡рд┐рдЬрд╝рд┐рдЯрд░" рдХреЛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреНрд░рдо рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
class MyNewLintRule(CstLintRule): def visit_Assign(self, node): ...
рдиреЛрдбреНрд╕ рдХреЗ рд╡рдВрд╢рдЬреЛрдВ рдХрд╛ рджреМрд░рд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдпрд╛рддреНрд░рд╛ рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рд╡рдВрд╢рдЬ рдХрд╛ рджреМрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдЫреБрдЯреНрдЯреА рдХреЗ рддрд░реАрдХреЛрдВ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИрд╣рдо рдХрд╛рдо рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдкрд╣рд▓реЗ рд╣рд▓ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдВрдЯрд░ рд╢рд╛рд╕рди рдХреЛ рдПрдХ рд╣реА рдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдХ "рдЖрдЧрдВрддреБрдХ" рдерд╛ рдФрд░ рдПрдХ рд╕рд╛рдЭрд╛ рд░рд╛рдЬреНрдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╕рд╛рдЭрд╛ рд╕реНрдерд┐рддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдлрд╝рд╛рдЗрд▓, рдПрдХ "рдЖрдЧрдВрддреБрдХ"Single Visitor
рд╡рд░реНрдЧ рдХреЛ рд╣рдорд╛рд░реЗ рд╕рднреА рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд┐рдпрдореЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдФрд░ рддрд░реНрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рд░рд╛рдЬреНрдп рдХрд┐рд╕реА рд╡рд┐рд╢реЗрд╖ рдирд┐рдпрдо рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЦреБрдж рдХреЛ рдПрдХ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕рдЪрдореБрдЪ рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХреБрдЫ рдирд┐рдпрдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрдирдореЗрдВ рд╕реЗ рд▓рдЧрднрдЧ рд╕реМ рдирд┐рдпрдо рд╣реИрдВ, рдЬреЛ
single-visitor
рдкреИрдЯрд░реНрди рдХреЗ рд╕рдорд░реНрдерди рдХреЛ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдЬрд╛рдирдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЪреЗрдХ рдХреЗ рд╕рд╛рде рд░рд╛рдЬреНрдп рдФрд░ рддрд░реНрдХ рдХреНрдпрд╛ рдЬреБрдбрд╝реЗ рд╣реИрдВредрдмреЗрд╢рдХ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рдиреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ, рдХрдИ "рдЖрдЧрдВрддреБрдХреЛрдВ" рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдФрд░ рдРрд╕реА рдХрд╛рд░реНрдп рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрдЧрдарди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рд╣рд░ рдмрд╛рд░ рдкреВрд░реЗ рдкреЗрдбрд╝ рдХреЛ рджреЗрдЦреЗрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕рд╕реЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдЧрдВрднреАрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдЖ рд╕рдХрддреА рд╣реИ, рдФрд░ рд▓рд┐рдВрдЯрд░ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдЬрд┐рд╕реЗ рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рддреНрдпреЗрдХ рд▓рд┐рдЯрд░ рдирд┐рдпрдо рдмрд╛рд░-рдмрд╛рд░ рдПрдХ рдкреЗрдбрд╝ рдХреЛ рдкрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдХрд┐рд╕реА рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╕рдордп, рдирд┐рдпрдореЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рджреГрд╖реНрдЯрд┐рдХреЛрдг, рдЬреЛ рдЕрдХреНрд╕рд░ рдкреЗрдбрд╝ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ, рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрдВрднреАрд░ рдЧрд┐рд░рд╛рд╡рдЯ рдХрд╛ рдХрд╛рд░рдг рд╣реЛрдЧрд╛редрдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЕрдиреНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рд▓рд┐рдВрдЯрд░ рд╕реЗ рдкреНрд░реЗрд░рд┐рдд рдереЗ - рдЬреИрд╕реЗ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ
ESLint , рдФрд░ "рд╡рд┐рдЬрд╝рд┐рдЯрд░" (рд╡рд┐рдЬрд╝рд┐рдЯрд░ рд░рдЬрд┐рд╕реНрдЯреНрд░реА) рдХрд╛ рдПрдХ рдХреЗрдВрджреНрд░реАрдХреГрдд рд░рдЬрд┐рд╕реНрдЯрд░ рдмрдирд╛рдпрд╛ред
"рдЖрдЧрдВрддреБрдХреЛрдВ" рдХрд╛ рдХреЗрдВрджреНрд░реАрдХреГрдд рд░рдЬрд┐рд╕реНрдЯрд░ред рд╣рдо рдкреНрд░рднрд╛рд╡реА рд░реВрдк рд╕реЗ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд▓рд┐рдВрдЯрд░ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдореЗрдВ рдХреМрди рд╕рд╛ рдиреЛрдб рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ рдиреЛрдбреНрд╕ рдкрд░ рд╕рдордп рдХреА рдмрдЪрдд рд╣реЛрддреА рд╣реИредрдЬрдм рд▓рд┐рдВрдЯрд░ рдирд┐рдпрдо рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдирд┐рдпрдо рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рднреА рдУрд╡рд░рд░рд╛рдЗрдб рд░рдЬрд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рдкреЗрдбрд╝ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рднреА рдкрдВрдЬреАрдХреГрдд "рдЖрдЧрдВрддреБрдХреЛрдВ" рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рд╡рд┐рдзрд┐ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдпрд╣ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрдВрдкреНрдпреВрдЯрд┐рдВрдЧ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдЦрдкрдд рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЗрд╕рдореЗрдВ рдирдП рд▓рд╛рдЗрдирд┐рдВрдЧ рдирд┐рдпрдо рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВред рд╣рдо рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд▓рд┐рдВрдЯрд░ рдХреЗ рд╕рд╛рде рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рдЫреЛрдЯреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдкреВрд░реЗ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдХреЛрдб рдЖрдзрд╛рд░ рдкрд░ рд╕рднреА рдирд┐рдпрдореЛрдВ рдХреЛ рдХреЗрд╡рд▓ 26 рд╕реЗрдХрдВрдб рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЬрд╛рдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдПрдХ рдЯреЗрд╕реНрдЯрд┐рдВрдЧ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рдпрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдЙрдиреНрдирдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдерд╛, рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд╣рд╛рдБ рдХреБрдЫ рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдХреБрдЫ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреБрдЫ рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдХреБрдЫ рдЧреБрдгрд╡рддреНрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
class MyCustomLintRuleTest(CstLintRuleTest): RULE = MyCustomLintRule VALID = [ Valid("good_function('this should not generate a report')"), Valid("foo.bad_function('nor should this')"), ] INVALID = [ Invalid("bad_function('but this should')", "IG00"), ]
рдирд┐рд░рдВрддрд░рддрд╛ тЖТ
рджреВрд╕рд░рд╛ рднрд╛рдЧрдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдк рд▓рд┐рдВрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ?
