From Fedora Project Wiki

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

  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)
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