Ctags: рдлрд╝реАрдЪрд░ рдЕрдиреБрд░реЛрдз: рдкрд░реНрд▓ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ (рд╣реИрдВ)

рдХреЛ рдирд┐рд░реНрдорд┐рдд 31 рдорд╛рд░реНрдЪ 2019  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: universal-ctags/ctags

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

has $name|@$names => %options рдХрдИ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрдард┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред

рд╣рдореЗрдВ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ

has "foo" => ()
has ("foo" => ())
has [qw/foo bar/] => ()
has ([qw/foo bar/] => ())
Parser buenhancement

рд╕рднреА 14 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@dtikhonov , рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ?

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

...рдореБрдЭреЗ рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИред рдкрд┐рдЫрд▓реЗ 3 рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ DSL рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП ctags рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИред

рдореЗрд░реА рджреГрд╖реНрдЯрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ http://docs.ctags.io/en/latest/running-multi-parsers.html?highlight=subparser#tagging -definitions-of-higher-upper-level-language-sub-base рджреЗрдЦреЗрдВред

рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рдкрд░ рдЪрд▓ рд╕рдХрддрд╛ рд╣реИред


package Point;
use Moose; # automatically turns on strict and warnings

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');

sub clear {
    my $self = shift;
    $self->x(0);
    $self->y(0);
}

package Point3D;
use Moose;

extends 'Point';

has 'z' => (is => 'rw', isa => 'Int');

after 'clear' => sub {
    my $self = shift;
    $self->z(0);
};

рдЬрдм рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рдХреЛ "рдЙрдкрдпреЛрдЧ" рдХреАрд╡рд░реНрдб рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рд╕рдмрдкрд╛рд░реНрд╕рд░ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдПрдХ рдРрд╕рд╛ рд╕рдмрдкрд╛рд░реНрд╕рд░ рд╣реИред
рдпрджрд┐ рдЕрдзрд┐рд╕реВрдЪрд┐рдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд╛рдо "рдореВрд╕" рд╣реИ, рддреЛ рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ рд╕реНрд╡рдпрдВ рд╕рдХреНрд░рд┐рдп рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдПрдХ рдкрд░реНрд▓ рднрд╛рд╖рд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд░реНрдХ рдирд╛рдордХ ctags рдЖрдВрддрд░рд┐рдХ рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрдХреИрди рдХрд░рддрд╛ рд╣реИ
рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЪрд┐рд╣реНрдирд┐рдд "рдкреИрдХреЗрдЬ" рдкреНрд░рдХрд╛рд░ред рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдХреЛ рдкреНрд░рддреАрдХ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ "рдкреНрд╡рд╛рдЗрдВрдЯ" рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдЯреИрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореВрд╕ рдкрд╛рд░реНрд╕рд░ "рдХреНрд▓рд╛рд╕" рдкреНрд░рдХрд╛рд░ рдХреА "рдореВрд╕" рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде "рдкреНрд╡рд╛рдЗрдВрдЯ" рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдЯреИрдЧ рдмрдирд╛рддрд╛ рд╣реИред

рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ "рдкреНрд╡рд╛рдЗрдВрдЯ" рдХреЛ рд╕реНрдХреЛрдк рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓рддрд╛ рд╣реИред
рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдПрдХ рдХреАрд╡рд░реНрдб рдХреЗ рд░реВрдк рдореЗрдВ "рд╣реИ" рдкрд╛рддрд╛ рд╣реИред рдореВрд╕ рд╕рдмрдкрд╛рд░реНрд╕рд░ "x" рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдЧ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ "рд╣реИ" рдХреЗ рдЕрдЧрд▓реЗ рдЯреЛрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред "рдПрдХреНрд╕", " рд╕реНрдХреЛрдк: рдХреНрд▓рд╛рд╕ : рдкреЙрдЗрдВрдЯ рд▓реИрдВрдЧреНрд╡реЗрдЬ: рдореВрд╕ " рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдмрдирд╛рдирд╛ "рдПрдХреНрд╕" рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ ...

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

