Skip to content

Commit 07a0678

Browse files
committed
Use an efficient way to calc length of regexp matched string
1 parent 92d8fc6 commit 07a0678

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

lib/rdoc/comment.rb

+10-9
Original file line numberDiff line numberDiff line change
@@ -362,25 +362,26 @@ def parse(text, filename, line_no, type, &include_callback)
362362

363363
private def normalize_comment_lines(lines)
364364
blank_line_regexp = /\A\s*\z/
365+
lines = lines.dup
366+
lines.shift while lines.first&.match?(blank_line_regexp)
367+
lines.pop while lines.last&.match?(blank_line_regexp)
368+
365369
min_spaces = lines.map do |l|
366-
l[/\A */].size unless l.match?(blank_line_regexp)
370+
l.match(/\A *(?=\S)/)&.end(0)
367371
end.compact.min
368372
if min_spaces && min_spaces > 0
369-
lines = lines.map { |l| l[min_spaces..] || '' }
373+
lines.map { |l| l[min_spaces..] || '' }
370374
else
371-
lines = lines.dup
375+
lines
372376
end
373-
lines.shift while lines.first&.match?(blank_line_regexp)
374-
lines.pop while lines.last&.match?(blank_line_regexp)
375-
lines
376377
end
377378

378379
# Take value lines of multiline directive
379380

380381
private def take_multiline_directive_value_lines(directive, filename, line_no, lines, base_indent_size, indent_regexp, has_param)
381382
return [] if lines.empty?
382383

383-
first_indent_size = lines.first[indent_regexp].size
384+
first_indent_size = lines.first.match(indent_regexp).end(0)
384385

385386
# Blank line or unindented line is not part of multiline-directive value
386387
return [] if first_indent_size <= base_indent_size
@@ -391,9 +392,9 @@ def parse(text, filename, line_no, type, &include_callback)
391392
# line3
392393
#
393394
value_lines = lines.take_while do |l|
394-
l.rstrip[indent_regexp].size > base_indent_size
395+
l.rstrip.match(indent_regexp).end(0) > base_indent_size
395396
end
396-
min_indent = value_lines.map { |l| l[indent_regexp].size }.min
397+
min_indent = value_lines.map { |l| l.match(indent_regexp).end(0) }.min
397398
value_lines.map { |l| l[min_indent..] }
398399
else
399400
# Take indented lines accepting blank lines between them

0 commit comments

Comments
 (0)