diff --git a/README.md b/README.md index f74d8b6..e5c26e1 100644 --- a/README.md +++ b/README.md @@ -23,16 +23,16 @@ require "erblint-github/linters" ```yaml --- linters: - GitHub::Accessibility::ImageHasAlt: + Accessibility::ImageHasAlt: enabled: true - GitHub::Accessibility::NoRedundantImageAlt: + Accessibility::NoRedundantImageAlt: enabled: true ``` ### Rules -- [GitHub::Accessibility::NoRedundantImageAlt](./docs/rules/accessibility/no-redundant-image-alt.md) -- [GitHub::Accessibility::ImageHasAlt](./docs/rules/accessibility/image-has-alt.md) +- [Accessibility::NoRedundantImageAlt](./docs/rules/accessibility/no-redundant-image-alt.md) +- [Accessibility::ImageHasAlt](./docs/rules/accessibility/image-has-alt.md) ## Testing diff --git a/lib/erblint-github/linters.rb b/lib/erblint-github/linters.rb index 966b40d..d350711 100644 --- a/lib/erblint-github/linters.rb +++ b/lib/erblint-github/linters.rb @@ -1,3 +1,3 @@ # frozen_string_literal: true -Dir[File.join(__dir__, "linters", "github/**/*.rb")].sort.each { |file| require file } +Dir[File.join(__dir__, "linters", "**/*.rb")].sort.each { |file| require file } diff --git a/lib/erblint-github/linters/accessibility/image_has_alt.rb b/lib/erblint-github/linters/accessibility/image_has_alt.rb new file mode 100644 index 0000000..76fca23 --- /dev/null +++ b/lib/erblint-github/linters/accessibility/image_has_alt.rb @@ -0,0 +1,29 @@ +# frozen_string_literal: true + +require_relative "../custom_helpers" + +module ERBLint + module Linters + module Accessibility + class ImageHasAlt < Linter + include ERBLint::Linters::CustomHelpers + include LinterRegistry + + MESSAGE = " should have an alt prop with meaningful text or an empty string for decorative images" + + def run(processed_source) + tags(processed_source).each do |tag| + next if tag.name != "img" + next if tag.closing? + + alt = possible_attribute_values(tag, "alt") + + generate_offense(self.class, processed_source, tag) if alt.empty? + end + + rule_disabled?(processed_source) + end + end + end + end +end diff --git a/lib/erblint-github/linters/accessibility/no_redundant_image_alt.rb b/lib/erblint-github/linters/accessibility/no_redundant_image_alt.rb new file mode 100644 index 0000000..aae6bf8 --- /dev/null +++ b/lib/erblint-github/linters/accessibility/no_redundant_image_alt.rb @@ -0,0 +1,31 @@ +# frozen_string_literal: true + +require_relative "../custom_helpers" + +module ERBLint + module Linters + module Accessibility + class NoRedundantImageAlt < Linter + include ERBLint::Linters::CustomHelpers + include LinterRegistry + + MESSAGE = " alt prop should not contain `image` or `picture` as screen readers already announce the element as an image" + REDUNDANT_ALT_WORDS = %w[image picture].freeze + + def run(processed_source) + tags(processed_source).each do |tag| + next if tag.name != "img" + next if tag.closing? + + alt = possible_attribute_values(tag, "alt").join + next if alt.empty? + + generate_offense(self.class, processed_source, tag) if (alt.downcase.split & REDUNDANT_ALT_WORDS).any? + end + + rule_disabled?(processed_source) + end + end + end + end +end diff --git a/lib/erblint-github/linters/github/accessibility/image_has_alt.rb b/lib/erblint-github/linters/github/accessibility/image_has_alt.rb deleted file mode 100644 index f72d66f..0000000 --- a/lib/erblint-github/linters/github/accessibility/image_has_alt.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -require_relative "../../custom_helpers" - -module ERBLint - module Linters - module GitHub - module Accessibility - class ImageHasAlt < Linter - include ERBLint::Linters::CustomHelpers - include LinterRegistry - - MESSAGE = " should have an alt prop with meaningful text or an empty string for decorative images" - - def run(processed_source) - tags(processed_source).each do |tag| - next if tag.name != "img" - next if tag.closing? - - alt = possible_attribute_values(tag, "alt") - - generate_offense(self.class, processed_source, tag) if alt.empty? - end - - rule_disabled?(processed_source) - end - end - end - end - end -end diff --git a/lib/erblint-github/linters/github/accessibility/no_redundant_image_alt.rb b/lib/erblint-github/linters/github/accessibility/no_redundant_image_alt.rb deleted file mode 100644 index 479f659..0000000 --- a/lib/erblint-github/linters/github/accessibility/no_redundant_image_alt.rb +++ /dev/null @@ -1,33 +0,0 @@ -# frozen_string_literal: true - -require_relative "../../custom_helpers" - -module ERBLint - module Linters - module GitHub - module Accessibility - class NoRedundantImageAlt < Linter - include ERBLint::Linters::CustomHelpers - include LinterRegistry - - MESSAGE = " alt prop should not contain `image` or `picture` as screen readers already announce the element as an image" - REDUNDANT_ALT_WORDS = %w[image picture].freeze - - def run(processed_source) - tags(processed_source).each do |tag| - next if tag.name != "img" - next if tag.closing? - - alt = possible_attribute_values(tag, "alt").join - next if alt.empty? - - generate_offense(self.class, processed_source, tag) if (alt.downcase.split & REDUNDANT_ALT_WORDS).any? - end - - rule_disabled?(processed_source) - end - end - end - end - end -end diff --git a/test/linters/accessibility/image_has_alt_test.rb b/test/linters/accessibility/image_has_alt_test.rb index 4807c14..9b18138 100644 --- a/test/linters/accessibility/image_has_alt_test.rb +++ b/test/linters/accessibility/image_has_alt_test.rb @@ -4,7 +4,7 @@ class ImageHasAltTest < LinterTestCase def linter_class - ERBLint::Linters::GitHub::Accessibility::ImageHasAlt + ERBLint::Linters::Accessibility::ImageHasAlt end def test_warns_if_image_has_no_alt_attribute diff --git a/test/linters/accessibility/no_redundant_image_alt_test.rb b/test/linters/accessibility/no_redundant_image_alt_test.rb index 9b52f05..796560a 100644 --- a/test/linters/accessibility/no_redundant_image_alt_test.rb +++ b/test/linters/accessibility/no_redundant_image_alt_test.rb @@ -4,7 +4,7 @@ class NoRedundantImageAltTest < LinterTestCase def linter_class - ERBLint::Linters::GitHub::Accessibility::NoRedundantImageAlt + ERBLint::Linters::Accessibility::NoRedundantImageAlt end def test_warns_if_alt_contains_image