File tree Expand file tree Collapse file tree 4 files changed +83
-0
lines changed
lib/erblint-github/linters/github/accessibility
test/linters/accessibility Expand file tree Collapse file tree 4 files changed +83
-0
lines changed Original file line number Diff line number Diff line change @@ -31,6 +31,8 @@ linters:
3131 enabled : true
3232 GitHub::Accessibility::ImageHasAlt :
3333 enabled : true
34+ GitHub::Accessibility::LinkHasHref :
35+ enabled : true
3436 GitHub::Accessibility::NoAriaLabelMisuseCounter :
3537 enabled : true
3638 GitHub::Accessibility::NoPositiveTabIndex :
@@ -47,6 +49,7 @@ linters:
4749- [GitHub::Accessibility::AvoidGenericLinkTextCounter](./docs/rules/accessibility/avoid-generic-link-text-counter.md)
4850- [GitHub::Accessibility::IframeHasTitle](./docs/rules/accessibility/iframe-has-title.md)
4951- [GitHub::Accessibility::ImageHasAlt](./docs/rules/accessibility/image-has-alt.md)
52+ - [GitHub::Accessibility::LinkHasHref](./docs/rules/accessibility/link_has_href.md)
5053- [GitHub::Accessibility::NoAriaLabelMisuseCounter](./docs/rules/accessibility/no-aria-label-misuse-counter.md)
5154- [GitHub::Accessibility::NoPositiveTabIndex](./docs/rules/accessibility/no-positive-tab-index.md)
5255- [GitHub::Accessibility::NoRedundantImageAlt](./docs/rules/accessibility/no-redundant-image-alt.md)
Original file line number Diff line number Diff line change 1+ # Link Has Href
2+
3+ ## Rule Details
4+
5+ Links should go somewhere, you probably want to use a ` <button> ` instead.
6+
7+ ## Resources
8+
9+ - [ ` <a> ` : The Anchor element] ( https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a )
10+ - [ Primer: Links] ( https://primer.style/design/accessibility/links )
11+
12+ ## Examples
13+ ### ** Incorrect** code for this rule 👎
14+
15+ ``` erb
16+ <!-- incorrect -->
17+ <a>Go to GitHub</a>
18+ ```
19+
20+ ### ** Correct** code for this rule 👍
21+
22+ ``` erb
23+ <!-- correct -->
24+ <a href='https://github.com/'>Go to GitHub</a>
25+ ```
Original file line number Diff line number Diff line change 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 LinkHasHref < Linter
10+ include ERBLint ::Linters ::CustomHelpers
11+ include LinterRegistry
12+
13+ MESSAGE = "Links should go somewhere, you probably want to use a <button> instead."
14+
15+ def run ( processed_source )
16+ tags ( processed_source ) . each do |tag |
17+ next if tag . name != "a"
18+ next if tag . closing?
19+
20+ href = possible_attribute_values ( tag , "href" )
21+ name = tag . attributes [ "name" ]
22+
23+ generate_offense ( self . class , processed_source , tag ) if ( !name && href . empty? ) || href . include? ( "#" )
24+ end
25+
26+ rule_disabled? ( processed_source )
27+ end
28+ end
29+ end
30+ end
31+ end
32+ end
Original file line number Diff line number Diff line change 1+ # frozen_string_literal: true
2+
3+ require "test_helper"
4+
5+ class LinkHasHref < LinterTestCase
6+ def linter_class
7+ ERBLint ::Linters ::GitHub ::Accessibility ::LinkHasHref
8+ end
9+
10+ def test_warns_if_link_has_no_href_attribute
11+ @file = "<a>Go to GitHub</a>"
12+ @linter . run ( processed_source )
13+
14+ refute_empty @linter . offenses
15+ end
16+
17+ def test_does_not_warn_if_link_has_href_attribute
18+ @file = "<a href='https://github.com/'>Go to GitHub</a>"
19+ @linter . run ( processed_source )
20+
21+ assert_empty @linter . offenses
22+ end
23+ end
You can’t perform that action at this time.
0 commit comments