2017-03-17 11 views
1

コメント、文字列、変数/メソッド/クラス名の入力ミスを大規模なコードベース(主にpython、HTML、javascript)で再帰的に検索したいと思います。端末で実行されるものに対する強い好み。ソースコードファイルの小さなタイプミスを効率的に見つける方法は?

問題がaspellまたはscspellのようなそのスペルチェッカーが、それは私は主に、例えばスクランブルまたは行方不明の手紙のような単純なタイプミスを見つけるのに役立つことができれば、私は幸せになるだろうが(例えば、キャメル記法用語を用語をプログラミングする)はほぼ唯一の偽陽性を見つけることですメンテナンスとメンテナンス、制限されたものと制限されたもの、dpeloymentとデプロイメント。

for f in **/*.py ; do echo $f ; aspell list < $f | uniq -c ; done 

が、それはのようなものでしょう:

私はこれまでのところで遊んでいたことでも、HTMLでそれらを見つけassertEqual, MyTestCase, lifecycle

答えて

0

のpythonファイルになく、最終的には私自身の焦点のこのソリューションをとjs。偽陽性から手作業でソートする必要がありましたが、それはわずかな時間しかかかりませんでしたが、約150のタイプミスがありました。

保存し、このように、実行可能ファイルなどextractcomments:それは再帰的に一つ以上のaspellの辞書を使用してコードベースにして、それをすべてを収集

for f in **/*.py ; do ~/extractcomments $f >> ~/comments.txt ; done 

ラン:

#!/usr/bin/env python3 
import argparse 
import io 
import tokenize 


if __name__ == "__main__": 
    parser = argparse.ArgumentParser(add_help=False) 
    parser.add_argument('filename') 
    args = parser.parse_args() 

    with io.open(args.filename, "r", encoding="utf-8") as sourcefile: 
     for t in tokenize.generate_tokens(sourcefile.readline): 
      if t.type == tokenize.COMMENT: 
       print(t.string.lstrip("#").strip()) 

は、さらなる処理のためのすべてのコメントを収集タイプミスと判断され、その出現回数がカウントされます。

cat ~/comments.txt | aspell --lang=en list|aspell --lang=de list | sort | uniq -c | sort -n > ~/typos.txt 

:各タイプミスのために所望の置換を取得するために、その上に第二のファイル correct.txtと実行のaspellにコピーし、

10 availabe 
8 assignement 
7 hardwird 

は、大手番号なしリストを取る偽陽性を一掃:

のようなものを作成します

は今paste -d";" typos.txt correct.txt > known_typos.csv

typo;correctionのフォーマットを取得するには2つのファイルを貼り付ける今、私たちは、再帰的に私たちのコードベースのものを交換したいです

#!/bin/bash 

root_dir=$(git rev-parse --show-toplevel) 

while IFS=";" read -r typo fix ; do 
    git grep -l -z -w "${typo}" -- "*.py" "*.html" | xargs -r --null sed -i "s/\b${typo}\b/${fix}/g" 
done < $root_dir/known_typos.csv 

私のbashスキルが悪いので、改善の余地があります。

アップデート:私はこれを実行して、メソッド名でより多くのタイプミスを見つけることができる:

grep -r def --include \*.py . | cut -d ":" -f 2- |tr "_" " " | aspell --lang=en list | sort -u 

アップデート2:例えばあるタイプミスを修正するために管理例えば、単語の境界を持たないアンダースコアの名前や文字列の中にi_am_a_typpo3

#!/bin/bash                               

root_dir=$(git rev-parse --show-toplevel)                       
while IFS=";" read -r typo fix ; do                         
    echo ${typo}                              
    find $root_dir \(-name '*.py' -or -name '*.html' \) -print0 | xargs -0 perl -pi -e "s/(?<![a-zA-Z])${typo}(?![a-zA-Z])/${fix}/g"                              
done < $root_dir/known_typos.csv 
関連する問題