theme-check 1.6.1 → 1.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +27 -0
- data/data/shopify_liquid/tags.yml +9 -9
- data/docs/api/html_check.md +7 -7
- data/docs/api/liquid_check.md +10 -10
- data/docs/checks/convert_include_to_render.md +1 -1
- data/docs/checks/missing_enable_comment.md +1 -1
- data/lib/theme_check/analyzer.rb +41 -17
- data/lib/theme_check/asset_file.rb +1 -1
- data/lib/theme_check/check.rb +2 -2
- data/lib/theme_check/checks/html_parsing_error.rb +2 -2
- data/lib/theme_check/checks/matching_translations.rb +1 -1
- data/lib/theme_check/checks/missing_template.rb +6 -6
- data/lib/theme_check/checks/nested_snippet.rb +2 -2
- data/lib/theme_check/checks/required_layout_theme_object.rb +2 -2
- data/lib/theme_check/checks/syntax_error.rb +5 -5
- data/lib/theme_check/checks/template_length.rb +2 -2
- data/lib/theme_check/checks/translation_key_exists.rb +1 -13
- data/lib/theme_check/checks/undefined_object.rb +7 -7
- data/lib/theme_check/checks/unused_assign.rb +4 -4
- data/lib/theme_check/checks/unused_snippet.rb +7 -7
- data/lib/theme_check/checks/valid_json.rb +1 -1
- data/lib/theme_check/checks.rb +2 -2
- data/lib/theme_check/cli.rb +1 -1
- data/lib/theme_check/corrector.rb +6 -6
- data/lib/theme_check/disabled_check.rb +3 -3
- data/lib/theme_check/disabled_checks.rb +9 -9
- data/lib/theme_check/exceptions.rb +1 -0
- data/lib/theme_check/file_system_storage.rb +4 -0
- data/lib/theme_check/html_node.rb +36 -28
- data/lib/theme_check/html_visitor.rb +6 -6
- data/lib/theme_check/in_memory_storage.rb +1 -1
- data/lib/theme_check/json_check.rb +2 -2
- data/lib/theme_check/language_server/bridge.rb +128 -0
- data/lib/theme_check/language_server/channel.rb +69 -0
- data/lib/theme_check/language_server/completion_providers/tag_completion_provider.rb +3 -1
- data/lib/theme_check/language_server/diagnostics_engine.rb +125 -0
- data/lib/theme_check/language_server/diagnostics_tracker.rb +8 -8
- data/lib/theme_check/language_server/handler.rb +20 -117
- data/lib/theme_check/language_server/io_messenger.rb +102 -0
- data/lib/theme_check/language_server/messenger.rb +27 -0
- data/lib/theme_check/language_server/server.rb +95 -104
- data/lib/theme_check/language_server.rb +6 -1
- data/lib/theme_check/{template.rb → liquid_file.rb} +2 -2
- data/lib/theme_check/liquid_node.rb +291 -0
- data/lib/theme_check/{visitor.rb → liquid_visitor.rb} +4 -4
- data/lib/theme_check/locale_diff.rb +14 -7
- data/lib/theme_check/node.rb +12 -225
- data/lib/theme_check/offense.rb +15 -15
- data/lib/theme_check/position.rb +1 -1
- data/lib/theme_check/shopify_liquid/system_translations.rb +35 -0
- data/lib/theme_check/shopify_liquid/tag.rb +19 -1
- data/lib/theme_check/shopify_liquid.rb +1 -0
- data/lib/theme_check/theme.rb +1 -1
- data/lib/theme_check/{template_rewriter.rb → theme_file_rewriter.rb} +1 -1
- data/lib/theme_check/version.rb +1 -1
- data/lib/theme_check.rb +11 -10
- data/theme-check.gemspec +1 -1
- metadata +14 -7
data/lib/theme_check/offense.rb
CHANGED
@@ -5,13 +5,13 @@ module ThemeCheck
|
|
5
5
|
|
6
6
|
MAX_SOURCE_EXCERPT_SIZE = 120
|
7
7
|
|
8
|
-
attr_reader :check, :message, :
|
8
|
+
attr_reader :check, :message, :theme_file, :node, :markup, :line_number, :correction
|
9
9
|
|
10
10
|
def initialize(
|
11
11
|
check:, # instance of a ThemeCheck::Check
|
12
12
|
message: nil, # error message for the offense
|
13
|
-
|
14
|
-
node: nil, # Node
|
13
|
+
theme_file: nil, # ThemeFile
|
14
|
+
node: nil, # Node
|
15
15
|
markup: nil, # string
|
16
16
|
line_number: nil, # line number of the error (1-indexed)
|
17
17
|
# node_markup_offset is the index inside node.markup to start
|
@@ -39,11 +39,11 @@ module ThemeCheck
|
|
39
39
|
end
|
40
40
|
|
41
41
|
@node = node
|
42
|
-
@
|
42
|
+
@theme_file = nil
|
43
43
|
if node
|
44
|
-
@
|
45
|
-
elsif
|
46
|
-
@
|
44
|
+
@theme_file = node.theme_file
|
45
|
+
elsif theme_file
|
46
|
+
@theme_file = theme_file
|
47
47
|
end
|
48
48
|
|
49
49
|
@markup = if markup
|
@@ -62,7 +62,7 @@ module ThemeCheck
|
|
62
62
|
|
63
63
|
@position = Position.new(
|
64
64
|
@markup,
|
65
|
-
@
|
65
|
+
@theme_file&.source,
|
66
66
|
line_number_1_indexed: @line_number,
|
67
67
|
node_markup_offset: node_markup_offset,
|
68
68
|
node_markup: node&.markup
|
@@ -72,7 +72,7 @@ module ThemeCheck
|
|
72
72
|
def source_excerpt
|
73
73
|
return unless line_number
|
74
74
|
@source_excerpt ||= begin
|
75
|
-
excerpt =
|
75
|
+
excerpt = theme_file.source_excerpt(line_number)
|
76
76
|
if excerpt.size > MAX_SOURCE_EXCERPT_SIZE
|
77
77
|
excerpt[0, MAX_SOURCE_EXCERPT_SIZE - 3] + '...'
|
78
78
|
else
|
@@ -126,12 +126,12 @@ module ThemeCheck
|
|
126
126
|
end
|
127
127
|
|
128
128
|
def location
|
129
|
-
tokens = [
|
129
|
+
tokens = [theme_file&.relative_path, line_number].compact
|
130
130
|
tokens.join(":") if tokens.any?
|
131
131
|
end
|
132
132
|
|
133
133
|
def location_range
|
134
|
-
tokens = [
|
134
|
+
tokens = [theme_file&.relative_path, start_index, end_index].compact
|
135
135
|
tokens.join(":") if tokens.any?
|
136
136
|
end
|
137
137
|
|
@@ -141,7 +141,7 @@ module ThemeCheck
|
|
141
141
|
|
142
142
|
def correct
|
143
143
|
if correctable?
|
144
|
-
corrector = Corrector.new(
|
144
|
+
corrector = Corrector.new(theme_file: theme_file)
|
145
145
|
correction.call(corrector)
|
146
146
|
end
|
147
147
|
rescue => e
|
@@ -191,7 +191,7 @@ module ThemeCheck
|
|
191
191
|
alias_method :eql?, :==
|
192
192
|
|
193
193
|
def to_s
|
194
|
-
if
|
194
|
+
if theme_file
|
195
195
|
"#{message} at #{location}"
|
196
196
|
else
|
197
197
|
message
|
@@ -199,7 +199,7 @@ module ThemeCheck
|
|
199
199
|
end
|
200
200
|
|
201
201
|
def to_s_range
|
202
|
-
if
|
202
|
+
if theme_file
|
203
203
|
"#{message} at #{location_range}"
|
204
204
|
else
|
205
205
|
message
|
@@ -209,7 +209,7 @@ module ThemeCheck
|
|
209
209
|
def to_h
|
210
210
|
{
|
211
211
|
check: check.code_name,
|
212
|
-
path:
|
212
|
+
path: theme_file&.relative_path,
|
213
213
|
severity: check.severity_value,
|
214
214
|
start_line: start_line,
|
215
215
|
start_column: start_column,
|
data/lib/theme_check/position.rb
CHANGED
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
module ThemeCheck
|
3
|
+
module ShopifyLiquid
|
4
|
+
module SystemTranslations
|
5
|
+
extend self
|
6
|
+
|
7
|
+
def translations
|
8
|
+
@translations ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_translation_keys.yml")).to_set
|
9
|
+
end
|
10
|
+
|
11
|
+
def translations_hash
|
12
|
+
@translations_hash ||= translations.reduce({}) do |acc, k|
|
13
|
+
dig_set(acc, k.split('.'), "")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def include?(key)
|
18
|
+
translations.include?(key)
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def dig_set(obj, keys, value)
|
24
|
+
key = keys.first
|
25
|
+
if keys.length == 1
|
26
|
+
obj[key] = value
|
27
|
+
else
|
28
|
+
obj[key] = {} unless obj[key]
|
29
|
+
dig_set(obj[key], keys.slice(1..-1), value)
|
30
|
+
end
|
31
|
+
obj
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -7,10 +7,17 @@ module ThemeCheck
|
|
7
7
|
extend self
|
8
8
|
|
9
9
|
def labels
|
10
|
-
@
|
10
|
+
@labels ||= tags_file_contents
|
11
|
+
.map { |x| to_label(x) }
|
11
12
|
.to_set
|
12
13
|
end
|
13
14
|
|
15
|
+
def end_labels
|
16
|
+
@end_labels ||= tags_file_contents
|
17
|
+
.select { |x| x.is_a?(Hash) }
|
18
|
+
.map { |x| x.values[0] }
|
19
|
+
end
|
20
|
+
|
14
21
|
def tag_regex(tag)
|
15
22
|
return unless labels.include?(tag)
|
16
23
|
@tag_regexes ||= {}
|
@@ -22,6 +29,17 @@ module ThemeCheck
|
|
22
29
|
@tag_liquid_regexes ||= {}
|
23
30
|
@tag_liquid_regexes[tag] ||= /^\s*#{tag}/m
|
24
31
|
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def to_label(label)
|
36
|
+
return label if label.is_a?(String)
|
37
|
+
label.keys[0]
|
38
|
+
end
|
39
|
+
|
40
|
+
def tags_file_contents
|
41
|
+
@tags_file_contents ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/tags.yml"))
|
42
|
+
end
|
25
43
|
end
|
26
44
|
end
|
27
45
|
end
|
data/lib/theme_check/theme.rb
CHANGED
data/lib/theme_check/version.rb
CHANGED
data/lib/theme_check.rb
CHANGED
@@ -4,20 +4,23 @@ require "liquid"
|
|
4
4
|
require_relative "theme_check/version"
|
5
5
|
require_relative "theme_check/bug"
|
6
6
|
require_relative "theme_check/exceptions"
|
7
|
+
require_relative "theme_check/theme_file_rewriter"
|
7
8
|
require_relative "theme_check/theme_file"
|
9
|
+
require_relative "theme_check/liquid_file"
|
10
|
+
require_relative "theme_check/asset_file"
|
11
|
+
require_relative "theme_check/json_file"
|
8
12
|
require_relative "theme_check/analyzer"
|
9
13
|
require_relative "theme_check/check"
|
10
14
|
require_relative "theme_check/checks_tracking"
|
15
|
+
require_relative "theme_check/liquid_check"
|
16
|
+
require_relative "theme_check/html_check"
|
17
|
+
require_relative "theme_check/json_check"
|
11
18
|
require_relative "theme_check/cli"
|
12
19
|
require_relative "theme_check/disabled_check"
|
13
20
|
require_relative "theme_check/disabled_checks"
|
14
|
-
require_relative "theme_check/liquid_check"
|
15
21
|
require_relative "theme_check/locale_diff"
|
16
|
-
require_relative "theme_check/asset_file"
|
17
22
|
require_relative "theme_check/remote_asset_file"
|
18
23
|
require_relative "theme_check/regex_helpers"
|
19
|
-
require_relative "theme_check/json_check"
|
20
|
-
require_relative "theme_check/json_file"
|
21
24
|
require_relative "theme_check/json_helpers"
|
22
25
|
require_relative "theme_check/position_helper"
|
23
26
|
require_relative "theme_check/position"
|
@@ -25,23 +28,21 @@ require_relative "theme_check/language_server"
|
|
25
28
|
require_relative "theme_check/checks"
|
26
29
|
require_relative "theme_check/config"
|
27
30
|
require_relative "theme_check/node"
|
31
|
+
require_relative "theme_check/liquid_node"
|
32
|
+
require_relative "theme_check/html_node"
|
28
33
|
require_relative "theme_check/offense"
|
29
34
|
require_relative "theme_check/printer"
|
30
35
|
require_relative "theme_check/json_printer"
|
31
36
|
require_relative "theme_check/shopify_liquid"
|
32
|
-
require_relative "theme_check/storage"
|
33
37
|
require_relative "theme_check/string_helpers"
|
38
|
+
require_relative "theme_check/storage"
|
34
39
|
require_relative "theme_check/file_system_storage"
|
35
40
|
require_relative "theme_check/in_memory_storage"
|
36
41
|
require_relative "theme_check/tags"
|
37
|
-
require_relative "theme_check/template_rewriter"
|
38
|
-
require_relative "theme_check/template"
|
39
42
|
require_relative "theme_check/theme"
|
40
|
-
require_relative "theme_check/visitor"
|
41
43
|
require_relative "theme_check/corrector"
|
42
|
-
require_relative "theme_check/
|
44
|
+
require_relative "theme_check/liquid_visitor"
|
43
45
|
require_relative "theme_check/html_visitor"
|
44
|
-
require_relative "theme_check/html_check"
|
45
46
|
|
46
47
|
Dir[__dir__ + "/theme_check/checks/*.rb"].each { |file| require file }
|
47
48
|
|
data/theme-check.gemspec
CHANGED
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
25
25
|
spec.require_paths = ["lib"]
|
26
26
|
|
27
|
-
spec.add_dependency('liquid', '>= 5.0
|
27
|
+
spec.add_dependency('liquid', '>= 5.1.0')
|
28
28
|
spec.add_dependency('nokogiri', '>= 1.12')
|
29
29
|
spec.add_dependency('parser', '~> 3')
|
30
30
|
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: 1.
|
4
|
+
version: 1.7.2
|
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-09-
|
11
|
+
date: 2021-09-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: liquid
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.0
|
19
|
+
version: 5.1.0
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.0
|
26
|
+
version: 5.1.0
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: nokogiri
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -201,6 +201,8 @@ files:
|
|
201
201
|
- lib/theme_check/json_helpers.rb
|
202
202
|
- lib/theme_check/json_printer.rb
|
203
203
|
- lib/theme_check/language_server.rb
|
204
|
+
- lib/theme_check/language_server/bridge.rb
|
205
|
+
- lib/theme_check/language_server/channel.rb
|
204
206
|
- lib/theme_check/language_server/completion_engine.rb
|
205
207
|
- lib/theme_check/language_server/completion_helper.rb
|
206
208
|
- lib/theme_check/language_server/completion_provider.rb
|
@@ -209,6 +211,7 @@ files:
|
|
209
211
|
- lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb
|
210
212
|
- lib/theme_check/language_server/completion_providers/tag_completion_provider.rb
|
211
213
|
- lib/theme_check/language_server/constants.rb
|
214
|
+
- lib/theme_check/language_server/diagnostics_engine.rb
|
212
215
|
- lib/theme_check/language_server/diagnostics_tracker.rb
|
213
216
|
- lib/theme_check/language_server/document_link_engine.rb
|
214
217
|
- lib/theme_check/language_server/document_link_provider.rb
|
@@ -217,12 +220,17 @@ files:
|
|
217
220
|
- lib/theme_check/language_server/document_link_providers/render_document_link_provider.rb
|
218
221
|
- lib/theme_check/language_server/document_link_providers/section_document_link_provider.rb
|
219
222
|
- lib/theme_check/language_server/handler.rb
|
223
|
+
- lib/theme_check/language_server/io_messenger.rb
|
224
|
+
- lib/theme_check/language_server/messenger.rb
|
220
225
|
- lib/theme_check/language_server/protocol.rb
|
221
226
|
- lib/theme_check/language_server/server.rb
|
222
227
|
- lib/theme_check/language_server/tokens.rb
|
223
228
|
- lib/theme_check/language_server/uri_helper.rb
|
224
229
|
- lib/theme_check/language_server/variable_lookup_finder.rb
|
225
230
|
- lib/theme_check/liquid_check.rb
|
231
|
+
- lib/theme_check/liquid_file.rb
|
232
|
+
- lib/theme_check/liquid_node.rb
|
233
|
+
- lib/theme_check/liquid_visitor.rb
|
226
234
|
- lib/theme_check/locale_diff.rb
|
227
235
|
- lib/theme_check/node.rb
|
228
236
|
- lib/theme_check/offense.rb
|
@@ -238,16 +246,15 @@ files:
|
|
238
246
|
- lib/theme_check/shopify_liquid/deprecated_filter.rb
|
239
247
|
- lib/theme_check/shopify_liquid/filter.rb
|
240
248
|
- lib/theme_check/shopify_liquid/object.rb
|
249
|
+
- lib/theme_check/shopify_liquid/system_translations.rb
|
241
250
|
- lib/theme_check/shopify_liquid/tag.rb
|
242
251
|
- lib/theme_check/storage.rb
|
243
252
|
- lib/theme_check/string_helpers.rb
|
244
253
|
- lib/theme_check/tags.rb
|
245
|
-
- lib/theme_check/template.rb
|
246
|
-
- lib/theme_check/template_rewriter.rb
|
247
254
|
- lib/theme_check/theme.rb
|
248
255
|
- lib/theme_check/theme_file.rb
|
256
|
+
- lib/theme_check/theme_file_rewriter.rb
|
249
257
|
- lib/theme_check/version.rb
|
250
|
-
- lib/theme_check/visitor.rb
|
251
258
|
- packaging/homebrew/theme_check.base.rb
|
252
259
|
- theme-check.gemspec
|
253
260
|
homepage: https://github.com/Shopify/theme-check
|