theme-check 1.6.0 → 1.7.1
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/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 +4 -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 +97 -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.1
|
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
|