Compare commits

...

1 Commits

Author SHA1 Message Date
Dylan Thacker-Smith
730c99ae3e refactor: Reduce maximum block nesting in Liquid::BlockBody#parse 2017-10-17 18:14:45 -04:00
2 changed files with 28 additions and 33 deletions

View File

@@ -7,8 +7,6 @@ AllCops:
Metrics/BlockNesting: Metrics/BlockNesting:
Max: 3 Max: 3
Exclude:
- 'lib/liquid/block_body.rb'
Metrics/ModuleLength: Metrics/ModuleLength:
Enabled: false Enabled: false

View File

@@ -15,26 +15,24 @@ module Liquid
def parse(tokenizer, parse_context) def parse(tokenizer, parse_context)
parse_context.line_number = tokenizer.line_number parse_context.line_number = tokenizer.line_number
while token = tokenizer.shift while token = tokenizer.shift
unless token.empty? next if token.empty?
case case
when token.start_with?(TAGSTART) when token.start_with?(TAGSTART)
whitespace_handler(token, parse_context) whitespace_handler(token, parse_context)
if token =~ FullToken unless token =~ FullToken
raise_missing_tag_terminator(token, parse_context)
end
tag_name = $1 tag_name = $1
markup = $2 markup = $2
# fetch the tag from registered blocks # fetch the tag from registered blocks
if tag = registered_tags[tag_name] unless tag = registered_tags[tag_name]
new_tag = tag.parse(tag_name, markup, tokenizer, parse_context)
@blank &&= new_tag.blank?
@nodelist << new_tag
else
# end parsing if we reach an unknown tag and let the caller decide # end parsing if we reach an unknown tag and let the caller decide
# determine how to proceed # determine how to proceed
return yield tag_name, markup return yield tag_name, markup
end end
else new_tag = tag.parse(tag_name, markup, tokenizer, parse_context)
raise_missing_tag_terminator(token, parse_context) @blank &&= new_tag.blank?
end @nodelist << new_tag
when token.start_with?(VARSTART) when token.start_with?(VARSTART)
whitespace_handler(token, parse_context) whitespace_handler(token, parse_context)
@nodelist << create_variable(token, parse_context) @nodelist << create_variable(token, parse_context)
@@ -47,7 +45,6 @@ module Liquid
@nodelist << token @nodelist << token
@blank &&= !!(token =~ /\A\s*\z/) @blank &&= !!(token =~ /\A\s*\z/)
end end
end
parse_context.line_number = tokenizer.line_number parse_context.line_number = tokenizer.line_number
end end