Class: Fast::SourceRewriter
- Inherits:
-
Object
- Object
- Fast::SourceRewriter
- Defined in:
- lib/fast/source_rewriter.rb
Defined Under Namespace
Classes: Edit
Constant Summary collapse
- ClobberingError =
Class.new(StandardError)
Instance Attribute Summary collapse
-
#source_buffer ⇒ Object
readonly
Returns the value of attribute source_buffer.
Instance Method Summary collapse
-
#initialize(source_buffer) ⇒ SourceRewriter
constructor
A new instance of SourceRewriter.
- #insert_after(range, content) ⇒ Object
- #insert_before(range, content) ⇒ Object
- #process ⇒ Object
- #remove(range) ⇒ Object
- #replace(range, content) ⇒ Object
- #wrap(range, before, after) ⇒ Object
Constructor Details
#initialize(source_buffer) ⇒ SourceRewriter
Returns a new instance of SourceRewriter.
12 13 14 15 16 |
# File 'lib/fast/source_rewriter.rb', line 12 def initialize(source_buffer) @source_buffer = source_buffer @edits = [] @order = 0 end |
Instance Attribute Details
#source_buffer ⇒ Object (readonly)
Returns the value of attribute source_buffer.
10 11 12 |
# File 'lib/fast/source_rewriter.rb', line 10 def source_buffer @source_buffer end |
Instance Method Details
#insert_after(range, content) ⇒ Object
38 39 40 41 |
# File 'lib/fast/source_rewriter.rb', line 38 def insert_after(range, content) add_edit(:insert_after, range.end, content.to_s) self end |
#insert_before(range, content) ⇒ Object
33 34 35 36 |
# File 'lib/fast/source_rewriter.rb', line 33 def insert_before(range, content) add_edit(:insert_before, range.begin, content.to_s) self end |
#process ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/fast/source_rewriter.rb', line 43 def process source = source_buffer.source.to_s normalized_replacements = normalize_replacements return source if normalized_replacements.empty? && insertions.empty? before_insertions = build_insertions(:insert_before) after_insertions = build_insertions(:insert_after) result = +'' cursor = 0 normalized_replacements.each do |replacement| result << emit_unreplaced_segment(source, cursor, replacement.begin_pos, before_insertions, after_insertions) result << before_insertions.fetch(replacement.begin_pos, '') result << replacement.content result << after_insertions.fetch(replacement.end_pos, '') cursor = replacement.end_pos end result << emit_unreplaced_segment(source, cursor, source.length, before_insertions, after_insertions) result end |
#remove(range) ⇒ Object
23 24 25 |
# File 'lib/fast/source_rewriter.rb', line 23 def remove(range) replace(range, '') end |
#replace(range, content) ⇒ Object
18 19 20 21 |
# File 'lib/fast/source_rewriter.rb', line 18 def replace(range, content) add_edit(:replace, range, content.to_s) self end |
#wrap(range, before, after) ⇒ Object
27 28 29 30 31 |
# File 'lib/fast/source_rewriter.rb', line 27 def wrap(range, before, after) insert_before(range, before) unless before.nil? insert_after(range, after) unless after.nil? self end |