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
  • Loading branch information
MaxLap committed Nov 29, 2023
1 parent 5a232f4 commit b66937e
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
20 changes: 18 additions & 2 deletions lib/haml_lint/tree/root_node.rb
Original file line number Diff line number Diff line change
Expand Up @@ -17,9 +17,25 @@ 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
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 && [: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 b66937e

Please sign in to comment.