구문 및 의미 검사 자동화를 위한 pre-commit-config-shellcheck

추론



이미 작성된 코드를 두 번째로 확인하는 것은 custom software development에 관련된 대부분의 프로그래머에게 소모적이고 신뢰할 수 없는 작업일 수 있습니다. 며칠 전 코드를 리팩토링하는 동안 사전 커밋 구성 파일의 셸 코드에서 몇 가지 실수를 발견했습니다. 이러한 오류는 경고 없이 오랫동안 존재해 왔습니다. 그렇기 때문에 이러한 코드 검사가 더 안정적이거나 자동으로 진행되는지 생각했습니다. 이후 pre-commit-config-shellcheck은 바로 이러한 목적을 위해 만들어졌습니다.

차이점이 뭐야



이 도구는 프로젝트의 .pre-commit-config.yaml 파일에서 실수를 자동으로 감지하고 해결하도록 도와줍니다. 모든 구문 및 대부분의 의미 검사가 자동으로 수행됩니다. 또한 버그 수정 권장 사항을 받게 됩니다. 이것은 다른 도구인 Shellcheck를 사용하여 구성 파일의 모든 셸 코드 항목을 자동으로 확인하여 수행됩니다.

작동 방식



쉘체크



Shellcheck은 쉘 스크립트 정적 분석 도구입니다. 이 도구의 주요 목적은 널리 사용되는 구문 오류를 찾고 향후 상황에서 스크립트가 실패할 수 있는 코너 케이스를 지적하면서 이를 수정하기 위한 제안을 제공하는 것입니다.

파일 확인



이 도구의 모든 검사는 .pre-commit-config.yaml 파일에서 수행되지만 이 파일은 셸 코드뿐만 아니라 다른 구성 지점을 포함하는 파일의 구조 때문에 Shellcheck에서 직접 분석할 수 없습니다. 발견된 셸 진입점을 사용하여 임시 파일 목록을 만들고 이를 개별적으로 확인하여 이에 대한 해결 방법을 찾았습니다.

하위 프로세스



Shellcheck를 사용하는 주요 방법은 터미널을 통하는 것이며 이 도구에는 다른 프로그래밍 언어에 대한 어댑터가 없으므로 각 임시 파일에 대한 검사를 수행하기 위해 Python 하위 프로세스 모듈을 사용합니다. 그런 다음 하위 프로세스의 출력이 수집되고 도구는 경고 및 해당 위치 목록과 함께 단일 pre-commit-config-shellcheck 출력을 형성합니다.

사용 및 출력 예:

; pre_commit_config_shellcheck.py .pre-commit-config.yaml                                                                                                                                                                               

In entry "seed-isort-config" on line 9:                                                                                                                                                                                                 
var = 42                                                                                                                                                                                                                                
    ^-- SC2283 (error): Remove spaces around = to assign (or use [ ] to compare, or quote '=' if literal).                                                                                                                              


In entry "seed-isort-config" on line 10:                                                                                                                                                                                                
echo '$var'                                                                                                                                                                                                                             
     ^----^ SC2016 (info): Expressions don't expand in single quotes, use double quotes for that.                                                                                                                                       

For more information:                                                                                                                                                                                                                   
  https://www.shellcheck.net/wiki/SC2283 -- Remove spaces around = to assign ...                                                                                                                                                        
  https://www.shellcheck.net/wiki/SC2016 -- Expressions don't expand in singl...                                                                                                                                                        

In entry "removestar" on line 19:                                                                                                                                                                                                       
removestar -i ${NAME}                                                                                                                                                                                                                   
              ^-----^ SC2086 (info): Double quote to prevent globbing and word splitting.                                                                                                                                               

Did you mean:                                                                                                                                                                                                                           
removestar -i "${NAME}"                                                                                                                                                                                                                 

For more information:                                                                                                                                                                                                                   
  https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...    


사용하기 쉬운



사용자를 위해 이 도구를 간단하게 유지하기 위해 pre-commit-config-shellcheck를 사용하는 몇 가지 방법이 있습니다.

명령줄 도구로




$ pip install pre-commit-config-shellcheck
$ pre_commit_config_shellcheck.py .pre-commit-config.yaml


사전 커밋 후크로




# .pre-commit-config.yaml
- repo: "https://github.com/Anadea/pre-commit-config-shellcheck"
  rev: "0.3.4"
  hooks:
    - id: "pre-commit-config-shellcheck"


또한 GitHub 작업으로




- name: "pre-commit-config-shellcheck"
  uses: "action/[email protected]"
  id: "pre-commit-config-shellcheck"
  with:
    config: ".pre-commit-config.yaml"


결론



라이선스에 따라 타사 사용을 위해 Pre-commit-config-shellcheck가 성공적으로 생성, 테스트 및 배포되었습니다. 이 도구, 추가 정보 및 라이센스는 GitHub에서 찾을 수 있습니다.

좋은 웹페이지 즐겨찾기