Class: Rails::CssUnused::ViewScanner

Inherits:
Object
  • Object
show all
Defined in:
lib/rails/css_unused/view_scanner.rb

Overview

Extracts CSS class names referenced in Rails views and components via regex. Dynamic classes (ERB interpolation) are only partially detected — see README.

Constant Summary collapse

CLASS_ATTRIBUTE_PATTERN =

class=“foo bar”, class=‘foo’, class: “foo”, class: ‘foo’, class: %w[foo bar]

/
  class\s*=\s*["']([^"']+)["']
  |
  class:\s*["']([^"']+)["']
  |
  class:\s*%w\[\s*([^\]]+)\]
  |
  class:\s*\[\s*([^\]]+)\]
/ix
HAML_CLASS_PATTERN =

HAML: .foo.bar or %div.foo

/\.([a-zA-Z_][\w-]*)/
TAG_HELPER_CLASS_PATTERN =

Tailwind-style @apply or data-class rarely; common helper: tag.div class: “x”

/(?:^|\s)class:\s*["']([^"']+)["']/m

Instance Method Summary collapse

Constructor Details

#initialize(root:, config: CssUnused.configuration) ⇒ ViewScanner

Returns a new instance of ViewScanner.



25
26
27
28
# File 'lib/rails/css_unused/view_scanner.rb', line 25

def initialize(root:, config: CssUnused.configuration)
  @root = Pathname(root)
  @config = config
end

Instance Method Details

#used_classesObject



30
31
32
33
34
35
# File 'lib/rails/css_unused/view_scanner.rb', line 30

def used_classes
  classes = Set.new
  each_view_file { |path, content| classes.merge(extract_from(content, path)) }
  classes.subtract(normalized_ignore_list)
  classes
end