From Fedora Project Wiki
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 |