erblint-github 0.0.4 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +5 -2
- data/lib/erblint-github/linters/custom_helpers.rb +33 -0
- data/lib/erblint-github/linters/github/accessibility/{no_aria_label_misuse.rb → no_aria_label_misuse_counter.rb} +16 -2
- data/lib/erblint-github/linters/github/accessibility/no_title_attribute_counter.rb +44 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 48eba970607504df53f6b0f2ce5cff3b07051148eb1f4dca2fd78fa8287671a9
|
4
|
+
data.tar.gz: 820da77f5a3ad624c32f4de22817e1c3d80ed755ddbe717368ef97e17e87e262
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 34b69cd67df4ea14698098a1331bd787cc9c653cb616f8020c0767478427a41144d177706397eaedc7f7f3767b60758231a000ab45d3fef2dcd8ee07249b49ad
|
7
|
+
data.tar.gz: d34ed13a0a85b146f4b2eff4e6fcbe00bbe7aef41d7168c6dadb2cc78a3fd49b42cc5dc92e6669cffb7b9bb81cf982495862fb46acb166a49dd63c9813d31d60
|
data/README.md
CHANGED
@@ -29,12 +29,14 @@ linters:
|
|
29
29
|
enabled: true
|
30
30
|
GitHub::Accessibility::ImageHasAlt:
|
31
31
|
enabled: true
|
32
|
-
GitHub::Accessibility::
|
32
|
+
GitHub::Accessibility::NoAriaLabelMisuseCounter:
|
33
33
|
enabled: true
|
34
34
|
GitHub::Accessibility::NoPositiveTabIndex:
|
35
35
|
enabled: true
|
36
36
|
GitHub::Accessibility::NoRedundantImageAlt:
|
37
37
|
enabled: true
|
38
|
+
GitHub::Accessibility::NoTitleAttributeCounter:
|
39
|
+
enabled: true
|
38
40
|
```
|
39
41
|
|
40
42
|
## Rules
|
@@ -42,9 +44,10 @@ linters:
|
|
42
44
|
- [GitHub::Accessibility::AvoidBothDisabledAndAriaDisabled](./docs/rules/accessibility/avoid-both-disabled-and-aria-disabled.md)
|
43
45
|
- [GitHub::Accessibility::IframeHasTitle](./docs/rules/accessibility/iframe-has-title.md)
|
44
46
|
- [GitHub::Accessibility::ImageHasAlt](./docs/rules/accessibility/image-has-alt.md)
|
45
|
-
- [GitHub::Accessibility::
|
47
|
+
- [GitHub::Accessibility::NoAriaLabelMisuseCounter](./docs/rules/accessibility/no-aria-label-misuse-counter.md)
|
46
48
|
- [GitHub::Accessibility::NoPositiveTabIndex](./docs/rules/accessibility/no-positive-tab-index.md)
|
47
49
|
- [GitHub::Accessibility::NoRedundantImageAlt](./docs/rules/accessibility/no-redundant-image-alt.md)
|
50
|
+
- [GitHub::Accessibility::NoTitleAttributeCounter](./docs/rules/accessibility/no-title-attribute-counter.md)
|
48
51
|
|
49
52
|
## Testing
|
50
53
|
|
@@ -24,6 +24,39 @@ module ERBLint
|
|
24
24
|
end
|
25
25
|
end
|
26
26
|
|
27
|
+
def counter_correct?(processed_source)
|
28
|
+
comment_node = nil
|
29
|
+
expected_count = 0
|
30
|
+
rule_name = simple_class_name
|
31
|
+
offenses_count = @offenses.length
|
32
|
+
|
33
|
+
processed_source.parser.ast.descendants(:erb).each do |node|
|
34
|
+
indicator_node, _, code_node, = *node
|
35
|
+
indicator = indicator_node&.loc&.source
|
36
|
+
comment = code_node&.loc&.source&.strip
|
37
|
+
|
38
|
+
if indicator == "#" && comment.start_with?("erblint:counter") && comment.match(rule_name)
|
39
|
+
comment_node = node
|
40
|
+
expected_count = comment.match(/\s(\d+)\s?$/)[1].to_i
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
if offenses_count.zero?
|
45
|
+
# have to adjust to get `\n` so we delete the whole line
|
46
|
+
add_offense(processed_source.to_source_range(comment_node.loc.adjust(end_pos: 1)), "Unused erblint:counter comment for #{rule_name}", "") if comment_node
|
47
|
+
return
|
48
|
+
end
|
49
|
+
|
50
|
+
first_offense = @offenses[0]
|
51
|
+
|
52
|
+
if comment_node.nil?
|
53
|
+
add_offense(processed_source.to_source_range(first_offense.source_range), "#{rule_name}: If you must, add <%# erblint:counter #{rule_name} #{offenses_count} %> to bypass this check.", "<%# erblint:counter #{rule_name} #{offenses_count} %>")
|
54
|
+
else
|
55
|
+
clear_offenses
|
56
|
+
add_offense(processed_source.to_source_range(comment_node.loc), "Incorrect erblint:counter number for #{rule_name}. Expected: #{expected_count}, actual: #{offenses_count}.", "<%# erblint:counter #{rule_name} #{offenses_count} %>") if expected_count != offenses_count
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
27
60
|
def generate_offense(klass, processed_source, tag, message = nil, replacement = nil)
|
28
61
|
message ||= klass::MESSAGE
|
29
62
|
message += "\nLearn more at https://github.com/github/erblint-github#rules.\n"
|
@@ -6,7 +6,7 @@ module ERBLint
|
|
6
6
|
module Linters
|
7
7
|
module GitHub
|
8
8
|
module Accessibility
|
9
|
-
class
|
9
|
+
class NoAriaLabelMisuseCounter < Linter
|
10
10
|
include ERBLint::Linters::CustomHelpers
|
11
11
|
include LinterRegistry
|
12
12
|
|
@@ -34,7 +34,21 @@ module ERBLint
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
end
|
37
|
-
|
37
|
+
counter_correct?(processed_source)
|
38
|
+
end
|
39
|
+
|
40
|
+
def autocorrect(processed_source, offense)
|
41
|
+
return unless offense.context
|
42
|
+
|
43
|
+
lambda do |corrector|
|
44
|
+
if processed_source.file_content.include?("erblint:counter #{simple_class_name}")
|
45
|
+
# update the counter if exists
|
46
|
+
corrector.replace(offense.source_range, offense.context)
|
47
|
+
else
|
48
|
+
# add comment with counter if none
|
49
|
+
corrector.insert_before(processed_source.source_buffer.source_range, "#{offense.context}\n")
|
50
|
+
end
|
51
|
+
end
|
38
52
|
end
|
39
53
|
end
|
40
54
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "../../custom_helpers"
|
4
|
+
|
5
|
+
module ERBLint
|
6
|
+
module Linters
|
7
|
+
module GitHub
|
8
|
+
module Accessibility
|
9
|
+
class NoTitleAttributeCounter < Linter
|
10
|
+
include ERBLint::Linters::CustomHelpers
|
11
|
+
include LinterRegistry
|
12
|
+
|
13
|
+
MESSAGE = "The title attribute should never be used unless for an `<iframe>` as it is inaccessible for several groups of users."
|
14
|
+
|
15
|
+
def run(processed_source)
|
16
|
+
tags(processed_source).each do |tag|
|
17
|
+
next if tag.name == "iframe"
|
18
|
+
next if tag.closing?
|
19
|
+
|
20
|
+
title = possible_attribute_values(tag, "title")
|
21
|
+
generate_offense(self.class, processed_source, tag) if title.present?
|
22
|
+
end
|
23
|
+
|
24
|
+
counter_correct?(processed_source)
|
25
|
+
end
|
26
|
+
|
27
|
+
def autocorrect(processed_source, offense)
|
28
|
+
return unless offense.context
|
29
|
+
|
30
|
+
lambda do |corrector|
|
31
|
+
if processed_source.file_content.include?("erblint:counter #{simple_class_name}")
|
32
|
+
# update the counter if exists
|
33
|
+
corrector.replace(offense.source_range, offense.context)
|
34
|
+
else
|
35
|
+
# add comment with counter if none
|
36
|
+
corrector.insert_before(processed_source.source_buffer.source_range, "#{offense.context}\n")
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: erblint-github
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GitHub Open Source
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-02-
|
11
|
+
date: 2022-02-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: erb_lint
|
@@ -108,9 +108,10 @@ files:
|
|
108
108
|
- lib/erblint-github/linters/github/accessibility/avoid_both_disabled_and_aria_disabled.rb
|
109
109
|
- lib/erblint-github/linters/github/accessibility/iframe_has_title.rb
|
110
110
|
- lib/erblint-github/linters/github/accessibility/image_has_alt.rb
|
111
|
-
- lib/erblint-github/linters/github/accessibility/
|
111
|
+
- lib/erblint-github/linters/github/accessibility/no_aria_label_misuse_counter.rb
|
112
112
|
- lib/erblint-github/linters/github/accessibility/no_positive_tab_index.rb
|
113
113
|
- lib/erblint-github/linters/github/accessibility/no_redundant_image_alt.rb
|
114
|
+
- lib/erblint-github/linters/github/accessibility/no_title_attribute_counter.rb
|
114
115
|
- lib/tasks/docs.rake
|
115
116
|
homepage: https://github.com/github/erblint-github
|
116
117
|
licenses:
|