Class: Rails::CssUnused::Configuration

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

Constant Summary collapse

VIEW_EXTENSIONS =

File extensions treated as view templates

%w[.erb .haml .slim].freeze
COMPOUND_VIEW_ENDINGS =

Compound view extensions (e.g. foo.html.erb)

%w[.html.erb .html.haml .html.slim].freeze
CSS_EXTENSIONS =

CSS/preprocessor extensions to scan

%w[.css .scss .sass].freeze
COMPONENT_EXTENSIONS =

Ruby component file extensions

%w[.rb].freeze

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeConfiguration

Returns a new instance of Configuration.



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/rails/css_unused/configuration.rb', line 56

def initialize
  @view_paths       = %w[app/views]
  @component_paths  = %w[app/components]
  @stylesheet_paths = %w[app/assets/stylesheets app/assets/builds]
  @javascript_paths = %w[app/javascript]

  @ignore_classes = %w[
    clearfix sr-only visually-hidden
    active disabled selected current open closed
    show hide hidden visible
    fade collapse collapsing
  ]

  @ignore_patterns = [
    /\Ajs-/,       # JS-hook classes
    /\Ais-/,       # state classes  (is-active, is-open)
    /\Ahas-/,      # state classes  (has-error)
    /\Adata-/,     # sometimes leaked into CSS scanners
  ]

  @scan_javascript_for_classes = true
  @scan_ruby_components        = true
  @show_source_files           = false
  @fail_on_unused              = false
end

Instance Attribute Details

#component_pathsObject

Directories to search for ViewComponent / Phlex / etc. template files.



20
21
22
# File 'lib/rails/css_unused/configuration.rb', line 20

def component_paths
  @component_paths
end

#fail_on_unusedObject

When true, exit with code 1 if any ghost classes are found. Useful for CI pipelines.



54
55
56
# File 'lib/rails/css_unused/configuration.rb', line 54

def fail_on_unused
  @fail_on_unused
end

#ignore_classesObject

── Ignore lists ─────────────────────────────────────────────────────Exact class names to always treat as “used” (never reported as ghost). Good for: utility classes, JS-hook classes, server-side rendered classes.



32
33
34
# File 'lib/rails/css_unused/configuration.rb', line 32

def ignore_classes
  @ignore_classes
end

#ignore_patternsObject

Regex patterns — any CSS class name matching any pattern is ignored. Good for: third-party prefixes, state classes, BEM modifier variants. Example: [/Ajs-/, /Ais-/, /Ahas-/]



37
38
39
# File 'lib/rails/css_unused/configuration.rb', line 37

def ignore_patterns
  @ignore_patterns
end

#javascript_pathsObject

Directories to search for JS files (e.g. Stimulus controllers that add classes dynamically — detected as allowlisted dynamic patterns).



27
28
29
# File 'lib/rails/css_unused/configuration.rb', line 27

def javascript_paths
  @javascript_paths
end

#scan_javascript_for_classesObject

── Dynamic class detection ───────────────────────────────────────────When true, scan JS/Stimulus files for string literals that look like CSS class names and add them to the used-class set automatically.



42
43
44
# File 'lib/rails/css_unused/configuration.rb', line 42

def scan_javascript_for_classes
  @scan_javascript_for_classes
end

#scan_ruby_componentsObject

When true, scan Ruby component files (.rb) for string literals that look like CSS classes passed to html attributes.



46
47
48
# File 'lib/rails/css_unused/configuration.rb', line 46

def scan_ruby_components
  @scan_ruby_components
end

#show_source_filesObject

── Output ───────────────────────────────────────────────────────────When true, show which file each ghost class was defined in.



50
51
52
# File 'lib/rails/css_unused/configuration.rb', line 50

def show_source_files
  @show_source_files
end

#stylesheet_pathsObject

Directories to search for stylesheets.



23
24
25
# File 'lib/rails/css_unused/configuration.rb', line 23

def stylesheet_paths
  @stylesheet_paths
end

#view_pathsObject

── Scan paths ────────────────────────────────────────────────────────Directories to search for view templates (relative to project root).



17
18
19
# File 'lib/rails/css_unused/configuration.rb', line 17

def view_paths
  @view_paths
end