Module: RuboCop::RSpec::Corrector::SigAwareMoveNode
- Extended by:
- AST::NodePattern::Macros
- Defined in:
- lib/rubocop/gusto/move_node_patch.rb
Overview
Patches MoveNode to treat Sorbet sig { ... } blocks as part of the
let/subject/hook they precede.
Sorbet's RSpec mode attaches type signatures to memoized helpers via a
sig block immediately above the declaration:
sig { returns(Something) }
let(:thing) { create(:something) }
Several rubocop-rspec cops use MoveNode to relocate let/subject/
hook nodes (ScatteredLet, LeadingSubject, LetBeforeExamples,
HooksBeforeExamples). Without this patch, the move strands the sig
at the original location. This patch:
- Extends the source range of the moved node to include a preceding
sigblock, sosigis carried with the move. - In
move_before, redirects the insertion point above a precedingsigon the destination, so the destination'ssigpairing stays intact.
Instance Method Summary collapse
Instance Method Details
#move_before(other) ⇒ Object
35 36 37 38 |
# File 'lib/rubocop/gusto/move_node_patch.rb', line 35 def move_before(other) sig = preceding_sig_block(other) super(sig || other) end |
#sig_block?(node) ⇒ Object
31 32 33 |
# File 'lib/rubocop/gusto/move_node_patch.rb', line 31 def_node_matcher :sig_block?, <<~PATTERN (block (send nil? :sig ...) _ _) PATTERN |