html_scss_class_checker 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/changelog-update.yml +62 -0
- data/.github/workflows/gem-push.yml +44 -0
- data/.gitignore +1 -0
- data/.rspec +1 -1
- data/CONTRIBUTING.md +51 -51
- data/Gemfile +17 -3
- data/Gemfile.lock +39 -1
- data/LICENSE +21 -21
- data/README.md +76 -74
- data/Rakefile +44 -12
- data/bin/console +7 -7
- data/bin/setup +22 -22
- data/docs/api.md +97 -0
- data/docs/development.md +87 -87
- data/docs/testing.md +73 -73
- data/docs/usage.md +89 -89
- data/html_scss_class_checker.gemspec +31 -27
- data/lib/html_scss_class_checker/class_checker.rb +33 -33
- data/lib/html_scss_class_checker/class_extractor.rb +14 -14
- data/lib/html_scss_class_checker/file_processor.rb +23 -23
- data/lib/html_scss_class_checker.rb +18 -18
- data/scripts/CreateGemStructure.ps1 +38 -38
- data/scripts/classes +1 -1
- metadata +73 -15
@@ -1,33 +1,33 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'set'
|
3
|
-
|
4
|
-
module HtmlScssClassChecker
|
5
|
-
class ClassChecker
|
6
|
-
attr_reader :unmatched_classes, :file_class_mapping
|
7
|
-
|
8
|
-
def initialize(config)
|
9
|
-
@known_classes = Set.new(config['known_classes'])
|
10
|
-
@html_directories = config['html_directories']
|
11
|
-
@scss_directories = config['scss_directories']
|
12
|
-
@unmatched_classes = Set.new
|
13
|
-
@file_class_mapping = {}
|
14
|
-
end
|
15
|
-
|
16
|
-
def check
|
17
|
-
process_directories(@html_directories, 'html')
|
18
|
-
process_directories(@scss_directories, 'scss')
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
|
23
|
-
def process_directories(directories, file_type)
|
24
|
-
directories.each do |directory|
|
25
|
-
Dir.glob("#{directory}/**/*.#{file_type}").each do |file|
|
26
|
-
classes = FileProcessor.new(file, file_type).list_classes
|
27
|
-
@unmatched_classes.merge(classes - @known_classes)
|
28
|
-
@file_class_mapping[file] = classes
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
1
|
+
require 'json'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module HtmlScssClassChecker
|
5
|
+
class ClassChecker
|
6
|
+
attr_reader :unmatched_classes, :file_class_mapping
|
7
|
+
|
8
|
+
def initialize(config)
|
9
|
+
@known_classes = Set.new(config['known_classes'])
|
10
|
+
@html_directories = config['html_directories']
|
11
|
+
@scss_directories = config['scss_directories']
|
12
|
+
@unmatched_classes = Set.new
|
13
|
+
@file_class_mapping = {}
|
14
|
+
end
|
15
|
+
|
16
|
+
def check
|
17
|
+
process_directories(@html_directories, 'html')
|
18
|
+
process_directories(@scss_directories, 'scss')
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def process_directories(directories, file_type)
|
24
|
+
directories.each do |directory|
|
25
|
+
Dir.glob("#{directory}/**/*.#{file_type}").each do |file|
|
26
|
+
classes = FileProcessor.new(file, file_type).list_classes
|
27
|
+
@unmatched_classes.merge(classes - @known_classes)
|
28
|
+
@file_class_mapping[file] = classes
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'set'
|
3
|
-
|
4
|
-
module HtmlScssClassChecker
|
5
|
-
class ClassExtractor
|
6
|
-
def self.extract_from_html(content)
|
7
|
-
content.scan(/class="([^"]+)"/).flatten.map { |cls| cls.split }.flatten.to_set
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.extract_from_scss(content)
|
11
|
-
content.scan(/\.[\w-]+/).flatten.map { |cls| cls.delete_prefix('.') }.to_set
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
1
|
+
require 'json'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module HtmlScssClassChecker
|
5
|
+
class ClassExtractor
|
6
|
+
def self.extract_from_html(content)
|
7
|
+
content.scan(/class="([^"]+)"/).flatten.map { |cls| cls.split }.flatten.to_set
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.extract_from_scss(content)
|
11
|
+
content.scan(/\.[\w-]+/).flatten.map { |cls| cls.delete_prefix('.') }.to_set
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -1,23 +1,23 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'set'
|
3
|
-
|
4
|
-
module HtmlScssClassChecker
|
5
|
-
class FileProcessor
|
6
|
-
def initialize(file_path, file_type)
|
7
|
-
@file_path = file_path
|
8
|
-
@file_type = file_type
|
9
|
-
end
|
10
|
-
|
11
|
-
def list_classes
|
12
|
-
content = File.read(@file_path)
|
13
|
-
case @file_type
|
14
|
-
when 'html'
|
15
|
-
ClassExtractor.extract_from_html(content)
|
16
|
-
when 'scss'
|
17
|
-
ClassExtractor.extract_from_scss(content)
|
18
|
-
else
|
19
|
-
Set.new
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
1
|
+
require 'json'
|
2
|
+
require 'set'
|
3
|
+
|
4
|
+
module HtmlScssClassChecker
|
5
|
+
class FileProcessor
|
6
|
+
def initialize(file_path, file_type)
|
7
|
+
@file_path = file_path
|
8
|
+
@file_type = file_type
|
9
|
+
end
|
10
|
+
|
11
|
+
def list_classes
|
12
|
+
content = File.read(@file_path)
|
13
|
+
case @file_type
|
14
|
+
when 'html'
|
15
|
+
ClassExtractor.extract_from_html(content)
|
16
|
+
when 'scss'
|
17
|
+
ClassExtractor.extract_from_scss(content)
|
18
|
+
else
|
19
|
+
Set.new
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,18 +1,18 @@
|
|
1
|
-
require 'html_scss_class_checker/class_extractor'
|
2
|
-
require 'html_scss_class_checker/file_processor'
|
3
|
-
require 'html_scss_class_checker/class_checker'
|
4
|
-
|
5
|
-
# Read configuration from JSON file
|
6
|
-
config_file = 'config.json' # Update this path as needed
|
7
|
-
config = JSON.parse(File.read(config_file))
|
8
|
-
|
9
|
-
checker = HtmlScssClassChecker::ClassChecker.new(config)
|
10
|
-
checker.check
|
11
|
-
|
12
|
-
puts "Unmatched Classes:"
|
13
|
-
puts checker.unmatched_classes.to_a
|
14
|
-
|
15
|
-
puts "\nClasses in each file:"
|
16
|
-
checker.file_class_mapping.each do |file, classes|
|
17
|
-
puts "#{file}: #{classes.to_a}"
|
18
|
-
end
|
1
|
+
require 'html_scss_class_checker/class_extractor'
|
2
|
+
require 'html_scss_class_checker/file_processor'
|
3
|
+
require 'html_scss_class_checker/class_checker'
|
4
|
+
|
5
|
+
# Read configuration from JSON file
|
6
|
+
config_file = 'config.json' # Update this path as needed
|
7
|
+
config = JSON.parse(File.read(config_file))
|
8
|
+
|
9
|
+
checker = HtmlScssClassChecker::ClassChecker.new(config)
|
10
|
+
checker.check
|
11
|
+
|
12
|
+
puts "Unmatched Classes:"
|
13
|
+
puts checker.unmatched_classes.to_a
|
14
|
+
|
15
|
+
puts "\nClasses in each file:"
|
16
|
+
checker.file_class_mapping.each do |file, classes|
|
17
|
+
puts "#{file}: #{classes.to_a}"
|
18
|
+
end
|
@@ -1,38 +1,38 @@
|
|
1
|
-
# Define directories and files to create
|
2
|
-
$gemName = "html_scss_class_checker"
|
3
|
-
$directories = @(
|
4
|
-
"$gemName/bin",
|
5
|
-
"$gemName/lib/$gemName",
|
6
|
-
"$gemName/spec"
|
7
|
-
)
|
8
|
-
|
9
|
-
$files = @(
|
10
|
-
"$gemName/bin/console",
|
11
|
-
"$gemName/bin/setup",
|
12
|
-
"$gemName/lib/$gemName/class_extractor.rb",
|
13
|
-
"$gemName/lib/$gemName/file_processor.rb",
|
14
|
-
"$gemName/lib/$gemName/class_checker.rb",
|
15
|
-
"$gemName/lib/$gemName.rb",
|
16
|
-
"$gemName/spec/class_extractor_spec.rb",
|
17
|
-
"$gemName/spec/file_processor_spec.rb",
|
18
|
-
"$gemName/spec/class_checker_spec.rb",
|
19
|
-
"$gemName/spec/spec_helper.rb",
|
20
|
-
"$gemName/$gemName.gemspec",
|
21
|
-
"$gemName/Gemfile",
|
22
|
-
"$gemName/Rakefile",
|
23
|
-
"$gemName/LICENSE.txt",
|
24
|
-
"$gemName/README.md",
|
25
|
-
"$gemName/.gitignore"
|
26
|
-
)
|
27
|
-
|
28
|
-
# Create directories
|
29
|
-
foreach ($dir in $directories) {
|
30
|
-
New-Item -Path $dir -ItemType Directory -Force
|
31
|
-
}
|
32
|
-
|
33
|
-
# Create files
|
34
|
-
foreach ($file in $files) {
|
35
|
-
New-Item -Path $file -ItemType File -Force
|
36
|
-
}
|
37
|
-
|
38
|
-
Write-Host "Gem structure for '$gemName' created successfully."
|
1
|
+
# Define directories and files to create
|
2
|
+
$gemName = "html_scss_class_checker"
|
3
|
+
$directories = @(
|
4
|
+
"$gemName/bin",
|
5
|
+
"$gemName/lib/$gemName",
|
6
|
+
"$gemName/spec"
|
7
|
+
)
|
8
|
+
|
9
|
+
$files = @(
|
10
|
+
"$gemName/bin/console",
|
11
|
+
"$gemName/bin/setup",
|
12
|
+
"$gemName/lib/$gemName/class_extractor.rb",
|
13
|
+
"$gemName/lib/$gemName/file_processor.rb",
|
14
|
+
"$gemName/lib/$gemName/class_checker.rb",
|
15
|
+
"$gemName/lib/$gemName.rb",
|
16
|
+
"$gemName/spec/class_extractor_spec.rb",
|
17
|
+
"$gemName/spec/file_processor_spec.rb",
|
18
|
+
"$gemName/spec/class_checker_spec.rb",
|
19
|
+
"$gemName/spec/spec_helper.rb",
|
20
|
+
"$gemName/$gemName.gemspec",
|
21
|
+
"$gemName/Gemfile",
|
22
|
+
"$gemName/Rakefile",
|
23
|
+
"$gemName/LICENSE.txt",
|
24
|
+
"$gemName/README.md",
|
25
|
+
"$gemName/.gitignore"
|
26
|
+
)
|
27
|
+
|
28
|
+
# Create directories
|
29
|
+
foreach ($dir in $directories) {
|
30
|
+
New-Item -Path $dir -ItemType Directory -Force
|
31
|
+
}
|
32
|
+
|
33
|
+
# Create files
|
34
|
+
foreach ($file in $files) {
|
35
|
+
New-Item -Path $file -ItemType File -Force
|
36
|
+
}
|
37
|
+
|
38
|
+
Write-Host "Gem structure for '$gemName' created successfully."
|
data/scripts/classes
CHANGED
@@ -1 +1 @@
|
|
1
|
-
grep -ohr 'class="[^"]*"' ./ | sort | uniq
|
1
|
+
grep -ohr 'class="[^"]*"' ./ | sort | uniq
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html_scss_class_checker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thaddeus Thomas
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json
|
@@ -28,30 +28,86 @@ dependencies:
|
|
28
28
|
name: bundler
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
33
|
+
version: '0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
40
|
+
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- - "
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
46
95
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: yard
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
48
104
|
type: :development
|
49
105
|
prerelease: false
|
50
106
|
version_requirements: !ruby/object:Gem::Requirement
|
51
107
|
requirements:
|
52
|
-
- - "
|
108
|
+
- - ">="
|
53
109
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
110
|
+
version: '0'
|
55
111
|
description: HtmlScssClassChecker is designed to streamline the process of frontend
|
56
112
|
development by scanning HTML and SCSS files and identifying classes that are either
|
57
113
|
undefined or unused. This gem aims to facilitate cleaner, more maintainable, and
|
@@ -60,13 +116,15 @@ description: HtmlScssClassChecker is designed to streamline the process of front
|
|
60
116
|
looking to optimize their front-end code and ensure consistency across their stylesheets
|
61
117
|
and markup.
|
62
118
|
email:
|
63
|
-
-
|
119
|
+
- thaddeus@vcwtech.com
|
64
120
|
executables:
|
65
121
|
- console
|
66
122
|
- setup
|
67
123
|
extensions: []
|
68
124
|
extra_rdoc_files: []
|
69
125
|
files:
|
126
|
+
- ".github/workflows/changelog-update.yml"
|
127
|
+
- ".github/workflows/gem-push.yml"
|
70
128
|
- ".gitignore"
|
71
129
|
- ".rspec"
|
72
130
|
- ".ruby-version"
|
@@ -90,11 +148,11 @@ files:
|
|
90
148
|
- lib/html_scss_class_checker/file_processor.rb
|
91
149
|
- scripts/CreateGemStructure.ps1
|
92
150
|
- scripts/classes
|
93
|
-
homepage:
|
151
|
+
homepage: https://github.com/Visionary-Code-Works/HtmlScssClassChecker
|
94
152
|
licenses:
|
95
153
|
- MIT
|
96
154
|
metadata: {}
|
97
|
-
post_install_message:
|
155
|
+
post_install_message:
|
98
156
|
rdoc_options: []
|
99
157
|
require_paths:
|
100
158
|
- lib
|
@@ -110,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
168
|
version: '0'
|
111
169
|
requirements: []
|
112
170
|
rubygems_version: 3.4.10
|
113
|
-
signing_key:
|
171
|
+
signing_key:
|
114
172
|
specification_version: 4
|
115
173
|
summary: A Ruby gem for identifying unused or unmatched HTML and SCSS classes.
|
116
174
|
test_files: []
|