RuboCop ToDo 수정 자동화
4744 단어 refactoringrubyrubocop
ToDo 목록 기반 보푸라기
요즘 많은 프로젝트에서 Lint 도구를 사용하여 코드를 자가 진단하고 있습니다.
예를 들어
RuboCop에는 기존 범죄를 감지하고
.rubocop_todo.yml
라는 파일을 자동으로 생성하는 기능이 있습니다. 이 파일은 할 일 목록 역할을 하므로 위반 사항을 점진적으로 수정할 수 있습니다.이 메커니즘은 기존 프로젝트 중간에 새로운 Lint 도구를 도입하거나 기존 Lint 도구를 업그레이드하여 새로운 규칙을 도입할 때 매우 강력합니다.
자동화
개선 프로세스 주기는 다음과 같습니다.
그러나 이 작업을 수동으로 수행하기는 어렵습니다. 이제 rubocop-todo-corrector 사용자 지정 GitHub 작업을 사용하여 자동화해 보겠습니다.
rubocop-todo-수정자
사용하기 쉽습니다. 다음 YAML 파일을 리포지토리에 배치하기만 하면 됩니다.
# .github/workflows/rubocop-todo-corrector.yml
name: rubocop-todo-corrector
on:
pull_request:
types:
- closed
workflow_dispatch:
inputs:
cop_name:
description: Pass cop name if you want to pick a specific cop.
required: false
type: string
ignore:
description: Check this with cop_name if you want to ignore a specific cop.
required: false
type: boolean
jobs:
run:
runs-on: ubuntu-latest
steps:
- uses: r7kamura/rubocop-todo-corrector@v0
with:
ignore: ${{ inputs.ignore }}
label: rubocop-todo-corrector
그런 다음 리포지토리에 "rubocop-todo-corrector"레이블을 만듭니다.
이제 작업 페이지에서 "워크플로 실행"버튼으로 이 워크플로를 실행할 수 있습니다.
워크플로가 완료되면 풀 요청이 다음과 같이 생성됩니다.
이 풀 리퀘스트를 검토하고 괜찮다면 Merge 버튼을 누르십시오.
그러면 다음 풀 요청이 자동으로 생성됩니다. 즉, 병합 버튼을 누르기만 하면 코드가 자동으로 점점 더 많이 리팩토링됩니다. 정말 쉬운 일입니다!
우리의 이야기
약 10년 동안 운영되고 있는 우리의 거대한 Rails 앱에서 프로세스 중간에 RuboCop을 도입했고 처음에는 200,000개의 오펜스가 있었습니다.
(이 차트를 만드는 방법도 에서 설명했습니다.)
오펜스가 너무 많아서 수정을 거의 포기했지만 최근에 rubocop-todo-corrector를 도입하면서 오펜스가 서서히 줄어들기 시작했습니다.
약 2개월 전에 도입된 이후 약 40,000개 이상의 위반 사항을 수정할 수 있었습니다. 개발자들은 점진적으로 가속화되고 있는 검토 및 병합 프로세스에 익숙해지고 있으며 앞으로 1년 정도 지나면 공격을 거의 제로로 줄일 수 있을 것 같습니다.
마무리
이 기사에서는 rubocop-todo-corrector이라는 사용자 지정 GitHub 작업의 배경과 사용법을 소개했습니다.
자동 검토자 할당, 비활성화 및 위반 수정 등 이 문서에서 다루지 않은 다른 기능이 있으므로 관심이 있는 경우 README를 읽어 보십시오.
리팩토링 프로세스 자동화는 강력한 메커니즘입니다. 점점 더 자동화하고 좋은 코드 품질을 유지합시다.
Reference
이 문제에 관하여(RuboCop ToDo 수정 자동화), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/r7kamura/automate-refactoring-by-rubocop-todo-corrector-2mli텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)