Skip to content

Commit 2960f64

Browse files
committed
Simplify switch statement in parse_statements.
`:on_nl`, `:on_ignored_nl`, `:on_comment`, `:on_embdoc` are handled by a single `when` branch. In this branch there are multiple `if` branches handling `:on_nl` and `:on_ignored_nl` separately from `:on_comment` and `:on_embdoc`. By having separate `when` branches for `:on_nl`/`:on_ignored_nl` and `:on_comment`/`:on_embdoc` we can remove the `if` statements.
1 parent 265d572 commit 2960f64

File tree

1 file changed

+46
-49
lines changed

1 file changed

+46
-49
lines changed

lib/rdoc/parser/ruby.rb

Lines changed: 46 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1795,67 +1795,64 @@ def parse_statements(container, single = NORMAL, current_method = nil,
17951795
non_comment_seen = true unless (:on_comment == tk[:kind] or :on_embdoc == tk[:kind])
17961796

17971797
case tk[:kind]
1798-
when :on_nl, :on_ignored_nl, :on_comment, :on_embdoc then
1799-
if :on_nl == tk[:kind] or :on_ignored_nl == tk[:kind]
1800-
skip_tkspace
1801-
tk = get_tk
1802-
else
1803-
past_tokens = @read.size > 1 ? @read[0..-2] : []
1804-
nl_position = 0
1805-
past_tokens.reverse.each_with_index do |read_tk, i|
1806-
if read_tk =~ /^\n$/ then
1807-
nl_position = (past_tokens.size - 1) - i
1808-
break
1809-
elsif read_tk =~ /^#.*\n$/ then
1810-
nl_position = ((past_tokens.size - 1) - i) + 1
1811-
break
1812-
end
1813-
end
1814-
comment_only_line = past_tokens[nl_position..-1].all?{ |c| c =~ /^\s+$/ }
1815-
unless comment_only_line then
1816-
tk = get_tk
1798+
when :on_nl, :on_ignored_nl then
1799+
skip_tkspace
1800+
1801+
keep_comment = true
1802+
container.current_line_visibility = nil
1803+
1804+
when :on_comment, :on_embdoc then
1805+
past_tokens = @read.size > 1 ? @read[0..-2] : []
1806+
nl_position = 0
1807+
past_tokens.reverse.each_with_index do |read_tk, i|
1808+
if read_tk =~ /^\n$/ then
1809+
nl_position = (past_tokens.size - 1) - i
1810+
break
1811+
elsif read_tk =~ /^#.*\n$/ then
1812+
nl_position = ((past_tokens.size - 1) - i) + 1
1813+
break
18171814
end
18181815
end
1816+
comment_only_line = past_tokens[nl_position..-1].all?{ |c| c =~ /^\s+$/ }
1817+
unless comment_only_line then
1818+
tk = get_tk
1819+
end
18191820

1820-
if tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) then
1821-
if non_comment_seen then
1822-
# Look for RDoc in a comment about to be thrown away
1823-
non_comment_seen = parse_comment container, tk, comment unless
1824-
comment.empty?
1821+
if non_comment_seen then
1822+
# Look for RDoc in a comment about to be thrown away
1823+
non_comment_seen = parse_comment container, tk, comment unless
1824+
comment.empty?
18251825

1826-
comment = ''
1827-
comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
1828-
end
1826+
comment = ''
1827+
comment = RDoc::Encoding.change_encoding comment, @encoding if @encoding
1828+
end
1829+
1830+
line_no = nil
1831+
while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do
1832+
comment_body = retrieve_comment_body(tk)
1833+
line_no = tk[:line_no] if comment.empty?
1834+
comment += comment_body
1835+
comment << "\n" unless comment_body =~ /\n\z/
18291836

1830-
line_no = nil
1831-
while tk and (:on_comment == tk[:kind] or :on_embdoc == tk[:kind]) do
1832-
comment_body = retrieve_comment_body(tk)
1833-
line_no = tk[:line_no] if comment.empty?
1834-
comment += comment_body
1835-
comment << "\n" unless comment_body =~ /\n\z/
1836-
1837-
if comment_body.size > 1 && comment_body =~ /\n\z/ then
1838-
skip_tkspace_without_nl # leading spaces
1839-
end
1840-
tk = get_tk
1837+
if comment_body.size > 1 && comment_body =~ /\n\z/ then
1838+
skip_tkspace_without_nl # leading spaces
18411839
end
1840+
tk = get_tk
1841+
end
18421842

1843-
comment = new_comment comment, line_no
1843+
comment = new_comment comment, line_no
18441844

1845-
unless comment.empty? then
1846-
look_for_directives_in container, comment
1845+
unless comment.empty? then
1846+
look_for_directives_in container, comment
18471847

1848-
if container.done_documenting then
1849-
throw :eof if RDoc::TopLevel === container
1850-
container.ongoing_visibility = save_visibility
1851-
end
1848+
if container.done_documenting then
1849+
throw :eof if RDoc::TopLevel === container
1850+
container.ongoing_visibility = save_visibility
18521851
end
1853-
1854-
keep_comment = true
1855-
else
1856-
non_comment_seen = true
18571852
end
18581853

1854+
keep_comment = true
1855+
18591856
unget_tk tk
18601857
keep_comment = true
18611858
container.current_line_visibility = nil

0 commit comments

Comments
 (0)