7/18/2018

Rubocop auto correct를 이용한 루비 코드 정리하기(리팩토링)

최근에 루비 프로그래밍 스타일 가이드 관련해서 글을 하나 작성했었는데요, 이어서 그떄 잠깐 소개드렸던 rubocop을 이용해서 코드를 교정하는 과정에 대해 잠깐 이야기할까 합니다.
(https://www.hahwul.com/2018/07/awesome-awesome-ruby-programming-style.html)

auto correct in rubocop 

지난번에 rubocop 사용 관련해서 지금 틈내서 개발중인 recon-raven 쪽 코드로 돌려봤는데요.. 어마어마한 양이 나왔습니다.

5 files inspected, 370 offenses detected



무려 370개나 문제가 있다고 하네요..

그래서 쉽게 고칠 수 있는 방법이 뭐 없을까 하다가 옵션을 보니깐 auto-correct 기능이 있었습니다.

#> rubocop -h | grep auto-correct
    -a, --auto-correct               Auto-correct offenses.
    -x, --fix-layout                 Run only layout cops, with auto-correct on.


오 어느정도 자동 수정이 가능하겠단 이야기군요, 물론 관련해서 rubocop쪽 github에 safe 버전으로도 만들어서 사용하자란 이야기도 있었습니다. 그만큼 코드 동작에 문제가 발생할 수 있는 부분이니 신중하게 잘 확인하셔야 할 것 같습니다.
아무튼 -a , --auto-correct 옵션으로 발견 사항 일부에 대해 자동 교정이 가능합니다. 그럼 바로 적용해봅시다.

#> rubocop -a
[....]
5 files inspected, 522 offenses detected, 473 offenses corrected

희안하게 탐지량이 늘긴했지만, 무려 473개나 수정해주었네요. 내용을 살펴보면 대충 연산자 사이 공백 추가, 주석 뒤 공백 추가 같은 부분들이라 코드 동작에는 지장 없을 것 같습니다.


이제 다시 rubocop으로 리체킹해보면..

#> rubocop

 $$$$$$c    $$\"\"\"\"  $$$        $$$,     $$$$$$ \"Y$c$$ cccc $$$$$$c     c$$$cc$$$cY$c.$$\"     $$\"\"\"\"   $$$ \"Y$c$$
                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/func_print.rb:22:81: C: Metrics/LineLength: Line is too long. [114/80]
 888b \"88bo,888oo,__`88bo,__,o,\"888,_ _,88P888    Y88      888b \"88bo, 888   888,Y88P       888oo,__ 888    Y88
                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
src/func_print.rb:23:81: C: Metrics/LineLength: Line is too long. [130/80]
 MMMM   \"W\" \"\"\"\"YUMMM \"YUMMMMMP\" \"YMMMMMP\" MMM     YM      MMMM   \"W\"  YMM   \"\"`  MP        \"\"\"\"YUMMMMMM     YM"
                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

5 files inspected, 49 offenses detected


49개 남았네요, 남은것들 중 가능한 부분은 수정합시다!


Conclusion

그와중에 else if , elseif 이건 좀 의외네.. 보통 else if 를 많이 사용한다고 생각했는데.
if

else if

end
end

rubocop 기준으론 아래가 좋은 코드라고 하네요.

if

elseif

end
end



HAHWUL

@hahwul
Share: | Coffee Me: