From Fedora Project Wiki
No edit summary |
|||
Line 50: | Line 50: | ||
|''Mo*se metaclasses''|| || || || || | |''Mo*se metaclasses''|| || || || || | ||
|- | |- | ||
|''Catalyst and other plugin syntax''||<pre>use Catalyst qw/-Debug ConfigLoader Static::Simple/;</pre>||<pre>perl(Catalyst)</pre>||<pre>perl(Catalyst) | |''Catalyst and other plugin syntax''||<pre>use Catalyst qw/ | ||
-Debug | |||
ConfigLoader | |||
Static::Simple/;</pre>||<pre>perl(Catalyst)</pre>||<pre> | |||
perl(Catalyst) | |||
perl(Catalyst::Plugin::ConfigLoader) | perl(Catalyst::Plugin::ConfigLoader) | ||
perl(Catalyst::Plugin::Static::Simple) | perl(Catalyst::Plugin::Static::Simple) | ||
</pre>|| || | </pre>|| ||Note that it is quite common for a [[Catalyst]] app to have a multi-line "use Catalyst" statement; we need to be able to deal with multi-line | ||
|- | |- | ||
|''Ability to include/exclude''|| || || || || | |''Ability to include/exclude''|| || || || || | ||
|} | |||
== Requirements == | |||
=== Catalyst and other plugin syntax === | |||
{| | |||
|- | |||
|'''Example'''||'''Current'''||'''Target'''||'''Compat?'''||'''Comment''' | |||
|- | |||
|<pre>use Catalyst qw/ | |||
-Debug | |||
ConfigLoader | |||
Static::Simple/;</pre>||<pre>perl(Catalyst)</pre>||<pre> | |||
perl(Catalyst) | |||
perl(Catalyst::Plugin::ConfigLoader) | |||
perl(Catalyst::Plugin::Static::Simple) | |||
</pre>|| ||Note that it is quite common for a [[Catalyst]] app to have a multi-line "use Catalyst" statement; we need to be able to deal with multi-line | |||
|- | |||
|} | |} |
Revision as of 21:44, 19 February 2009
Brain dump. Comments welcome and appreciated, on the talk page.
Current Flaws
Needed
- Understands "use base", "use parent", etc, constructs.
- Understands Moose
- "extends" - subclassing
- "with" - roles
- "metaclass" - metaclasses
- "traits" - metaclass roles
- Understands Catalyst plugin speficication syntax
- This should be extensible to other module classes
- Doesn't generate duplicates. e.g.: perl(Foo) and perl(Foo) >= 1.9
- Better able to deal with the wonders of Perl versioning; e.g.
- 1.20a stays 1.20a
- 1.20 becomes 1.020000 (version triplet)
Questions
- Should we attempt to compile? (a la
perl -wc
or Module::ScanDeps)- PROS: highly accurate
- CONS: may fail for a variety of reasons
- Should we try to normalize the versions?
Requirement | Example | Current | Target | Compat? | Comment |
use base constructs correctly evaluated |
use base 'XXX'; |
perl(base) |
perl(base) perl(XXX) |
Need also to correctly evaluate use parent ... , etc.
| |
No duplicate provides | We often see duplicate requires. These are harmless, except in the case where one requires is versioned and another unversioned. This might need to be addressed at a higher level than perl.prov. | ||||
Mo*se subclassing | extends 'Some::Class'; |
perl(Some::Class) |
Multiple classes can be specified; not possible to specify version with this syntax. | ||
Mo*se roles | with 'Some::Class'; # multiple roles at once with 'Role::A', 'Role::B'; |
perl(Some::Class) perl(Role::A) perl(Role::B) |
Multiple classes can be specified; not possible to specify version with this syntax. | ||
Mo*se traits | ...in an attribute specification:... traits => [ 'X', 'Y' ] |
perl(Moose::Meta::Custom::Trait::X) perl(Moose::Meta::Custom::Trait::Y) |
This is going to be tricky. | ||
Mo*se metaclasses | |||||
Catalyst and other plugin syntax | use Catalyst qw/ -Debug ConfigLoader Static::Simple/; |
perl(Catalyst) |
perl(Catalyst) perl(Catalyst::Plugin::ConfigLoader) perl(Catalyst::Plugin::Static::Simple) |
Note that it is quite common for a Catalyst app to have a multi-line "use Catalyst" statement; we need to be able to deal with multi-line | |
Ability to include/exclude |
Requirements
Catalyst and other plugin syntax
Example | Current | Target | Compat? | Comment |
use Catalyst qw/ -Debug ConfigLoader Static::Simple/; |
perl(Catalyst) |
perl(Catalyst) perl(Catalyst::Plugin::ConfigLoader) perl(Catalyst::Plugin::Static::Simple) |
Note that it is quite common for a Catalyst app to have a multi-line "use Catalyst" statement; we need to be able to deal with multi-line |