çŸåšãPerlã¯MooseãMouseãMooãMoãªã©ã§æ¡åŒµãããŠããŸãã ãããã®ã¢ãžã¥ãŒã«ã«ã¯ãã¹ãŠ1ã€ã®å
±éç¹ããããŸããã€ãŸããå±æ§ã»ã¬ã¯ã¿ãŒã¯has
確ç«ãããŸãã ç§ãã¡ã¯ãã ãŒã¹ã確ç«ãã次ã®æ
£ç¿ã«åŸããã®ã¯äœã§ãã
has $name|@$names => %options
ã¯ãããã«ããå€ãã®ãªããžã§ã¯ããã«ãã·ã¹ãã ã®1ã€ã«å¯ŸããŠé©åã«åœ¢æãããå±æ§ã§ãã
ç§ãã¡ã¯æ¬¡ã®ãããªããšãã«ããŒããå¿ èŠããããŸã
has "foo" => ()
has ("foo" => ())
has [qw/foo bar/] => ()
has ([qw/foo bar/] => ())
@dtikhonov ããããèŠãŠ
ã ãŒã¹ãã ã¯åãªãã¢ãžã¥ãŒã«ã§ããã has
ã¯é¢æ°åŒã³åºãã§ãããPerlããŒã¯ãŒãã§ã¯ãããŸããã Mooseã®ãµããŒããctagsã«å«ãããšãããŒã¯ãŒãã®ããã«èŠããé¢æ°åŒã³åºããå°å
¥ããPerlã¢ãžã¥ãŒã«ãå€æ°ãããããPerlããŒãµãŒã¯æ»ããããåéã«ãªããŸãã
...ç§ã¯ãã®ãããã¯ã«éåžžã«èå³ããããŸãã éå»3幎éãDSLãåŠçããããã«ctagãæ¹åããŸããã
ç§ã®ããžã§ã³ã«ã€ããŠã¯ã httpïŒ //docs.ctags.io/en/latest/running-multi-parsers.htmlïŒhighlight = subparserïŒtagging-definitions-of-higher-upper-level-language-sub-baseãåç §ããŠãã ããã
MooseãµãããŒãµãŒã¯PerlããŒãµãŒã§å®è¡ã§ããŸãã
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);
};
PerlããŒãµãŒãããŒã¯ãŒããuseããèŠã€ãããšãPerlããŒãµãŒã¯ãããç»é²æžã¿ã®ãµãããŒãµãŒã«éç¥ããŸãã
ã ãŒã¹ãµãããŒãµãŒã¯ãã®ãããªãµãããŒãµãŒã§ãã
éç¥ãããã¢ãžã¥ãŒã«åããMooseãã®å ŽåãMooseãµãããŒãµãŒã¯ããèªäœãã¢ã¯ãã£ãã«ããŸãã
MooseãµãããŒãµãŒã¯ãcorkãšããååã®ctagså
éšã·ã³ãã«ããŒãã«ãã¹ãã£ã³ããŠãPerlèšèªãªããžã§ã¯ããèŠã€ããŸãã
PerlããŒãµãŒã«ãã£ãŠãããã±ãŒãžãã®çš®é¡ãšããŠããŒã¯ãããŠããŸãã MooseãµãããŒãµãŒã¯ãã·ã³ãã«ããŒãã«ã§ããã€ã³ãããèŠã€ããå ŽåããããŸãã
ãã§ã«PerlããŒãµãŒã«ãã£ãŠã¿ã°ä»ããããŠããŸãã ãã ããMooseããŒãµãŒã¯ããã¯ã©ã¹ãã®çš®é¡ã®ãMooseãèšèªã䜿çšããŠãPointãã®æ°ããã¿ã°ãäœæããŸãã
MooseãµãããŒãµãŒã¯ãããã€ã³ãããã¹ã³ãŒãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã
MooseãµãããŒãµãŒã¯ãããŒã¯ãŒããšããŠãhasããèŠã€ããŸãã MooseãµãããŒãµãŒã¯ããhasãã®æ¬¡ã®ããŒã¯ã³ãšããŠèŠã€ãã£ããxãã®ã¿ã°ãäœæããŸãã ãxããã scopeïŒclass ïŒPoint languageïŒMoose ãã®ã¿ã°ãäœæãããšããxãã«ä»å ãããŸãã
C ++ããŒãµãŒã«ã€ããŠã¯ããã§ã«ãã®ã¢ã€ãã¢ãå®è£
ããŠããŸãã
QtMocãµãããŒãµãŒã¯ãQtã䜿çšããŠC ++ã³ãŒãã解æããããã®ãã®ã§ãã QtMocãµãããŒãµãŒã¯ãC ++èšèªã®æ¹èšãšããŠå°å
¥ãããã·ã°ãã«ãšã¹ããããèªèããŸãã
ãµãããŒãµãŒãå®è£
ããã«ã¯ããã®ããŒã¹ããŒãµãŒã®ã¡ã³ãããŒããèš±å¯ãåŸãå¿
èŠããããŸãã
ãµãããŒãµãŒãå°å
¥ãããšããŒã¹ããŒãµãŒã®ã³ãŒããè€éã«ãªãããã@
ããŒãµãŒã¡ã³ãããŒãšãããŒãµãŒã«ãµãããŒãµãŒãå°å ¥ãããç§ãšã®éã«ççŸãããå ŽåãããŒãµãŒã¡ã³ãããŒãæã€ããšãu-ctagsãããžã§ã¯ãã§æãéèŠãªããšã§ããããããµãããŒãµãŒã®å®è£ ãäžæ¢ããŸãã
@ dtikhonov ãMooseããµãããŒãµãŒãšããŠå®è£
ããã¢ã€ãã¢ã«èå³ãããå Žåã¯ãç§ã«ç¥ãããŠãã ããã
PerlããŒãµãŒã®ãœãŒã¹ã³ãŒããžã®åœ±é¿ã瀺ããããã¿ã€ããäœæããŸãã
èªãã§ãããŠããããšãã
ç§ã¯ãããå éšã®æ©èœã§ããããšãç解ããŠããŸãã ããããããã¯å®è£ ã®è©³çŽ°ã§ãã åãæå³ã§ããªããžã§ã¯ãæåæ¹åŒã§ããã°ã©ãã³ã°ããŠããå Žåãããã±ãŒãžã¯ãã¯ã©ã¹ãã§ãããããµããã¯ã¡ãœããã§ãã Object Oriented perlã䜿çšãããšããã®åœåæ³ã¯ãã¹ãŠå€æŽãããŸããããããã®å Žåãããªããžã§ã¯ãæå以å€ã®çšèªã䜿çšã§ããŸãã äžèšã®ãã¹ãŠã®å Žåã«ãããŠããŠãŒã¶ãŒãã©ã®ãã©ãã€ã ã®ããã«ã³ãŒããæžããããæšæž¬ããããšã«ã¯è€éããå ãããŸãã ãšã¯èšããã®ã®ããæã£ãŠãããã«ã¯ãããã®è€éããæ¬ ããŠããŸãã èãããã解éã2ã€ããå Žåã¯ãïŒaïŒé¢æ°ããhasããšåŒãã§ããŸãããã®å ŽåãçŸåšã®ããã«ãäœãããªãããšãæãŸããåäœã«ãªããŸãã ãŸãã¯ãïŒbïŒMoose颚ã®å±æ§å®£èšã䜿çšããŠããŸãã
ããªãã®åçããã®ãMooseetalãã®åŒçšã¯ããããã®ã¢ãžã¥ãŒã«ãã«ããŒãã¬ãŒã ã¯ãŒã¯ïŒ has
å±æ§å®£èšãå«ãïŒã䜿çšããããã®Perlã§ã®ãã®èŠåãã©ãã»ã©åŒ·åã§ãããã瀺ããŠããŸãã Mooseã¯ç°¡åã«Perlã§æã人æ°ã®ããã¢ãžã¥ãŒã«ã®1ã€ã§ãïŒDBIãLWPãããmetacpanã«å€ãã®æããããŸãïŒã
誀æ€ç¥ãçºçããªãã£ããšèšã£ãŠããããã§ã¯ãããŸãããããã®èŠåã«åŸããªãã¢ãžã¥ãŒã«ãå ¬éãã人ã¯èª°ãç¥ããŸãããããã¯å€ãã®äººã ãå©ããããšã«ãªããŸãã ããã«ãç§ã¯ãã®ctagsãåã«å®çšçãšãããããçè«çã«å¥å šã§ãããšã¯æ¬åœã«çã£ãŠããŸãã
@masatakeãµãããŒãµãŒã®ã¢ã€ãã¢ã¯ç§ã®å®è£
ãããè¯ããããå®å
šã«èãããŸãuse
ã«å¯ŸããŠãã¹ããããããã®ã¢ãžã¥ãŒã«ã®ããã€ãã«å¯ŸããŠå
éšã§ç°ãªãã»ãã³ãã£ã¯ã¹ãåŒã³åºãããšã«ãã£ãŠããã§ã«åæ§ã®ããšãè¡ã£ãŠããŸãã
https://github.com/universal-ctags/ctags/blob/master/parsers/perl.c#L348
åé¡ã¯ãMooseããŒãµãŒãããªã¬ãŒããã¢ãžã¥ãŒã«ã®ãªã¹ããåæããå¿ èŠãããããšã ãšæããŸãããããã»ã©æªãã¯ãããŸããã ãŸããããªãããŒãªMooseã®ãµãã¯ã©ã¹ãå®è¡ããŠãã人ã¯ããªããšæ³å®ããå¿ èŠããããŸãããå®è¡ããŠããå Žåãææªã®ã·ããªãªã¯MooseãµãããŒãµãŒã倱ãããšã§ãã ãããŠãç§ã¯ããã§å€§äžå€«ã§ã-ããã¯åœŒãããããæã£ãŠãããã®ããæªãã¯ãªãã§ãããã
Mooseçšã®CããŒãµãŒã®äœæã«ã€ããŠãµããŒããå¿ èŠãªå Žåã¯ãç§ããµããŒãã§ããŸãã
ç§ã¯ãPerlãšMooseçšã®ãã®çš®ã®éçããŒãµãŒãctagsã®å€ã§ã圹ç«ã€ã ãããšèããŠããŸãã çŸåšãperlã®è§£æã¯å®å šã§ã¯ãªããä¿èšŒã¯ãããŸããã ããã«ãããããšãã°ãä»ã®ãããžã§ã¯ããPerlã§ãã¹ãã«ãã¬ããžãå®å šã«å®è¡ã§ããããã«ãªããŸãã
@ masatake ãPerl 5ã¯åãã®é
ãã¿ãŒã²ãããªã®ã§ãç¶æãããã®ãããŸããªãã®ã§ã perl.c
ã®ã¡ã³ãããŒãšããŠã®ç§ã®ä»äºã¯ç°¡åã§ããã ç§ã¯ããªããåç
§ãããµãããŒãµãŒã®ããã¥ã¡ã³ããã¹ãã£ã³ããŸãã-ç§ãèšããã®ã¯ïŒãããïŒ ççŽã«èšã£ãŠãç§ã¯Universal Ctagsã®éçºã綿å¯ã«è¿œè·¡ããŠããŸããããããªãã¯å€§ããªé²æ©ãéãããšæããŸãã
@EvanCarroll ãã³ãŒãããŒã¯ïŒæ°è»œã«perl.c
ãšçµå©ããŠããŸããã ãã®äžéšã¯å®å
šã«éããã®ã§ãããåŸããèãããšãããã€ãã®ããšã¯å¥ã®æ¹æ³ã§å®è£
ãããã¹ãã§ããã ã䜿çšãã®äœ¿çšã«é¢ããŠïŒtoucheãåããããã€ã³ãã
ãã£ãããããã£ãããã ããã§ã¯ãä»é±æ«ã«äœãã§ããããèŠãŠãããŸãã ãµãããŒãµãŒãã¬ãŒã ã¯ãŒã¯ã®äœæ¥ããã§ãã¯ããŸãã
ãããã¿ã€ããæ©èœããŸãã
@ EvanCarroll ãïŒ2070ããå§ããããšãã§ããŸãã
TypeScriptããŒãµãŒã«çŠç¹ãåœãŠãŠããŸãã ã§ãããããã°ããã¯ïŒ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ã¯ãŒã«ãªååŒãç§ã¯githubã§ãããã確èªããŸããã ããŸããããªãå Žåã¯ãä»é±æ«ã«èŠãŠãããŸãã =ïŒãããããããã0.0001ç§ã§å®äºããŸãã
ãããããããã0.0001ç§ã§å®äºããŸãã
ããã¯æ¬åœã§ã¯ãªãã
ããŒãµãŒãæ¹åããã«ã¯ãctagså éšAPIã«é¢ããç¥èãã¿ãŒã²ããèšèªã«é¢ããç¥èãMooseãæéãæ ç±ã®4ã€ãå¿ èŠã§ãã-Pã
ç§ã¯ã ãŒã¹ã«ã€ããŠã®ç¥èããããŸããã ãããæãéèŠã§ãã
ããšãã°ãçŸåšã®ããŒãµãŒã¯ã with
ã¯ã©ã¹ã«ã¢ã¿ããããããuse Moose :: Ruleãã§å®çŸ©ãããã«ãŒã«ããã£ããã£ããŸããã ç§ãç¥ã£ãŠããã®ã¯ãã«ãŒã«ãã ãã§ãã ãã ããctagsããã£ããã£ããå¿
èŠã®ããã¢ã€ãã ããã£ãšããããšãç¥ã£ãŠãããããããŸããã
ctagsããã®ãããªã«ãŒã«ããã£ããã£ããããšãæåŸ
ããŸãããïŒ
ã«ãŒã«ãã¯ã©ã¹ã«æ·»ä»ãããŠããå Žåãã¯ã©ã¹ã®ã¿ã°ã«ã¯ãruleïŒããšããååã®ãã£ãŒã«ããå¿
èŠã ãšæããŸãã
ãã®ãããžã§ã¯ããæé·ãããã«ã¯ãã¿ãŒã²ããèšèªãç¥ã£ãŠãã人ããã®ãããã®èŠæ±ãå¿ èŠã§ãã
ç§ã¯ãããã®ããã€ããå®è£ ããããšãã§ããŸãã ä»ã®ãã®ãå®è£ ããããšãã§ããŸãã ãã®ãããªèŠæ±ãããã°ãåŸã§å®è£ ã§ããŸãã
çŸåšã®å®è£
ãæ¡åŒµããŠãMouseãMooãããã³MoããµããŒãã§ããŸãã
å
ã®PerlããŒãµãŒãå€æŽããã«å¿
èŠã§ãã
ç³ãèš³ãããŸããããïŒ2070ã§ãã§ã«éèŠãªã³ã¡ã³ããããã ããŠããããšãããããŸããã ããããšãããããŸããã