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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/theme-check.yml +3 -0
  3. data/CHANGELOG.md +39 -0
  4. data/CONTRIBUTING.md +2 -1
  5. data/README.md +4 -1
  6. data/RELEASING.md +5 -3
  7. data/config/default.yml +46 -1
  8. data/data/shopify_liquid/tags.yml +3 -0
  9. data/docs/checks/asset_url_filters.md +56 -0
  10. data/docs/checks/content_for_header_modification.md +42 -0
  11. data/docs/checks/img_lazy_loading.md +61 -0
  12. data/docs/checks/nested_snippet.md +1 -1
  13. data/docs/checks/parser_blocking_script_tag.md +53 -0
  14. data/docs/checks/space_inside_braces.md +22 -0
  15. data/exe/theme-check-language-server +1 -2
  16. data/lib/theme_check.rb +9 -1
  17. data/lib/theme_check/analyzer.rb +72 -16
  18. data/lib/theme_check/bug.rb +20 -0
  19. data/lib/theme_check/check.rb +31 -6
  20. data/lib/theme_check/checks.rb +49 -4
  21. data/lib/theme_check/checks/asset_url_filters.rb +46 -0
  22. data/lib/theme_check/checks/content_for_header_modification.rb +41 -0
  23. data/lib/theme_check/checks/img_lazy_loading.rb +25 -0
  24. data/lib/theme_check/checks/img_width_and_height.rb +18 -49
  25. data/lib/theme_check/checks/missing_template.rb +1 -0
  26. data/lib/theme_check/checks/nested_snippet.rb +1 -1
  27. data/lib/theme_check/checks/parser_blocking_javascript.rb +6 -38
  28. data/lib/theme_check/checks/parser_blocking_script_tag.rb +20 -0
  29. data/lib/theme_check/checks/remote_asset.rb +21 -79
  30. data/lib/theme_check/checks/space_inside_braces.rb +5 -5
  31. data/lib/theme_check/checks/template_length.rb +3 -0
  32. data/lib/theme_check/checks/valid_html_translation.rb +1 -0
  33. data/lib/theme_check/config.rb +2 -0
  34. data/lib/theme_check/disabled_check.rb +6 -4
  35. data/lib/theme_check/disabled_checks.rb +25 -9
  36. data/lib/theme_check/html_check.rb +7 -0
  37. data/lib/theme_check/html_node.rb +56 -0
  38. data/lib/theme_check/html_visitor.rb +38 -0
  39. data/lib/theme_check/json_file.rb +8 -0
  40. data/lib/theme_check/language_server.rb +2 -0
  41. data/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +1 -0
  42. data/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +10 -8
  43. data/lib/theme_check/language_server/diagnostics_tracker.rb +64 -0
  44. data/lib/theme_check/language_server/handler.rb +31 -26
  45. data/lib/theme_check/language_server/server.rb +1 -1
  46. data/lib/theme_check/language_server/variable_lookup_finder.rb +295 -0
  47. data/lib/theme_check/liquid_check.rb +1 -4
  48. data/lib/theme_check/offense.rb +18 -0
  49. data/lib/theme_check/shopify_liquid/tag.rb +13 -0
  50. data/lib/theme_check/template.rb +8 -0
  51. data/lib/theme_check/theme.rb +7 -2
  52. data/lib/theme_check/version.rb +1 -1
  53. data/lib/theme_check/visitor.rb +2 -11
  54. 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
@@ -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
@@ -32,6 +32,14 @@ module ThemeCheck
32
32
  relative_path.sub_ext('').to_s
33
33
  end
34
34
 
35
+ def json?
36
+ false
37
+ end
38
+
39
+ def liquid?
40
+ true
41
+ end
42
+
35
43
  def template?
36
44
  name.start_with?('templates')
37
45
  end
@@ -52,8 +52,13 @@ module ThemeCheck
52
52
  @all ||= json + liquid + assets
53
53
  end
54
54
 
55
- def [](name)
56
- all.find { |t| t.name == name }
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
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ThemeCheck
3
- VERSION = "0.8.1"
3
+ VERSION = "0.10.0"
4
4
  end
@@ -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.8.1
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-04-22 00:00:00.000000000 Z
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.0.3
223
+ rubygems_version: 3.2.17
210
224
  signing_key:
211
225
  specification_version: 4
212
226
  summary: A Shopify Theme Linter