繁体   English   中英

我怎样才能整理DBIx :: Class :: Schema :: Loader的输出?

[英]How can I tidy DBIx::Class::Schema::Loader's output?

我们目前正在我们的团队中介绍DBIx::Class ,我们想从DBIx::Class::Schema::Loader 但是,我们对代码样式有很高的要求,即我们将Perl::Tidy作为pre-commit脚本的一部分,因为之前我们还没有生成任何代码。 现在,我们必须确保Schema::Loader生成的代码干净整洁。 我们不能在提交之前对代码运行perltidy ,因为它搞砸了DBIC的MD5哈希。 所以集成到Schema::Loader的后处理器将是我的首选,也可能是唯一可行的解​​决方案。 但是仍然:你将如何处理这个问题?

编辑我也可以修补DBIx::Class::Schema::Loader::Base来使用perltidy preprocess参数,如果它得到一个。

DBICSL的开发版本现在有一个overwrite_modifications选项,您可以使用该选项忽略代码的md5summed部分中的更改。 这应该让你在提交之前在输出上运行perltidy,并且仍然能够在以后重新转储。

已发布0.05000(以前的开发版本),它已添加了overwrite_modifications选项rbuels。

我将尽快添加一个post_process选项。

这个问题刚才被问过,但我今天不得不处理这个问题,所以我想我会根据目前对该模块所做的更改来分享我的解决方案。 如果你扫描PerlTidy文档中的--format-skipping,你会发现你可以给出关于不应该整理哪些代码的PerlTidy指令。 开始和结束标记分别是#<<<和#>>>。 因此,默认设置看起来像这样:

# tidy my code
my $foo = 'bar';

#<<<
# don't tidy the code below
my $baz   =     'foo';

# start to tidy again
#>>>

$foo .= 'stuff';

这很容易。 现在您只需要让Loader用这些标记包装生成的代码。 这可能看起来像这样:

my %args = (                                                                                     
    components            => [ 'InflateColumn::DateTime', 'TimeStamp' ],                                                 
    debug                 => 1,                                                                  
    dump_directory        => './lib',                                                            
    filter_generated_code => sub {                                                               
        my ( $type, $class, $text ) = @_;                                                        
        return "#<<<\n$text#>>>";                                                                
    },                                                                                           
    generate_pod            => 0,                                                                
    naming                  => 'current',                                                        
    overwrite_modifications => 0,                                                                
    skip_load_external      => 1,                                                                
    use_moose               => 1,                                                                
    use_namespaces          => 1,                                                                
);                                                                                               

make_schema_at( 'My::Schema', \%args, [$dsn, $user, $pass] ); 

重要的部分是filter_generated_code ,它允许您包装生成的代码。 现在您可以生成模式文件,并且仍然可以对它们进行PerlTidy。 这将允许您整理在生成的文件底部添加的自定义代码,而不会遇到生成的代码被make_schema_at()以外的其他内容更改时发生的错误。

在我的情况下,我决定关闭generate_pod ,因为PerlTidy仍然(由于某种原因)在生成的Pod中插入一些换行符。 我还没弄清楚为什么会这样,但是关闭Pod会修复它而我可以没有它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM