[英]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.