@@ -37,10 +37,20 @@ def initialize(code_lines:, block:)
3737 @after_array = [ ]
3838 @before_array = [ ]
3939 @stop_after_kw = false
40+
41+ @skip_hidden = false
42+ @skip_empty = false
4043 end
4144
4245 def skip ( name )
43- @skip_array << name
46+ case name
47+ when :hidden?
48+ @skip_hidden = true
49+ when :empty?
50+ @skip_empty = true
51+ else
52+ raise "Unsupported skip #{ name } "
53+ end
4454 self
4555 end
4656
@@ -49,39 +59,49 @@ def stop_after_kw
4959 self
5060 end
5161
52- def scan_while ( & block )
62+ def scan_while
5363 stop_next = false
5464
5565 kw_count = 0
5666 end_count = 0
57- @before_index = before_lines . reverse_each . take_while do |line |
67+ index = before_lines . reverse_each . take_while do |line |
5868 next false if stop_next
59- next true if @skip_array . detect { |meth | line . send ( meth ) }
69+ next true if @skip_hidden && line . hidden?
70+ next true if @skip_empty && line . empty?
6071
6172 kw_count += 1 if line . is_kw?
6273 end_count += 1 if line . is_end?
6374 if @stop_after_kw && kw_count > end_count
6475 stop_next = true
6576 end
6677
67- block . call ( line )
78+ yield line
6879 end . last &.index
6980
81+ if index && index < before_index
82+ @before_index = index
83+ end
84+
7085 stop_next = false
7186 kw_count = 0
7287 end_count = 0
73- @after_index = after_lines . take_while do |line |
88+ index = after_lines . take_while do |line |
7489 next false if stop_next
75- next true if @skip_array . detect { |meth | line . send ( meth ) }
90+ next true if @skip_hidden && line . hidden?
91+ next true if @skip_empty && line . empty?
7692
7793 kw_count += 1 if line . is_kw?
7894 end_count += 1 if line . is_end?
7995 if @stop_after_kw && end_count > kw_count
8096 stop_next = true
8197 end
8298
83- block . call ( line )
99+ yield line
84100 end . last &.index
101+
102+ if index && index > after_index
103+ @after_index = index
104+ end
85105 self
86106 end
87107
@@ -178,7 +198,11 @@ def start_at_next_line
178198 end
179199
180200 def code_block
181- CodeBlock . new ( lines : @code_lines [ before_index ..after_index ] )
201+ CodeBlock . new ( lines : lines )
202+ end
203+
204+ def lines
205+ @code_lines [ before_index ..after_index ]
182206 end
183207
184208 def before_index
@@ -190,7 +214,7 @@ def after_index
190214 end
191215
192216 private def before_lines
193- @code_lines [ 0 ...@orig_before_index ] || [ ]
217+ @code_lines [ 0 ...before_index ] || [ ]
194218 end
195219
196220 private def after_lines
0 commit comments