From Fedora Project Wiki

(add first runthrough of table)
Line 29: Line 29:
 
|'''Requirement'''||'''Example'''||'''Current'''||'''Target'''||'''Compat?'''||'''Comment'''
 
|'''Requirement'''||'''Example'''||'''Current'''||'''Target'''||'''Compat?'''||'''Comment'''
 
|-
 
|-
|<code>use base</code> constructs correctly evaluated||<pre>use base 'XXX';</pre>||<pre>perl(base)</pre>||<pre>perl(base)
+
|''<code>use base</code> constructs correctly evaluated''||<pre>use base 'XXX';</pre>||<pre>perl(base)</pre>||<pre>perl(base)
 
perl(XXX)</pre>|| ||Need also to correctly evaluate <code>use parent ...</code>, etc.
 
perl(XXX)</pre>|| ||Need also to correctly evaluate <code>use parent ...</code>, etc.
 
|-
 
|-
 
|''No duplicate provides''|| || || || ||We often see duplicate requires.  These are harmless, except in the case where one requires is versioned and another unversioned.<br><br>This might need to be addressed at a higher level than perl.prov.
 
|''No duplicate provides''|| || || || ||We often see duplicate requires.  These are harmless, except in the case where one requires is versioned and another unversioned.<br><br>This might need to be addressed at a higher level than perl.prov.
 
|-
 
|-
|Mo*se subclassing||<pre>extends 'Some::Class';</pre>|| ||<pre>perl(Some::Class)</pre>|| ||
+
|''Mo*se subclassing''||<pre>extends 'Some::Class';</pre>|| ||<pre>perl(Some::Class)</pre>|| ||Multiple classes can be specified; not possible to specify version with this syntax.
 
|-
 
|-
|Mo*se roles||<pre>with 'Some::Class';</pre>|| ||<pre>perl(Some::Class)</pre>|| ||
+
|''Mo*se roles''||<pre>with 'Some::Class';
 +
 
 +
# multiple roles at once
 +
with 'Role::A', 'Role::B';</pre>|| ||<pre>perl(Some::Class)
 +
 
 +
perl(Role::A)
 +
perl(Role::B)</pre>|| ||Multiple classes can be specified; not possible to specify version with this syntax.
 
|-
 
|-
|Mo*se traits||...in an attribute specification:<pre>...
+
|''Mo*se traits''||...in an attribute specification:<pre>...
 
traits => [ 'X', 'Y' ]</pre>|| ||<pre>perl(Moose::Meta::Custom::Trait::X)
 
traits => [ 'X', 'Y' ]</pre>|| ||<pre>perl(Moose::Meta::Custom::Trait::X)
 
perl(Moose::Meta::Custom::Trait::Y)</pre>|| ||This is going to be tricky.
 
perl(Moose::Meta::Custom::Trait::Y)</pre>|| ||This is going to be tricky.
 
|-
 
|-
|Mo*se metaclasses|| || || || ||
+
|''Mo*se metaclasses''|| || || || ||
 
|-
 
|-
|Catalyst and other plugin syntax|| || || || ||
+
|''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::Static::Simple)
 +
</pre>|| ||
 
|-
 
|-
|Ability to include/exclude|| || || || ||
+
|''Ability to include/exclude''|| || || || ||
 
|}
 
|}

Revision as of 19:42, 19 February 2009

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