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'
endNó 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'
endChạy lệnh
$ gem install rubocophoặc thêm vào Gemfile
gem 'rubocop', require: falseSau đó chạy lệnh
$ bundle installNó 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
$ rubocopKiể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/controllersKiể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
endSau đó chạy lệnh
$ bundle installThê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! 