2011-10-18 8 views
1

私の先駆者(バージョン管理が不十分なため)がコードの大部分をコメントに変換した大きな古いプロジェクトプロジェクトを維持する必要があります。 バージョン管理のすべてが完了したので、これらのコメントはもう必要ないと思います。 これらのコメントのコードはとにかく腐っています。コメントの長い伸びを見つけよう

私はこれらのコメントの中で最長のものを探しています。 20以上の連続したコメント行を持っているすべてのファイルを私に与える方法があればうれしいでしょう。 私の知る限り、//が使われています。 /* */を見つけることは必要ではありません(おそらく、腐ったjavadocを見つけることができても有害なことです...)。

+0

"[[EclipseでJavaファイル全体でコメントアウトされたコードをすばやく見つけることはできますか?](http://stackoverflow.com/questions/4144213/is-there-a-quickway-to- find-all-the-out-code-across-java-files-in-ecl)」も同様の質問です。私は[この回答]にリンクしています(http://stackoverflow.com/questions/4144213/is-there-a-quickway-to-find-all-the-commented-out-code-across-java-files-in -ecl/7677471#7677471)。 – bbuser

答えて

1

Howaboutこの:

grep -ERn '^[[:space:]]*//' root_directory 

-Eは '拡張' の用途が-Rはそれが

-nは、あなたが次に行番号

でfilnamesをすることができます印刷したディレクトリを再帰的に作る

を正規表現このリストを簡単に処理して連続した一致を探すことができます。行番号が出力行ごとに1つずつ増加します。

これは、あなたがこのようなラインと一致したくない前提としています

int x = foo; // some comment 

をしかし、完全にのみ行はコメント:

// this is a comment 

を更新

上記の出力を処理する短いPythonスクリプトですgrep

import sys 

filenames_of_interest = set() 
filename = None 
prev_line_num = 0 
comment_count = 0 
for line in sys.stdin.readlines(): 
     this_filename, line_num, _ = line.split(':',2) 
     line_num = int(line_num) 
     if this_filename != filename: 
       comment_count = 0 
       filename = this_filename 
     elif line_num != prev_line_num + 1: 
       comment_count = 0 
     prev_line_num = line_num 
     comment_count += 1 
     if comment_count > 20: 
       filenames_of_interest.add(filename) 

print "files with blocks of comments:" 
for i in filenames_of_interest: 
     print ' ', i 

それは正しく、名前にコロンを使用してファイルを処理しませんが、それが問題だ場合に対処するために変更することが難しいことではありません。

+0

問題の一部だけを解決しますが、私の好みの解決策です。どうもありがとう。 – bbuser

+0

私はそれを試してみる時間がありませんでしたが、もう一度感謝します。 – bbuser

0

まだ試していませんが、Sonarは有望です。

EDIT:インストールが苦痛であるようです。

0

私はこのように行うだろう:私は特定のファイルを更新していますたび

、私がチェックインする前にコメントを削除しますそのようにひとつずつ「あなたがそれを見られるよりも、私はキャンプ場クリーナーを残すだろう」。

私を信じてください!コードは3ヶ月でクリーナーになります。

関連する問題