From Fedora Project Wiki

Revision as of 19:42, 19 February 2009 by Cweyl (talk | contribs) (→‎Questions)

Brain dump. Comments welcome and appreciated, on the talk page.

Current Flaws

Needed

  1. Understands "use base", "use parent", etc, constructs.
  2. Understands Moose
    1. "extends" - subclassing
    2. "with" - roles
    3. "metaclass" - metaclasses
    4. "traits" - metaclass roles
  3. Understands Catalyst plugin speficication syntax
    • This should be extensible to other module classes
  4. Doesn't generate duplicates. e.g.: perl(Foo) and perl(Foo) >= 1.9
  5. 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

  1. Should we attempt to compile? (a la perl -wc or Module::ScanDeps)
    • PROS: highly accurate
    • CONS: may fail for a variety of reasons
  2. 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)
Ability to include/exclude