theme-check 0.8.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/theme-check.yml +3 -0
- data/CHANGELOG.md +39 -0
- data/CONTRIBUTING.md +2 -1
- data/README.md +4 -1
- data/RELEASING.md +5 -3
- data/config/default.yml +46 -1
- data/data/shopify_liquid/tags.yml +3 -0
- data/docs/checks/asset_url_filters.md +56 -0
- data/docs/checks/content_for_header_modification.md +42 -0
- data/docs/checks/img_lazy_loading.md +61 -0
- data/docs/checks/nested_snippet.md +1 -1
- data/docs/checks/parser_blocking_script_tag.md +53 -0
- data/docs/checks/space_inside_braces.md +22 -0
- data/exe/theme-check-language-server +1 -2
- data/lib/theme_check.rb +9 -1
- data/lib/theme_check/analyzer.rb +72 -16
- data/lib/theme_check/bug.rb +20 -0
- data/lib/theme_check/check.rb +31 -6
- data/lib/theme_check/checks.rb +49 -4
- data/lib/theme_check/checks/asset_url_filters.rb +46 -0
- data/lib/theme_check/checks/content_for_header_modification.rb +41 -0
- data/lib/theme_check/checks/img_lazy_loading.rb +25 -0
- data/lib/theme_check/checks/img_width_and_height.rb +18 -49
- data/lib/theme_check/checks/missing_template.rb +1 -0
- data/lib/theme_check/checks/nested_snippet.rb +1 -1
- data/lib/theme_check/checks/parser_blocking_javascript.rb +6 -38
- data/lib/theme_check/checks/parser_blocking_script_tag.rb +20 -0
- data/lib/theme_check/checks/remote_asset.rb +21 -79
- data/lib/theme_check/checks/space_inside_braces.rb +5 -5
- data/lib/theme_check/checks/template_length.rb +3 -0
- data/lib/theme_check/checks/valid_html_translation.rb +1 -0
- data/lib/theme_check/config.rb +2 -0
- data/lib/theme_check/disabled_check.rb +6 -4
- data/lib/theme_check/disabled_checks.rb +25 -9
- data/lib/theme_check/html_check.rb +7 -0
- data/lib/theme_check/html_node.rb +56 -0
- data/lib/theme_check/html_visitor.rb +38 -0
- data/lib/theme_check/json_file.rb +8 -0
- data/lib/theme_check/language_server.rb +2 -0
- data/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +1 -0
- data/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +10 -8
- data/lib/theme_check/language_server/diagnostics_tracker.rb +64 -0
- data/lib/theme_check/language_server/handler.rb +31 -26
- data/lib/theme_check/language_server/server.rb +1 -1
- data/lib/theme_check/language_server/variable_lookup_finder.rb +295 -0
- data/lib/theme_check/liquid_check.rb +1 -4
- data/lib/theme_check/offense.rb +18 -0
- data/lib/theme_check/shopify_liquid/tag.rb +13 -0
- data/lib/theme_check/template.rb +8 -0
- data/lib/theme_check/theme.rb +7 -2
- data/lib/theme_check/version.rb +1 -1
- data/lib/theme_check/visitor.rb +2 -11
- metadata +17 -3
@@ -6,6 +6,7 @@ module ThemeCheck
|
|
6
6
|
extend ChecksTracking
|
7
7
|
include ParsingHelpers
|
8
8
|
|
9
|
+
# TODO: remove this once all regex checks are migrate to HtmlCheck# TODO: remove this once all regex checks are migrate to HtmlCheck
|
9
10
|
TAG = /#{Liquid::TagStart}.*?#{Liquid::TagEnd}/om
|
10
11
|
VARIABLE = /#{Liquid::VariableStart}.*?#{Liquid::VariableEnd}/om
|
11
12
|
START_OR_END_QUOTE = /(^['"])|(['"]$)/
|
@@ -16,9 +17,5 @@ module ThemeCheck
|
|
16
17
|
ATTR = /[a-z0-9-]+/i
|
17
18
|
HTML_ATTRIBUTE = /#{ATTR}(?:=#{QUOTED_LIQUID_ATTRIBUTE})?/omix
|
18
19
|
HTML_ATTRIBUTES = /(?:#{HTML_ATTRIBUTE}|\s)*/omix
|
19
|
-
|
20
|
-
def add_offense(message, node: nil, template: node&.template, markup: nil, line_number: nil, &block)
|
21
|
-
offenses << Offense.new(check: self, message: message, template: template, node: node, markup: markup, line_number: line_number, correction: block)
|
22
|
-
end
|
23
20
|
end
|
24
21
|
end
|
data/lib/theme_check/offense.rb
CHANGED
@@ -114,6 +114,24 @@ module ThemeCheck
|
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
117
|
+
def whole_theme?
|
118
|
+
check.whole_theme?
|
119
|
+
end
|
120
|
+
|
121
|
+
def single_file?
|
122
|
+
check.single_file?
|
123
|
+
end
|
124
|
+
|
125
|
+
def ==(other)
|
126
|
+
other.is_a?(Offense) &&
|
127
|
+
check == other.check &&
|
128
|
+
message == other.message &&
|
129
|
+
template == other.template &&
|
130
|
+
node == other.node &&
|
131
|
+
markup == other.markup &&
|
132
|
+
line_number == other.line_number
|
133
|
+
end
|
134
|
+
|
117
135
|
def to_s
|
118
136
|
if template
|
119
137
|
"#{message} at #{location}"
|
@@ -8,6 +8,19 @@ module ThemeCheck
|
|
8
8
|
|
9
9
|
def labels
|
10
10
|
@tags ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/tags.yml"))
|
11
|
+
.to_set
|
12
|
+
end
|
13
|
+
|
14
|
+
def tag_regex(tag)
|
15
|
+
return unless labels.include?(tag)
|
16
|
+
@tag_regexes ||= {}
|
17
|
+
@tag_regexes[tag] ||= /\A#{Liquid::TagStart}-?\s*#{tag}/m
|
18
|
+
end
|
19
|
+
|
20
|
+
def liquid_tag_regex(tag)
|
21
|
+
return unless labels.include?(tag)
|
22
|
+
@tag_liquid_regexes ||= {}
|
23
|
+
@tag_liquid_regexes[tag] ||= /^\s*#{tag}/m
|
11
24
|
end
|
12
25
|
end
|
13
26
|
end
|
data/lib/theme_check/template.rb
CHANGED
data/lib/theme_check/theme.rb
CHANGED
@@ -52,8 +52,13 @@ module ThemeCheck
|
|
52
52
|
@all ||= json + liquid + assets
|
53
53
|
end
|
54
54
|
|
55
|
-
def [](
|
56
|
-
|
55
|
+
def [](name_or_relative_path)
|
56
|
+
case name_or_relative_path
|
57
|
+
when Pathname
|
58
|
+
all.find { |t| t.relative_path == name_or_relative_path }
|
59
|
+
else
|
60
|
+
all.find { |t| t.name == name_or_relative_path }
|
61
|
+
end
|
57
62
|
end
|
58
63
|
|
59
64
|
def templates
|
data/lib/theme_check/version.rb
CHANGED
data/lib/theme_check/visitor.rb
CHANGED
@@ -3,14 +3,13 @@ module ThemeCheck
|
|
3
3
|
class Visitor
|
4
4
|
attr_reader :checks
|
5
5
|
|
6
|
-
def initialize(checks)
|
6
|
+
def initialize(checks, disabled_checks)
|
7
7
|
@checks = checks
|
8
|
+
@disabled_checks = disabled_checks
|
8
9
|
end
|
9
10
|
|
10
11
|
def visit_template(template)
|
11
|
-
@disabled_checks = DisabledChecks.new
|
12
12
|
visit(Node.new(template.root, nil, template))
|
13
|
-
remove_disabled_offenses
|
14
13
|
rescue Liquid::Error => exception
|
15
14
|
exception.template_name = template.name
|
16
15
|
call_checks(:on_error, exception)
|
@@ -35,13 +34,5 @@ module ThemeCheck
|
|
35
34
|
def call_checks(method, *args)
|
36
35
|
checks.call(method, *args)
|
37
36
|
end
|
38
|
-
|
39
|
-
def remove_disabled_offenses
|
40
|
-
checks.disableable.each do |check|
|
41
|
-
check.offenses.reject! do |offense|
|
42
|
-
@disabled_checks.disabled?(offense.code_name, offense.start_index)
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
46
37
|
end
|
47
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: theme-check
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marc-André Cournoyer
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-06-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liquid
|
@@ -72,9 +72,12 @@ files:
|
|
72
72
|
- docs/checks/CHECK_DOCS_TEMPLATE.md
|
73
73
|
- docs/checks/asset_size_css.md
|
74
74
|
- docs/checks/asset_size_javascript.md
|
75
|
+
- docs/checks/asset_url_filters.md
|
76
|
+
- docs/checks/content_for_header_modification.md
|
75
77
|
- docs/checks/convert_include_to_render.md
|
76
78
|
- docs/checks/default_locale.md
|
77
79
|
- docs/checks/deprecated_filter.md
|
80
|
+
- docs/checks/img_lazy_loading.md
|
78
81
|
- docs/checks/img_width_and_height.md
|
79
82
|
- docs/checks/liquid_tag.md
|
80
83
|
- docs/checks/matching_schema_translations.md
|
@@ -84,6 +87,7 @@ files:
|
|
84
87
|
- docs/checks/missing_template.md
|
85
88
|
- docs/checks/nested_snippet.md
|
86
89
|
- docs/checks/parser_blocking_javascript.md
|
90
|
+
- docs/checks/parser_blocking_script_tag.md
|
87
91
|
- docs/checks/remote_asset.md
|
88
92
|
- docs/checks/required_directories.md
|
89
93
|
- docs/checks/required_layout_theme_object.md
|
@@ -104,13 +108,17 @@ files:
|
|
104
108
|
- lib/theme_check.rb
|
105
109
|
- lib/theme_check/analyzer.rb
|
106
110
|
- lib/theme_check/asset_file.rb
|
111
|
+
- lib/theme_check/bug.rb
|
107
112
|
- lib/theme_check/check.rb
|
108
113
|
- lib/theme_check/checks.rb
|
109
114
|
- lib/theme_check/checks/asset_size_css.rb
|
110
115
|
- lib/theme_check/checks/asset_size_javascript.rb
|
116
|
+
- lib/theme_check/checks/asset_url_filters.rb
|
117
|
+
- lib/theme_check/checks/content_for_header_modification.rb
|
111
118
|
- lib/theme_check/checks/convert_include_to_render.rb
|
112
119
|
- lib/theme_check/checks/default_locale.rb
|
113
120
|
- lib/theme_check/checks/deprecated_filter.rb
|
121
|
+
- lib/theme_check/checks/img_lazy_loading.rb
|
114
122
|
- lib/theme_check/checks/img_width_and_height.rb
|
115
123
|
- lib/theme_check/checks/liquid_tag.rb
|
116
124
|
- lib/theme_check/checks/matching_schema_translations.rb
|
@@ -120,6 +128,7 @@ files:
|
|
120
128
|
- lib/theme_check/checks/missing_template.rb
|
121
129
|
- lib/theme_check/checks/nested_snippet.rb
|
122
130
|
- lib/theme_check/checks/parser_blocking_javascript.rb
|
131
|
+
- lib/theme_check/checks/parser_blocking_script_tag.rb
|
123
132
|
- lib/theme_check/checks/remote_asset.rb
|
124
133
|
- lib/theme_check/checks/required_directories.rb
|
125
134
|
- lib/theme_check/checks/required_layout_theme_object.rb
|
@@ -142,6 +151,9 @@ files:
|
|
142
151
|
- lib/theme_check/disabled_checks.rb
|
143
152
|
- lib/theme_check/exceptions.rb
|
144
153
|
- lib/theme_check/file_system_storage.rb
|
154
|
+
- lib/theme_check/html_check.rb
|
155
|
+
- lib/theme_check/html_node.rb
|
156
|
+
- lib/theme_check/html_visitor.rb
|
145
157
|
- lib/theme_check/in_memory_storage.rb
|
146
158
|
- lib/theme_check/json_check.rb
|
147
159
|
- lib/theme_check/json_file.rb
|
@@ -155,11 +167,13 @@ files:
|
|
155
167
|
- lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb
|
156
168
|
- lib/theme_check/language_server/completion_providers/tag_completion_provider.rb
|
157
169
|
- lib/theme_check/language_server/constants.rb
|
170
|
+
- lib/theme_check/language_server/diagnostics_tracker.rb
|
158
171
|
- lib/theme_check/language_server/document_link_engine.rb
|
159
172
|
- lib/theme_check/language_server/handler.rb
|
160
173
|
- lib/theme_check/language_server/protocol.rb
|
161
174
|
- lib/theme_check/language_server/server.rb
|
162
175
|
- lib/theme_check/language_server/tokens.rb
|
176
|
+
- lib/theme_check/language_server/variable_lookup_finder.rb
|
163
177
|
- lib/theme_check/liquid_check.rb
|
164
178
|
- lib/theme_check/locale_diff.rb
|
165
179
|
- lib/theme_check/node.rb
|
@@ -206,7 +220,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
206
220
|
- !ruby/object:Gem::Version
|
207
221
|
version: '0'
|
208
222
|
requirements: []
|
209
|
-
rubygems_version: 3.
|
223
|
+
rubygems_version: 3.2.17
|
210
224
|
signing_key:
|
211
225
|
specification_version: 4
|
212
226
|
summary: A Shopify Theme Linter
|