New Upstream Release - libperl-prereqscanner-notquitelite-perl

Ready changes

Summary

Merged new upstream version: 0.9917 (was: 0.9916).

Resulting package

Built on 2023-05-01T23:38 (took 9m14s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-releases libperl-prereqscanner-notquitelite-perl

Lintian Result

Diff

diff --git a/Changes b/Changes
index cea3192..18eb94b 100644
--- a/Changes
+++ b/Changes
@@ -1,5 +1,8 @@
 Revision history for Perl-PrereqScanner-NotQuiteLite
 
+0.9917 2023/04/27
+  - Update Object::Pad support (:isa/:does)
+
 0.9916 2022/04/08
   - Ignore core modules with undef version correctly
   - Drop URI::cpan dependency and use Parse::Distname to parse cpan URI
diff --git a/MANIFEST b/MANIFEST
index 5c6de0d..78ba563 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -90,6 +90,7 @@ t/moose/todo.t
 t/moose/with_variable.t
 t/moosex_declare.t
 t/object_pad.t
+t/object_pad_attr.t
 t/only.t
 t/package_variant.t
 t/plack.t
diff --git a/META.json b/META.json
index 7143f4f..e29d01e 100644
--- a/META.json
+++ b/META.json
@@ -69,6 +69,6 @@
          "url" : "https://github.com/charsbar/Perl-PrereqScanner-NotQuiteLite"
       }
    },
-   "version" : "0.9916",
-   "x_serialization_backend" : "JSON::PP version 4.05"
+   "version" : "0.9917",
+   "x_serialization_backend" : "JSON::PP version 4.12"
 }
diff --git a/META.yml b/META.yml
index 41fe08e..691044f 100644
--- a/META.yml
+++ b/META.yml
@@ -34,5 +34,5 @@ requires:
   perl: '5.008001'
 resources:
   repository: https://github.com/charsbar/Perl-PrereqScanner-NotQuiteLite
-version: '0.9916'
+version: '0.9917'
 x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff --git a/debian/changelog b/debian/changelog
index fc136fe..727a843 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+libperl-prereqscanner-notquitelite-perl (0.9917-1) UNRELEASED; urgency=low
+
+  * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Mon, 01 May 2023 23:30:01 -0000
+
 libperl-prereqscanner-notquitelite-perl (0.9916-1) unstable; urgency=medium
 
   * Import upstream version 0.9916.
diff --git a/lib/Perl/PrereqScanner/NotQuiteLite.pm b/lib/Perl/PrereqScanner/NotQuiteLite.pm
index 9d91ad6..d4cd6e1 100644
--- a/lib/Perl/PrereqScanner/NotQuiteLite.pm
+++ b/lib/Perl/PrereqScanner/NotQuiteLite.pm
@@ -6,7 +6,7 @@ use Carp;
 use Perl::PrereqScanner::NotQuiteLite::Context;
 use Perl::PrereqScanner::NotQuiteLite::Util;
 
-our $VERSION = '0.9916';
+our $VERSION = '0.9917';
 
 our @BUNDLED_PARSERS = qw/
   Aliased AnyMoose Autouse Catalyst ClassAccessor
diff --git a/lib/Perl/PrereqScanner/NotQuiteLite/Parser/ObjectPad.pm b/lib/Perl/PrereqScanner/NotQuiteLite/Parser/ObjectPad.pm
index f54976f..4351edc 100644
--- a/lib/Perl/PrereqScanner/NotQuiteLite/Parser/ObjectPad.pm
+++ b/lib/Perl/PrereqScanner/NotQuiteLite/Parser/ObjectPad.pm
@@ -70,6 +70,15 @@ sub parse_class_args {
         }
       }
     }
+    if (ref $token && $token->[1] && $token->[1] eq 'ATTRIBUTE') {
+      while($token->[0] =~ s/:(?:isa|does)\(([^)]+)\)//) {
+        my ($name, $version) = split /\s+/, $1;
+        $version ||= 0;
+        if (is_module_name($name) && is_version($version)) {
+          $c->add($name => $version);
+        }
+      }
+    }
   }
 }
 
diff --git a/t/object_pad_attr.t b/t/object_pad_attr.t
new file mode 100644
index 0000000..8e752f9
--- /dev/null
+++ b/t/object_pad_attr.t
@@ -0,0 +1,396 @@
+use strict;
+use warnings;
+use FindBin;
+use lib "$FindBin::Bin/../";
+use Test::More;
+use t::Util;
+
+test('basic class', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Foo;
+END
+
+test('basic class version', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Foo 1.00;
+END
+
+test('basic role', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Foo;
+END
+
+test('basic role version', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Foo 1.00;
+END
+
+# simple :isa/:does
+
+test('basic class :isa', <<'END', {'Object::Pad' => 0, 'Bar' => 0});
+use Object::Pad;
+
+class Foo :isa(Bar);
+END
+
+test('basic class version :isa', <<'END', {'Object::Pad' => 0, 'Bar' => 0});
+use Object::Pad;
+
+class Foo 1.00 :isa(Bar);
+END
+
+test('basic class :isa base version', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00'});
+use Object::Pad;
+
+class Foo :isa(Bar 2.00);
+END
+
+test('basic class version :isa base version', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00'});
+use Object::Pad;
+
+class Foo 1.00 :isa(Bar 2.00);
+END
+
+test('basic class :does', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => 0});
+use Object::Pad;
+
+class Foo :does(Bar) :does(Baz);
+END
+
+test('basic class version :does', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => 0});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar) :does(Baz);
+END
+
+test('basic class :does role version', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo :does(Bar 2.00) :does(Baz 3.00);
+END
+
+test('basic class version :does role version', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar 2.00) :does(Baz 3.00);
+END
+
+test('basic class :does role, role version', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo :does(Bar) :does(Baz 3.00);
+END
+
+test('basic class version :does role, role version', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar) :does(Baz 3.00);
+END
+
+# both :isa and :does
+
+test('basic class :does role version :isa base', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00', 'Quux' => '4.00'});
+use Object::Pad;
+
+class Foo :does(Bar 2.00) :does(Baz 3.00) :isa(Quux 4.00);
+END
+
+test('basic class version :does role version :isa base', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00', 'Quux' => '4.00'});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar 2.00) :does(Baz 3.00) :isa(Quux 4.00);
+END
+
+test('basic class :isa base :does role version', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00', 'Quux' => '4.00'});
+use Object::Pad;
+
+class Foo :isa(Quux 4.00) :does(Bar 2.00) :does(Baz 3.00);
+END
+
+test('basic class version :isa base :does role version', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00', 'Quux' => '4.00'});
+use Object::Pad;
+
+class Foo 1.00 :isa(Quux 4.00) :does(Bar 2.00) :does(Baz 3.00);
+END
+
+# class/role attributes
+
+test('basic class :does role version :isa base :attr', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00', 'Quux' => '4.00'});
+use Object::Pad;
+
+class Foo :does(Bar 2.00) :does(Baz 3.00) :isa(Quux 4.00) :repr(native), :repr(default), :strict(params);
+END
+
+test('basic class version :does role version :isa base :attr', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00', 'Quux' => '4.00'});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar 2.00) :does(Baz 3.00) :isa(Quux 4.00) :repr(native), :repr(default), :strict(params)
+END
+
+test('basic role :attr', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Foo :compat(invokable);
+END
+
+test('basic role version :attr', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Foo 1.00 :compat(invokable);
+END
+
+# internal classes/roles
+
+test('basic class version :isa internal class', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Bar;
+
+class Foo 1.00 :isa(Bar);
+END
+
+test('basic class :isa internal class version', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Bar;
+
+class Foo :isa(Bar 2.00);
+END
+
+test('basic class version :isa internal class version', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Bar;
+
+class Foo 1.00 :isa(Bar 2.00);
+END
+
+test('basic class version :does internal role', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Bar;
+
+class Foo 1.00 :does(Bar);
+END
+
+test('basic class :does internal role version', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Bar;
+
+class Foo :does(Bar 2.00);
+END
+
+test('basic class version :does internal role version', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Bar;
+
+class Foo 1.00 :does(Bar 2.00);
+END
+
+# class/role blocks ####
+
+test('basic class {}', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Foo {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class version {}', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+class Foo 1.00 {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic role {}', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Foo {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic role version {}', <<'END', {'Object::Pad' => 0});
+use Object::Pad;
+
+role Foo 1.00 {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+# simple :isa/:does
+
+test('basic class :isa {}', <<'END', {'Object::Pad' => 0, 'Bar' => 0});
+use Object::Pad;
+
+class Foo :isa(Bar) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class version :isa {}', <<'END', {'Object::Pad' => 0, 'Bar' => 0});
+use Object::Pad;
+
+class Foo 1.00 :isa(Bar) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class :isa base version {}', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00'});
+use Object::Pad;
+
+class Foo :isa(Bar 2.00) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class version :isa base version {}', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00'});
+use Object::Pad;
+
+class Foo 1.00 :isa(Bar 2.00) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class :does {}', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => 0});
+use Object::Pad;
+
+class Foo :does(Bar) :does(Baz) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class version :does {}', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => 0});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar) :does(Baz) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class :does role version {}', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo :does(Bar 2.00) :does(Baz 3.00) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class version :does role version {}', <<'END', {'Object::Pad' => 0, 'Bar' => '2.00', 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar 2.00) :does(Baz 3.00) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class :does role, role version {}', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo :does(Bar) :does(Baz 3.00) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+test('basic class version :does role, role version {}', <<'END', {'Object::Pad' => 0, 'Bar' => 0, 'Baz' => '3.00'});
+use Object::Pad;
+
+class Foo 1.00 :does(Bar) :does(Baz 3.00) {
+  has $x :param = 0;
+  has $y :param = 0;
+
+  method move ($dX, $dY) {
+    $x += $dX;
+    $y += $dY;
+  }
+}
+END
+
+done_testing;

Debdiff

File lists identical (after any substitutions)

No differences were encountered in the control files

More details

Full run details