Skip to content

Commit

Permalink
Make node_for_line return the last possible node when nothing matches…
Browse files Browse the repository at this point in the history
… exactly (#456)
  • Loading branch information
MaxLap authored Dec 13, 2023
1 parent 2befd56 commit b43635f
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 3 deletions.
22 changes: 19 additions & 3 deletions lib/haml_lint/tree/root_node.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,26 @@ def file
#
# @param line [Integer] the line number of the node
# @return [HamlLint::Node]
def node_for_line(line)
find(-> { HamlLint::Tree::NullNode.new }) do |node|
node.line_numbers.cover?(line) && node != self
def node_for_line(line) # rubocop:disable Metrics
each do |node|
return node if node.line_numbers.cover?(line) && node != self
end

# Because HAML doesn't leave any trace in the nodes when it merges lines that
# end with a comma, it's harder to assign a node to the second line here:
# = some_call user,
# foo, bar
# So if the simple strategy (above) doesn't work, we try to see if we check if the last node
# that was before the requested line was one that could have been merged. If so, we use that one.
best_guess = nil
each do |node|
best_guess = node if node != self && node.line_numbers.end < line
end

# There are the cases were the merging without traces can happen
return best_guess if best_guess && %i[script silent_script tag].include?(best_guess.type)

HamlLint::Tree::NullNode.new
end
end
end
13 changes: 13 additions & 0 deletions spec/haml_lint/linter/line_length_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,17 @@

it { should_not report_lint }
end

context 'when there is a directive before a long line that is a continued line' do
let(:haml) do
<<-HAML
-# haml-lint:disable LineLength
= link_to user,
class: some_unfortunately_very_extremely_definitely_over_90_characters_helper_method_with_even_more_characters
-# haml-lint:enable LineLength
HAML
end

it { should_not report_lint }
end
end

0 comments on commit b43635f

Please sign in to comment.