рдПрдХ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ рдЗрд╕рдХреЗ рдмреЗрд╕ рдкрд╛рд░реНрд╕рд░ рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рд╕реЗ рдЕрдиреБрдорддрд┐ рд▓реЗрдиреА рд╣реЛрдЧреАред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ @dtikhonov рдЗрддрдирд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдПрдХ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдкреЗрд╢ рдХрд░рдиреЗ рд╕реЗ рдмреЗрд╕ рдкрд╛рд░реНрд╕рд░ рдХрд╛ рдХреЛрдб рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

@dtikhonov , рдпрджрд┐ рдЖрдк рдореВрд╕ рдХреЛ рдПрдХ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдореИрдВ рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рдкреНрд░рднрд╛рд╡ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдЙрдВрдЧрд╛ред

рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

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

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

рдореИрдВ рдпрд╣ рдирд╣реАрдВ рдХрд╣ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдИ рдЭреВрдареА-рд╕рдХрд╛рд░рд╛рддреНрдордХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ , рд▓реЗрдХрд┐рди рдореИрдВ рдХрд┐рд╕реА рдРрд╕реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рдЬрд┐рд╕рдиреЗ рдПрдХ рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЗрд╕ рд╕рдореНрдореЗрд▓рди рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреА рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦрдбрд╝рд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдпрд╣ ctags рдХреЗрд╡рд▓ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХреЗ рдмрдЬрд╛рдп рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдзреНрд╡рдирд┐ рд╣реИред

@masatake рд╕рдмрдкрд╛рд░реНрд╕рд░ рд╡рд┐рдЪрд╛рд░ рдореЗрд░реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕реЗ рдмреЗрд╣рддрд░ рдФрд░ рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд▓рдЧрддрд╛ рд╣реИ, рдФрд░ рдкрд░реНрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ use рдЦрд┐рд▓рд╛рдл рдкрд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрди рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд░реНрдерд╢рд╛рд╕реНрддреНрд░ рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдХреЗ рдХреБрдЫ рдРрд╕рд╛ рд╣реА рдХрд░рддрд╛ рд╣реИред

https://github.com/universal-ctags/ctags/blob/master/parsers/perl.c#L348

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

рдЕрдЧрд░ рдЖрдк рдореВрд╕ рдХреЗ рд▓рд┐рдП рд╕реА рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рднреА рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

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

@masatake , рдкрд░реНрд▓ 5 рдЗрддрдирд╛ рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдЪрд▓рдиреЗ рд╡рд╛рд▓рд╛ рд▓рдХреНрд╖реНрдп рд╣реИ рдХрд┐ рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП perl.c рдХреЗ рдЕрдиреБрд░рдХреНрд╖рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдореЗрд░рд╛ рдХрд╛рдо рдЖрд╕рд╛рди рд░рд╣рд╛ рд╣реИред рдореИрдВрдиреЗ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рд╕рдмрдкрд╛рд░реНрд╕рд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХреИрди рдХрд┐рдпрд╛ - рдореИрдВ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ: рд╡рд╛рд╣! рд╕рдЪ рдХрд╣реВрдВ рддреЛ, рдореИрдВ Universal Ctags рд╡рд┐рдХрд╛рд╕ рдХрд╛ рдмрд╛рд░реАрдХреА рд╕реЗ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ рдХрд╛рдлреА рдкреНрд░рдЧрддрд┐ рдХреА рд╣реИред

@EvanCarroll , рдХреЛрдб рд╡рд╛рд░реНрддрд╛: рдЗрд╕ рдкрд░ рдПрдХ рд╢реЙрдЯ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рдореИрдВрдиреЗ perl.c рд╕реЗ рднреА рд╢рд╛рджреА рдирд╣реАрдВ рдХреА рд╣реИред рдЗрд╕рдХреЗ рдХреБрдЫ рд╣рд┐рд╕реНрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрджрд╕реВрд░рдд рд╣реИрдВ рдФрд░, рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛ред "рдЙрдкрдпреЛрдЧ" рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ: рд╕реНрдкрд░реНрд╢, рдмрд┐рдВрджреБ рд▓рд┐рдпрд╛ред

