Class: Fast::Rewriter
- Inherits:
-
Parser::TreeRewriter
- Object
- Parser::TreeRewriter
- Fast::Rewriter
- Defined in:
- lib/fast.rb
Overview
Note:
the standalone class needs to combines #affect_types to properly generate the ‘on_<node-type>` methods depending on the expression being used.
Rewriter encapsulates #match_index to allow ExperimentFile#partial_replace in a ExperimentFile.
Instance Attribute Summary collapse
-
#buffer ⇒ Object
Returns the value of attribute buffer.
-
#match_index ⇒ Integer
readonly
With occurrence index.
-
#replacement ⇒ Object
Returns the value of attribute replacement.
-
#search ⇒ Object
Returns the value of attribute search.
Instance Method Summary collapse
-
#affect_types(*types) ⇒ Object
Generate methods for all affected types.
-
#initialize(*args) ⇒ Rewriter
constructor
A new instance of Rewriter.
- #match?(node) ⇒ Boolean
Constructor Details
#initialize(*args) ⇒ Rewriter
Returns a new instance of Rewriter.
286 287 288 289 |
# File 'lib/fast.rb', line 286 def initialize(*args) super @match_index = 0 end |
Instance Attribute Details
#buffer ⇒ Object
Returns the value of attribute buffer.
285 286 287 |
# File 'lib/fast.rb', line 285 def buffer @buffer end |
#match_index ⇒ Integer (readonly)
Returns with occurrence index.
284 285 286 |
# File 'lib/fast.rb', line 284 def match_index @match_index end |
#replacement ⇒ Object
Returns the value of attribute replacement.
285 286 287 |
# File 'lib/fast.rb', line 285 def replacement @replacement end |
#search ⇒ Object
Returns the value of attribute search.
285 286 287 |
# File 'lib/fast.rb', line 285 def search @search end |
Instance Method Details
#affect_types(*types) ⇒ Object
Generate methods for all affected types.
297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 |
# File 'lib/fast.rb', line 297 def affect_types(*types) # rubocop:disable Metrics/MethodLength types.map do |type| self.class.send :define_method, "on_#{type}" do |node| if captures = match?(node) # rubocop:disable Lint/AssignmentInCondition @match_index += 1 if replacement.parameters.length == 1 instance_exec node, &replacement else instance_exec node, captures, &replacement end end super(node) end end end |
#match?(node) ⇒ Boolean
291 292 293 |
# File 'lib/fast.rb', line 291 def match?(node) Fast.match?(node, search) end |