Class: ERBLint::Linters::Primer::Accessibility::TooltippedMigration

Inherits:
Linter
  • Object
show all
Includes:
Helpers::RuleHelpers, LinterRegistry
Defined in:
lib/primer/view_components/linters/tooltipped_migration.rb

Overview

Flag when ‘.tooltipped` is being used and offer alternatives.

Constant Summary collapse

MIGRATE_TO_NEWER_TOOLTIP =
".tooltipped has been deprecated. There are major accessibility concerns with using this tooltip so please take action. See https://primer.style/design/guides/development/rails/migration-guides/primer-css-tooltipped."
TOOLTIPPED_RUBY_PATTERN =
/classes:.*tooltipped|class:.*tooltipped/.freeze

Instance Method Summary collapse

Methods included from Helpers::RuleHelpers

#erb_nodes, #extract_ruby_from_erb_node, #generate_node_offense, #generate_offense, #tags

Instance Method Details

#run(processed_source) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/primer/view_components/linters/tooltipped_migration.rb', line 16

def run(processed_source)
  # HTML tags
  tags(processed_source).each do |tag|
    next if tag.closing?

    classes = tag.attributes["class"]&.value
    generate_offense(self.class, processed_source, tag, MIGRATE_TO_NEWER_TOOLTIP) if classes&.include?("tooltipped")
  end

  # ERB nodes
  erb_nodes(processed_source).each do |node|
    code = extract_ruby_from_erb_node(node)
    generate_node_offense(self.class, processed_source, node, MIGRATE_TO_NEWER_TOOLTIP) if code.match?(TOOLTIPPED_RUBY_PATTERN)
  end
end