Skip to content

Commit 837dba1

Browse files
committed
Add helper for showing offense given a source range
1 parent 3480742 commit 837dba1

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

lib/erblint-github/linters/custom_helpers.rb

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,13 @@ def generate_offense(klass, processed_source, tag, message = nil, replacement =
6464
add_offense(processed_source.to_source_range(tag.loc), offense, replacement)
6565
end
6666

67+
def generate_offense_from_source_range(klass, source_range, message = nil, replacement = nil)
68+
message ||= klass::MESSAGE
69+
message += "\nLearn more at https://github.com/github/erblint-github#rules.\n"
70+
offense = ["#{simple_class_name}:#{message}", source_range.source].join("\n")
71+
add_offense(source_range, offense, replacement)
72+
end
73+
6774
def possible_attribute_values(tag, attr_name)
6875
value = tag.attributes[attr_name]&.value || nil
6976
basic_conditional_code_check(value || "") || [value].compact

lib/erblint-github/linters/github/accessibility/avoid_generic_link_text_counter.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,14 +28,17 @@ def run(processed_source)
2828
prev_node = processed_source.ast.children[index-1]
2929
next_node = processed_source.ast.children[index+1]
3030

31-
next unless tag?(prev_node) && tag?(next_node)
31+
next unless tag_type?(prev_node) && tag_type?(next_node)
3232

33+
text_node_tag = BetterHtml::Tree::Tag.from_node(node)
3334
prev_node_tag = BetterHtml::Tree::Tag.from_node(prev_node)
3435
next_node_tag = BetterHtml::Tree::Tag.from_node(next_node)
3536

3637
# We only report if the text is nested between two link tags.
3738
if link_tag?(prev_node_tag) && link_tag?(next_node_tag) && next_node_tag.closing?
38-
generate_offense(self.class, processed_source, prev_node_tag)
39+
range = prev_node_tag.loc.begin_pos...text_node_tag.loc.end_pos
40+
source_range = processed_source.to_source_range(range)
41+
generate_offense_from_source_range(self.class, source_range)
3942
end
4043
end
4144

@@ -90,7 +93,7 @@ def link_tag?(tag_node)
9093
tag_node.name == "a"
9194
end
9295

93-
def tag?(node)
96+
def tag_type?(node)
9497
node.methods.include?(:type) && node.type == :tag
9598
end
9699
end

0 commit comments

Comments
 (0)