рдардВрдбрд╛ рдардВрдбрд╛ред рдореИрдВ рджреЗрдЦреВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдВрдд рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рд╕рдмрдкрд╛рд░реНрд╕рд░ рдврд╛рдВрдЪреЗ рдкрд░ рднреА рдХрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реВрдВрдЧрд╛ред

рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
@EvanCarroll , рдЖрдк #2070 рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдореИрдВ рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрд╛рд░реНрд╕рд░ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП #2070 рдкрд░ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
рдЕрдкрдиреА рдкрд╕рдВрдж рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╣реИрдХ рдХрд░реЗрдВред

[yamato@slave]~/var/ctags/perl-moose/Units/simple-moose.d% cat input.pl
cat input.pl
# Taken from https://metacpan.org/pod/Moose
package Point;
use Moose; # automatically turns on strict and warnings

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');

sub clear {
    my $self = shift;
    $self->x(0);
    $self->y(0);
}

package Point3D;
use Moose;

extends 'Point';

has 'z' => (is => 'rw', isa => 'Int');

after 'clear' => sub {
    my $self = shift;
    $self->z(0);
};

no Moose;
package Line;

[yamato@slave]~/var/ctags/perl-moose/Units/simple-moose.d%  ./ctags --fields=+lineK --sort=no -o - --extras=+s ./input.pl
 ./ctags --fields=+lineK --sort=no -o - --extras=+s ./input.pl
