class RuboCop::Cop::RSpec::ExampleWording
Checks for common mistakes in example descriptions.
This cop will correct docstrings that begin with 'should' and 'it'.
The autocorrect is experimental - use with care! It can be configured with CustomTransform (e.g. have => has) and IgnoredWords (e.g. only).
@example
# bad it 'should find nothing' do end # good it 'finds nothing' do end
@example
# bad it 'it does things' do end # good it 'does things' do end
Constants
- IT_PREFIX
- MSG_IT
- MSG_SHOULD
- SHOULD_PREFIX
Public Instance Methods
autocorrect(range)
click to toggle source
# File lib/rubocop/cop/rspec/example_wording.rb, line 54 def autocorrect(range) ->(corrector) { corrector.replace(range, replacement_text(range)) } end
on_block(node)
click to toggle source
# File lib/rubocop/cop/rspec/example_wording.rb, line 44 def on_block(node) it_description(node) do |description_node, message| if message =~ SHOULD_PREFIX add_wording_offense(description_node, MSG_SHOULD) elsif message =~ IT_PREFIX add_wording_offense(description_node, MSG_IT) end end end
Private Instance Methods
add_wording_offense(node, message)
click to toggle source
# File lib/rubocop/cop/rspec/example_wording.rb, line 60 def add_wording_offense(node, message) expr = node.loc.expression docstring = Parser::Source::Range.new( expr.source_buffer, expr.begin_pos + 1, expr.end_pos - 1 ) add_offense(docstring, location: docstring, message: message) end
custom_transform()
click to toggle source
# File lib/rubocop/cop/rspec/example_wording.rb, line 87 def custom_transform cop_config.fetch('CustomTransform', {}) end
ignored_words()
click to toggle source
# File lib/rubocop/cop/rspec/example_wording.rb, line 91 def ignored_words cop_config.fetch('IgnoredWords', []) end
replacement_text(range)
click to toggle source
# File lib/rubocop/cop/rspec/example_wording.rb, line 73 def replacement_text(range) text = range.source if text =~ SHOULD_PREFIX RuboCop::RSpec::Wording.new( text, ignore: ignored_words, replace: custom_transform ).rewrite else text.sub(IT_PREFIX, '') end end