Blog #3
RuboCop là một trình phân tích mã tĩnh Ruby (a.k.a linter
) và trình định dạng mã. Ra khỏi hộp, nó sẽ thực thi nhiều nguyên tắc được nêu trong Hướng dẫn phong cách Ruby của cộng đồng. Ngoài việc báo cáo các sự cố được phát hiện trong mã của bạn, RuboCop cũng có thể tự động khắc phục nhiều sự cố cho bạn.
RuboCop cực kỳ linh hoạt và hầu hết các khía cạnh hoạt động của nó có thể được điều chỉnh thông qua các tùy chọn cấu hình khác nhau.
Đọc thêm về Rubocop ở đây.
Ví dụ mình có 1 func như sau
def enough_18_years_old?(number)
if number <= 0
return 'Please enter a positive number!'
end
number > 18 ? 'Yes' : 'No'
end
Nó sẽ chửi mình như sau
Sao m code ng.u thế hả cu???
Đại ý là nó muốn cụm if
thành 1 dòng thôi, sửa như sau:
def enough_18_years_old?(number)
return 'Please enter a positive number!' if number <= 0
number > 18 ? 'Yes' : 'No'
end
Chạy lệnh
$ gem install rubocop
hoặc thêm vào Gemfile
gem 'rubocop', require: false
Sau đó chạy lệnh
$ bundle install
Nó sẽ tự tạo file rubocop.yml
cho bạn.
Ở trong file này nó sẽ cấu hình những rule ví dụ như chiều dài tối đa của mỗi dòng, 1 function tối đa bao nhiều lines hoặc là những vấn đề khác. Các bạn có thể thêm hoặc bớt rule nếu muốn. Có thể tham khảo thêm tại đây.
Kiểm tra toàn bộ project của bạn
$ rubocop
Kiểm tra riêng 1 thư mục (Ở ví dụ này mình muốn kiểm tra cho toàn bộ files controller)
$ rubocop app/controllers
Kiểm tra file cụ thể
$ rubocop app/controllers/home_controller.rb
Mục đích chính của blog này là ở đoạn này. Vì đoạn trước có nhiều bài viết và hướng dẫn rubocop
cụ thể rồi, mình chỉ lướt qua sơ lược thôi.
Đây là kết quả sau khi nhờ Github
review code cho mình :)). Nó sẽ tự động comment vào từng line những comment cực kì chi tiết.
Như bạn thấy nó đang báo với mình là cần phải có khoảng cách sau {
Bad code
{locale: I18n.locale}
Good code
{ locale: I18n.locale }
Tuy không phải là lỗi gì nghiêm trọng, nhưng nó sẽ giúp bạn cải thiện rất nhiều về code quality và style code.
Cần phải cài đặt Gem Pronto
Thêm vào Gemfile
trong group development
group :development do
gem 'pronto', '~> 0.11.0'
gem 'pronto-flay', '~> 0.11.0', require: false
gem 'pronto-rubocop', '~> 0.11.1', require: false
end
Sau đó chạy lệnh
$ bundle install
Thêm vào project file pronto.yml
theo đường dẫn .github/workflows/pronto.yml
name: Rubocop Check
on: [pull_request]
jobs:
pronto:
permissions: write-all
name: 'Rubocop Check'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- run: |
git fetch
- name: Setup Ruby
uses: ruby/setup-ruby@v1
- name: Setup pronto
run: gem install pronto pronto-rubocop
- name: Run Pronto
run: pronto run -f github_status github_pr -c origin/${{ github.base_ref }}
env:
PRONTO_PULL_REQUEST_ID: ${{ github.event.pull_request.number }}
PRONTO_GITHUB_ACCESS_TOKEN: "${{ github.token }}"
Vậy là xong. Bây giờ việc các bạn làm là tạo 1 pull request bất kì và để Github Actions
check lỗi giúp các bạn thôi!