首页 > 解决方案 > 如何实现自定义 Perl::PrereqScanner::NotQuiteLite 解析器

问题描述

尝试编写自定义解析器来查找通过DBIx::Class load_components加载的模块,如下所示:

# lib/DBIC.pm
package DBIC;

use 5.026;
use Perl::PrereqScanner::NotQuiteLite::Util;

sub register {
    return { use => { 'DBIx::Class::Core' => 'parse_dbic' } };
}

sub parse_dbic {
    die 'We never reach this point';
}

1;

测试它:

# t/dbic.t
use 5.026;
use Test2::V0 -target => 'DBIC';
use Perl::PrereqScanner::NotQuiteLite;

my $scanner = Perl::PrereqScanner::NotQuiteLite->new( parsers => [':bundled', '+DBIC'] );
my $string  = <<'EOF';
package My::Schema;
use base 'DBIx::Class::Core';
__PACKAGE__->load_components('UUIDColumns');
EOF

subtest 'DBIC custom parser' => sub {
    is( $scanner->scan_string($string)->requires->as_string_hash,
        {   'base'                     => 0,
            'DBIx::Class::Core'        => 0,
            'DBIx::Class::UUIDColumns' => 0,
        },
        'should find dependencies declared via "load_components"',
    );
};

done_testing;

查看了其他解析器,包括:

从实现看来,上述实现应该会导致parse_dbic被调用。

是否缺少一些应该触发函数被调用的东西?

标签: perldbix-class

解决方案


推荐阅读