diff --git a/lib/Module/Metadata.pm b/lib/Module/Metadata.pm index ae06d46..bedf968 100644 --- a/lib/Module/Metadata.pm +++ b/lib/Module/Metadata.pm @@ -87,7 +87,7 @@ my $CLASS_REGEXP = qr{ # match a class declaration (core since 5.38) \s* # optional whitespace ($V_NUM_REGEXP)? # optional version number \s* # optional whitespace - [;\{] # semicolon line terminator or block start + [:;\{] # attribute start, semicolon line terminator or block start }x; my $VARNAME_REGEXP = qr{ # match fully-qualified VERSION name diff --git a/t/extract-version.t b/t/extract-version.t index 29cfbec..717d21b 100644 --- a/t/extract-version.t +++ b/t/extract-version.t @@ -386,6 +386,38 @@ our $VERSION = '1.23_00_00'; vers => 'v1.2_3', all_versions => { Simple => 'v1.2_3' }, }, +{ + name => 'class NAME VERSION ATTRIBUTE', + code => <<'---', + class Simple 1.23 :isa(Complex); +--- + vers => '1.23', + all_versions => { Simple => '1.23' }, +}, +{ + name => 'class NAME VERSION ATTRIBUTE', + code => <<'---', + class Simple 1.23_01 :isa(Complex); +--- + vers => '1.23_01', + all_versions => { Simple => '1.23_01' }, +}, +{ + name => 'class NAME VERSION ATTRIBUTE', + code => <<'---', + class Simple v1.2.3 :isa(Complex); +--- + vers => 'v1.2.3', + all_versions => { Simple => 'v1.2.3' }, +}, +{ + name => 'class NAME VERSION ATTRIBUTE', + code => <<'---', + class Simple v1.2_3 :isa(Complex); +--- + vers => 'v1.2_3', + all_versions => { Simple => 'v1.2_3' }, +}, { name => 'trailing crud', code => <<'---', @@ -506,6 +538,46 @@ class Simple v1.2.3_4 { vers => 'v1.2.3_4', all_versions => { Simple => 'v1.2.3_4' }, }, +{ + name => 'class NAME ATTRIBUTE BLOCK, undef $VERSION', + code => <<'---', +class Simple :isa(Complex) { + our $VERSION; +} +--- + vers => $undef, + all_versions => {}, +}, +{ + name => 'class NAME ATTRIBUTE BLOCK, with $VERSION', + code => <<'---', +class Simple :isa(Complex) { + our $VERSION = '1.23'; +} +--- + vers => '1.23', + all_versions => { Simple => '1.23' }, +}, +{ + name => 'class NAME VERSION ATTRIBUTE BLOCK (1)', + code => <<'---', +class Simple 1.23 :isa(Complex) { + 1; +} +--- + vers => '1.23', + all_versions => { Simple => '1.23' }, +}, +{ + name => 'class NAME VERSION ATTRIBUTE BLOCK (2)', + code => <<'---', +class Simple v1.2.3_4 :isa(Complex) { + 1; +} +--- + vers => 'v1.2.3_4', + all_versions => { Simple => 'v1.2.3_4' }, +}, { name => 'set from separately-initialised variable, two lines', code => <<'---',