2010-08-08 28 views
4

我正在重構一個相當龐大的代碼體,並且在思考如何繼續進行這件事時遇到了一些深奧的問題。這些代碼在很大程度上需要的是縮短子集。我如何計算我的Perl代碼中每個子句的相應行數?

因此,將目錄中的某種統計收集器指向這將非常有利,這將通過所有.pm,.cgi和.pl文件,找到所有潛艇(如果它只獲得命名的),並給我一個所有的表格,以及他們的行數。

我給PPI粗略一下,但找不到任何直接相關的東西,有些工具可能適用,但使用起來相當複雜。

有沒有更簡單的模塊可以做到這一點?

未能如此,你會如何做到這一點?

編輯:

與PPI周圍打了一下,創建一個收集有關一個代碼庫的相關統計數據的腳本:http://gist.github.com/514512

+0

我想你可以使用ppi來查找文檔中的所有子元素......然後所有的元素都是子元素的「子元素」並對它們進行計數...... – xenoterracide 2010-08-08 18:15:39

回答

10
my $document = PPI::Document->new($file); 

# Strip out comments and documentation                                    
$document->prune('PPI::Token::Pod'); 
$document->prune('PPI::Token::Comment'); 

# Find all the named subroutines                                      
my $sub_nodes = $document->find(
    sub { $_[1]->isa('PPI::Statement::Sub') and $_[1]->name }); 

print map { sprintf "%s %s\n", $_->name, scalar split /\n/, $_->content } @$sub_nodes; 
+0

男人,我讓這更多在我的腦海裏,比想要的更復雜。非常感謝。 – Mithaldu 2010-08-08 18:33:15

3

我懷疑,僅僅識別長函數是最好的方法以確定需要重構的內容。相反,我會通過perlcritic運行代碼,以增加苛刻程度並遵循這些建議。

+3

我目前只是試圖改善代碼的結構。針對那裏發生的暴行,評論家的化妝品改進可以等待,因爲評論家基本告訴我:「所有這些都很糟糕!」 (一個模塊有一個300線子,它的身體三次到達縮進級別12) – Mithaldu 2010-08-08 18:39:20

+2

@mithaldu:聽起來你已經有了一個很好的想法,首先要解決什麼問題:)當你用完想法時,perlcritic非常適合幫助,但這可能不會有一段時間。 – Ether 2010-08-08 18:56:12

+0

不用擔心,批評家是我在第一件事情時就會拋出的第一件事情,一旦它受到控制(測試寫入,大致重組等)。畢竟,我確實寫了這個:Dist :: Zilla :: Plugin :: ProgCriticTests :) – Mithaldu 2010-08-08 19:03:46

相關問題