zsh: no such file or directory: ./ctags
[yamato@slave]~/var/ctags/perl-moose/Units/simple-moose.d% ../../ctags --fields=+lineK --sort=no -o - --extras=+s ./input.pl
../../ctags --fields=+lineK --sort=no -o - --extras=+s ./input.pl
Point   ./input.pl  /^package Point;$/;"    package line:2  language:Perl
Point   ./input.pl  /^package Point;$/;"    class   line:2  language:Moose
x   ./input.pl  /^has 'x' => (is => 'rw', isa => 'Int');$/;"    attribute   line:5  language:Moose  class:Point
y   ./input.pl  /^has 'y' => (is => 'rw', isa => 'Int');$/;"    attribute   line:6  language:Moose  class:Point
clear   ./input.pl  /^sub clear {$/;"   subroutine  line:8  language:Perl
clear   ./input.pl  /^sub clear {$/;"   method  line:8  language:Moose  class:Point
Point3D ./input.pl  /^package Point3D;$/;"  package line:14 language:Perl
Point3D ./input.pl  /^package Point3D;$/;"  class   line:14 language:Moose  inherits:Point  end:26
z   ./input.pl  /^has 'z' => (is => 'rw', isa => 'Int');$/;"    attribute   line:19 language:Moose  class:Point3D
clear   ./input.pl  /^after 'clear' => sub {$/;"    attribute   line:21 language:Moose  class:Point3D
Line    ./input.pl  /^package Line;$/;" package line:27 language:Perl
[yamato@slave]~/var/ctags/perl-moose/Units/simple-moose.d% ./ctags --list-subparsers
./ctags --list-subparsers
zsh: no such file or directory: ./ctags
[yamato@slave]~/var/ctags/perl-moose/Units/simple-moose.d% ../../ctags --list-subparsers
../../ctags --list-subparsers
#NAME                BASEPARSER        DIRECTIONS
AnsiblePlaybook      Yaml              base <> sub {bidirectional}
Autoconf             M4                base <> sub {bidirectional}
Automake             Make              base <= sub {dedicated}
ITcl                 Tcl               base <> sub {bidirectional}
JAXRS                Java              base => sub {shared}
LinuxKernel          C                 base => sub {shared}
LinuxOVS             C                 base => sub {shared}
Moose                Perl              base <> sub {bidirectional}
OpenVSwitch          C                 base => sub {shared}
PythonLoggingConfig  Iniconf           base <> sub {bidirectional}
PythonMain           Python            base => sub {shared}
PythonTuned          Python            base => sub {shared}
QtMoc                C++               base <> sub {bidirectional}
RSpec                Ruby              base => sub {shared}
SystemdUnit          Iniconf           base <= sub {dedicated}
TclOO                Tcl               base <> sub {bidirectional}
YumRepo              Iniconf           base <= sub {dedicated}
selinuxPolicy        selinuxPolicyBase base => sub {shared}
servlet              Java              base => sub {shared}
[yamato@slave]~/var/ctags/perl-moose% ./ctags --list-kinds-full=Moose   
#LETTER NAME      ENABLED REFONLY NROLES MASTER DESCRIPTION
a       attribute yes     no      0      NONE   attributes
c       class     yes     no      0      NONE   classes
m       method    yes     no      0      NONE   methods

рдПрдХ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред @EvanCarroll , рдЖрдк #2070 рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣ рддреЗрдЬрд╝ рдерд╛! ЁЯСН

@masatake рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реАред рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ findAttribute рдФрд░ рднрд╛рд╖рд╛ рдХреЙрд▓рдмреИрдХ рд╕рдВрджрд░реНрдн рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ?

@masatake рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реАред рдХреНрдпрд╛ рдХреЛрдИ рдФрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ?

рдореИрдВ рдпрд╣реА рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ :-)ред
рдЕрдЧрд░ рдореИрдВ рдЖрдкрд╕реЗ рдЬреЛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рдЪреВрдХ рдЧрдпрд╛, рддреЛ рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред
рдореИрдВрдиреЗ рдореВрд╕ рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдХреБрдЫ рд╣реА рд╣рд┐рд╕реНрд╕реЗ рдкрдврд╝реЗред

@masatake рдХреВрд▓ рдбреАрд▓, рдореИрдВрдиреЗ

рд▓реЗрдХрд┐рди рдЖрдкрдиреЗ рд╢рд╛рдпрдж рдЗрд╕реЗ 0.0001 рд╕реЗрдХрдВрдб рдореЗрдВ рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реЛрдЧрд╛ред

рдпрд╣ рд╕рдЪ рдирд╣реАрдВ рд╣реИред

рдкрд╛рд░реНрд╕рд░ рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ 4 рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╕реАрдЯреАрдПрдЬреА рдЖрдВрддрд░рд┐рдХ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди, рд▓рдХреНрд╖реНрдп рднрд╛рд╖рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди, рдореВрд╕, рд╕рдордп рдФрд░ рдЬреБрдиреВрди: -рдкреАред

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

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЙрдореНрдореАрдж рдирд╣реАрдВ рд╣реИ рдХрд┐ ctags рдРрд╕реЗ рдирд┐рдпрдореЛрдВ рдХреЛ рдкрдХрдбрд╝ рд▓реЗрдВрдЧреЗ?
рдпрджрд┐ рдХреЛрдИ рдирд┐рдпрдо рдХрд┐рд╕реА рд╡рд░реНрдЧ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдореЗрдВ "рдирд┐рдпрдо:" рдореИрджрд╛рдиред

рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рдХреНрд╖рд┐рдд рднрд╛рд╖рд╛ рдЬрд╛рдирдиреЗ рд╡рд╛рд▓реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рдЗрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЖрдк рдЕрдиреНрдп рдХреЛ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕реЗ рдЕрдиреБрд░реЛрдз рд╣реИрдВ рддреЛ рд╣рдо рдмрд╛рдж рдореЗрдВ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдорд╛рдЙрд╕, рдореВ рдФрд░ рдореЛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдореВрд▓ рдкрд░реНрд▓ рдкрд╛рд░реНрд╕рд░ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЖрдкрдиреЗ рдореБрдЭреЗ рдкрд╣рд▓реЗ рд╣реА #2070 рдореЗрдВ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рджреА рд╣реИрдВред рдзрдиреНрдпрд╡рд╛рджред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