def indentation_delta(tokens)
seen_for_at = []
last_token, last_kind = [nil, nil]
remove_before, add_after = [0, 0]
tokens.each do |token, kind|
is_singleline_if = (SINGLELINE_TOKENS.include?(token)) && end_of_statement?(last_token, last_kind)
is_optional_do = (token == "do" && seen_for_at.include?(add_after - 1))
last_token, last_kind = token, kind unless kind == :space
next if IGNORE_TOKENS.include?(kind)
track_module_nesting(token, kind)
seen_for_at << add_after if OPTIONAL_DO_TOKENS.include?(token)
if kind == :delimiter
track_delimiter(token)
elsif OPEN_TOKENS.keys.include?(token) && !is_optional_do && !is_singleline_if
@stack << token
add_after += 1
elsif token == OPEN_TOKENS[@stack.last]
popped = @stack.pop
track_module_nesting_end(popped)
if add_after == 0
remove_before += 1
else
add_after -= 1
end
elsif MIDWAY_TOKENS.include?(token)
if add_after == 0
remove_before += 1
add_after += 1
end
end
end
return [remove_before, add_after]
end