theme-check 0.8.1 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
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