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