簡體   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