Mededit рдореЗрдВ рдкрд░реНрд▓ рдХреЗ рд▓рд┐рдП ctags рдХреА рдЬрдЧрд╣

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




рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рдкрд░реНрд▓ рдХреЗ рд▓рд┐рдП ctags рдХреЙрд▓ рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪреЗрдВред Moo / plugins / ctags / ctags-doc.c рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рдмрд╛рдж , рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЙрд▓ рдпрд╣ рд╣реИ:

ctags -u --fields=afksS --excmd=number -f '_' '  ' 


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

 #!/bin/bash FILE=`file $6 2>&1` RX='Perl.*' if [[ "$FILE" =~ $RX ]] ; then ~/bin/perltags $6 > $5 else /usr/bin/ctags "$@" fi 


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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВред Ctags рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж , рд╕рдВрдкрд╛рджрдХ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреА рдЙрдореНрдореАрдж рд╣реИ:

   _;" kind 


рддрд░рд╣ (giblets mooedit рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ) рдирд╛рдо рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ ( рдПрдл рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рд╡реА рдПрдХ рдЪрд░ рд╣реИ, рдЖрджрд┐)ред

рд▓рд╛рдЗрди рдирдВрдмрд░ рдХреА рдкреВрдВрдЫ рдореЗрдВ рджреЛ рдЕрдХреНрд╖рд░ рдЬреЛрдбрд╝реЗ рдЧрдП рд╣реИрдВ ( ; " ) - рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдирд╣реАрдВ рд╣реИ, рдЙрдирдХреЗ рдмрд┐рдирд╛ рд╕рдВрдкрд╛рджрдХ рдмрд╕ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ (рдЬрд╛рд╣рд┐рд░ рд╣реИ, --excmd = рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдмрд╛рдж рдПрдХ рджреЛрд╖)ред

рдпрд╣ рд╕рдм рд╣реИ, рдЕрдм рдЖрдкрдХреЛ рд╕рдордЭрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рд╣рдореЗрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЗ рдмрд╣реБрдд рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрдиреЗ рд╣рд╛рдереЛрдВ рд╕реЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП il faut рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкреАрдкреАрдЖрдИ рд▓реЗрддреЗ рд╣реИрдВ, рдФрд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ
рдпрд╣рд╛рдБ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
 #!/usr/bin/perl # ------------------------------------------------------------------------------ use 5.010; use strict; use PPI; my %variables; my %scheduled; my %subs; # ------------------------------------------------------------------------------ die "Usage: $0 file\n" unless $ARGV[0]; my $doc = PPI::Document->new( $ARGV[0] ); die "'$ARGV[0]', PPI::Document error!\n" unless $doc; # ------------------------------------------------------------------------------ my @tokens = $doc->children; foreach my $token ( @tokens ) { given ( $token->class ) { process_statement( $token ) when 'PPI::Statement'; process_variable( $token ) when 'PPI::Statement::Variable'; process_sub( $token ) when 'PPI::Statement::Sub'; process_scheduled( $token ) when 'PPI::Statement::Scheduled'; } } print_names( \%variables, 'v' ); print_names( \%subs, 'f' ); print_names( \%scheduled, 'p' ); # ------------------------------------------------------------------------------ sub add_name { my ( $list, $token, $content ) = @_; # $content    ,    -, ,    my $name = $token->content; $list->{$name} = () unless exists $list->{$name}; $list->{$name}->{ $token->line_number } = $content; } # ------------------------------------------------------------------------------ sub print_names { my ( $list, $type ) = @_; foreach my $name ( sort { my $an = $a =~ /^[\$\%\@](.+)$/ ? $1 : $a; my $bn = $b =~ /^[\$\%\@](.+)$/ ? $1 : $b; lc $an cmp lc $bn; } keys $list ) { foreach my $line ( sort { $a <=> $b } keys $list->{$name} ) { print "$name:$line\t$ARGV[0]\t$line;\"\t$type\n"; } } } # ------------------------------------------------------------------------------ # @EXPORT = qw(aaa), @EXPORT_OK = qw(bbb); # ------------------------------------------------------------------------------ sub process_statement { my ( $tok ) = @_; my @tokens = $tok->children; return unless $#tokens > 0; foreach my $token ( @tokens ) { add_name( \%variables, $token, $tok->content ) if $token->class eq 'PPI::Token::Symbol'; } } # ------------------------------------------------------------------------------ # sub aaa($$$); # sub aaa{}; # ------------------------------------------------------------------------------ sub process_sub { my ( $tok ) = @_; my @tokens = $tok->children; return unless $#tokens > 1; shift @tokens; foreach my $token ( @tokens ) { next if $token->class eq 'PPI::Token::Whitespace' or $token->class eq 'PPI::Token::Comment' or $token->class eq 'PPI::Token::Pod'; #     'sub'   PPI::Token::Word: return unless $token->class eq 'PPI::Token::Word'; add_name( \%subs, $token, $tok->content ); last; } } # ------------------------------------------------------------------------------ # my $aaa; # our ($aaa, $bbb); # ------------------------------------------------------------------------------ sub process_variable { my ( $tok ) = @_; my @tokens = $tok->children; foreach my $token ( @tokens ) { #    -   : process_variable( $token ), next if $token->class eq 'PPI::Structure::List'; process_variable( $token ), next if $token->class eq 'PPI::Statement::Expression'; add_name( \%variables, $token, $tok->content ) if $token->class eq 'PPI::Token::Symbol'; } } # ------------------------------------------------------------------------------ # BEGIN {}; CHECK, UNITCHECK, INIT, END # ------------------------------------------------------------------------------ sub process_scheduled { my ( $tok ) = @_; my @tokens = $tok->children; return unless $#tokens > 0; add_name( \%scheduled, $tokens[0], $tok->content ); } # ------------------------------------------------------------------------------ 


рд╡рд╣ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ:

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

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


All Articles