88 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			88 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Rubocop
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								[Rubocop](https://github.com/bbatsov/rubocop) is a static analyis tool for
							 | 
						||
| 
								 | 
							
								[Ruby](https://www.ruby-lang.org/en/). What does this mean? It means Rubocop
							 | 
						||
| 
								 | 
							
								will to 'read' your code (as opposed to running it, hence the 'static' part
							 | 
						||
| 
								 | 
							
								of the name), and analyse it. The analysis rules Rubocop uses are from the
							 | 
						||
| 
								 | 
							
								[Ruby community style guide](https://github.com/bbatsov/ruby-style-guide).
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								The style guide is a set of specific suggestions about how to write code which
							 | 
						||
| 
								 | 
							
								is more readable, more expressive, and more conventional. As a community, it
							 | 
						||
| 
								 | 
							
								would be terrific if we could read anyone else's code easily, and they could
							 | 
						||
| 
								 | 
							
								read ours easily. This is what Rubocop helps us to do. This sort of tool is
							 | 
						||
| 
								 | 
							
								always valuable, but it's particularly useful when you're learning Ruby, and
							 | 
						||
| 
								 | 
							
								you may code which is _correct_, but which doesn't stick to Ruby conventions,
							 | 
						||
| 
								 | 
							
								or doesn't take advantage of some of Ruby's more powerful features.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Most usefully, Rubocop can automatically fix many of the minor warnings - like
							 | 
						||
| 
								 | 
							
								incorrect spacing. This is very helpful before code review as it means your
							 | 
						||
| 
								 | 
							
								fellow developers can focus on higher level concerns, and not have to waste
							 | 
						||
| 
								 | 
							
								time on syntax issues.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Using Rubocop
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Installation
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Rubocop is delivered as a Gem, so on a typical project which uses Bundler you
							 | 
						||
| 
								 | 
							
								would add it to the development section of your `Gemfile`:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								group :development do
							 | 
						||
| 
								 | 
							
								  gem rubocop
							 | 
						||
| 
								 | 
							
								end
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This means anyone using your project will have the same version of Rubocop, and
							 | 
						||
| 
								 | 
							
								everyone will agree on what the current best practice is.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Before every commit, I like to check that my newly modified code complies with
							 | 
						||
| 
								 | 
							
								the commmunity standard, simply by running:
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								rubocop
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								This will output a list of warnings about your code.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								It can be helpful to ask Rubocop for more help:
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								rubocop --extra-details --display-cop-names
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								(You might add these to a `.rubocop` file to make them default.)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Many editors will allow you to integrate Rubocop, which can give immediate
							 | 
						||
| 
								 | 
							
								feedback when you're writing code.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Fixing issues
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Let's say I've written some new code; before I commit it, I might decide to
							 | 
						||
| 
								 | 
							
								check it sticks to the guidelines:
							 | 
						||
| 
								 | 
							
								```shell
							 | 
						||
| 
								 | 
							
								rubocop <my new file>
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								I can edit make the suggested changes manually, or I can ask Rubocop to fix
							 | 
						||
| 
								 | 
							
								minor issues automatically:
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								rubocop --auto-correct
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Running only certain Cops
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Each community guideline is implemented in a Rubocop 'cop'. When working on a
							 | 
						||
| 
								 | 
							
								legacy codebase you might be swamped with warnings when introducing Rubocop.
							 | 
						||
| 
								 | 
							
								In this case it can often be useful to run only a single cop across the
							 | 
						||
| 
								 | 
							
								codebase, and check those changes in before moving on to the next guideline, for
							 | 
						||
| 
								 | 
							
								example:
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								rubocop --auto-correct --only 'Layout/EmptyLineAfterMagicComment'
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Text Editor Integration
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Rubocop can be integrated with Vim, Visual Studio Code, Atom, and other text editors. A full list can be found [here](https://rubocop.readthedocs.io/en/latest/integration_with_other_tools/).
							 | 
						||
| 
								 | 
							
								
							 |