2017-03-17 1 views
1

댓글, 문자열 및 변수/메소드/클래스 이름에 오타가 있는지 재귀 적으로 큰 코드베이스 (대부분 파이썬, HTML 및 자바 스크립트)를 검색하고 싶습니다. 터미널에서 실행되는 것을 선호합니다.소스 코드 파일의 작은 오타를 효율적으로 찾는 방법은 무엇입니까?

문제는 aspell 또는 scspell 같은 그 맞춤법 검사기가 나를 주로 예를 들어, 스크램블되거나 누락 된 문자 같은 단순한 오타를 찾는 데 도움 수 있다면 행복 할 것 동안 (예를 들어, 낙타 표기법 용어를 용어를 프로그래밍) 거의 유일한 잘못된 반응을 찾을 수 있습니다 유지 보수 대 유지 보수, 제한적 대립, 제한적, 대대적 인 대 배포.

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

하지만 같은 것을 발견 할 것이다 :

내가 지금까지 함께 연주 한 것은 또한 HTML에서 그들을 발견 assertEqual, MyTestCase, lifecycle

답변

0

파이썬 파일에 있지만 결국 내 자신의 초점을 맞추고의이 솔루션을 및 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 

는, 선도 번호없이 목록을 타고 오탐 (false positive)을 청소 :

같은 것을 생산

이제와 typo;correction의 포맷을 얻기 위해 두 개의 파일을 붙여 넣기 paste -d";" typos.txt correct.txt > known_typos.csv

이제 우리는 반복적으로 우리의 코드베이스에서 그 교체하려면 :

,536을
#!/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 
관련 문제