theme-check 0.3.1 → 0.6.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 (96) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +13 -3
  3. data/CHANGELOG.md +61 -0
  4. data/CONTRIBUTING.md +5 -2
  5. data/Gemfile +5 -3
  6. data/README.md +11 -4
  7. data/RELEASING.md +2 -2
  8. data/config/default.yml +14 -0
  9. data/data/shopify_liquid/tags.yml +27 -0
  10. data/data/shopify_translation_keys.yml +850 -0
  11. data/docs/checks/CHECK_DOCS_TEMPLATE.md +47 -0
  12. data/docs/checks/asset_size_css.md +52 -0
  13. data/docs/checks/asset_size_javascript.md +79 -0
  14. data/docs/checks/convert_include_to_render.md +48 -0
  15. data/docs/checks/default_locale.md +46 -0
  16. data/docs/checks/deprecated_filter.md +46 -0
  17. data/docs/checks/img_width_and_height.md +79 -0
  18. data/docs/checks/liquid_tag.md +65 -0
  19. data/docs/checks/matching_schema_translations.md +93 -0
  20. data/docs/checks/matching_translations.md +72 -0
  21. data/docs/checks/missing_enable_comment.md +50 -0
  22. data/docs/checks/missing_required_template_files.md +26 -0
  23. data/docs/checks/missing_template.md +40 -0
  24. data/docs/checks/nested_snippet.md +69 -0
  25. data/docs/checks/parser_blocking_javascript.md +97 -0
  26. data/docs/checks/required_directories.md +25 -0
  27. data/docs/checks/required_layout_theme_object.md +28 -0
  28. data/docs/checks/space_inside_braces.md +63 -0
  29. data/docs/checks/syntax_error.md +49 -0
  30. data/docs/checks/template_length.md +50 -0
  31. data/docs/checks/translation_key_exists.md +63 -0
  32. data/docs/checks/undefined_object.md +53 -0
  33. data/docs/checks/unknown_filter.md +45 -0
  34. data/docs/checks/unused_assign.md +47 -0
  35. data/docs/checks/unused_snippet.md +32 -0
  36. data/docs/checks/valid_html_translation.md +53 -0
  37. data/docs/checks/valid_json.md +60 -0
  38. data/docs/checks/valid_schema.md +50 -0
  39. data/lib/theme_check.rb +3 -0
  40. data/lib/theme_check/asset_file.rb +34 -0
  41. data/lib/theme_check/check.rb +19 -9
  42. data/lib/theme_check/checks/asset_size_css.rb +89 -0
  43. data/lib/theme_check/checks/asset_size_javascript.rb +68 -0
  44. data/lib/theme_check/checks/convert_include_to_render.rb +1 -1
  45. data/lib/theme_check/checks/default_locale.rb +1 -0
  46. data/lib/theme_check/checks/deprecated_filter.rb +1 -1
  47. data/lib/theme_check/checks/img_width_and_height.rb +74 -0
  48. data/lib/theme_check/checks/liquid_tag.rb +3 -3
  49. data/lib/theme_check/checks/matching_schema_translations.rb +1 -0
  50. data/lib/theme_check/checks/matching_translations.rb +1 -0
  51. data/lib/theme_check/checks/missing_enable_comment.rb +1 -0
  52. data/lib/theme_check/checks/missing_required_template_files.rb +1 -2
  53. data/lib/theme_check/checks/missing_template.rb +1 -0
  54. data/lib/theme_check/checks/nested_snippet.rb +1 -0
  55. data/lib/theme_check/checks/parser_blocking_javascript.rb +7 -14
  56. data/lib/theme_check/checks/required_directories.rb +1 -1
  57. data/lib/theme_check/checks/required_layout_theme_object.rb +1 -1
  58. data/lib/theme_check/checks/space_inside_braces.rb +1 -0
  59. data/lib/theme_check/checks/syntax_error.rb +1 -0
  60. data/lib/theme_check/checks/template_length.rb +1 -0
  61. data/lib/theme_check/checks/translation_key_exists.rb +17 -1
  62. data/lib/theme_check/checks/undefined_object.rb +29 -10
  63. data/lib/theme_check/checks/unknown_filter.rb +1 -0
  64. data/lib/theme_check/checks/unused_assign.rb +5 -3
  65. data/lib/theme_check/checks/unused_snippet.rb +1 -0
  66. data/lib/theme_check/checks/valid_html_translation.rb +1 -0
  67. data/lib/theme_check/checks/valid_json.rb +1 -0
  68. data/lib/theme_check/checks/valid_schema.rb +1 -0
  69. data/lib/theme_check/cli.rb +39 -12
  70. data/lib/theme_check/config.rb +5 -2
  71. data/lib/theme_check/in_memory_storage.rb +11 -3
  72. data/lib/theme_check/language_server.rb +12 -0
  73. data/lib/theme_check/language_server/completion_engine.rb +38 -0
  74. data/lib/theme_check/language_server/completion_helper.rb +25 -0
  75. data/lib/theme_check/language_server/completion_provider.rb +28 -0
  76. data/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +51 -0
  77. data/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +31 -0
  78. data/lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb +43 -0
  79. data/lib/theme_check/language_server/completion_providers/tag_completion_provider.rb +31 -0
  80. data/lib/theme_check/language_server/constants.rb +10 -0
  81. data/lib/theme_check/language_server/document_link_engine.rb +47 -0
  82. data/lib/theme_check/language_server/handler.rb +93 -6
  83. data/lib/theme_check/language_server/position_helper.rb +27 -0
  84. data/lib/theme_check/language_server/protocol.rb +41 -0
  85. data/lib/theme_check/language_server/server.rb +8 -2
  86. data/lib/theme_check/language_server/tokens.rb +55 -0
  87. data/lib/theme_check/liquid_check.rb +11 -0
  88. data/lib/theme_check/offense.rb +51 -14
  89. data/lib/theme_check/regex_helpers.rb +15 -0
  90. data/lib/theme_check/remote_asset_file.rb +44 -0
  91. data/lib/theme_check/shopify_liquid.rb +1 -0
  92. data/lib/theme_check/shopify_liquid/deprecated_filter.rb +4 -0
  93. data/lib/theme_check/shopify_liquid/tag.rb +16 -0
  94. data/lib/theme_check/theme.rb +7 -1
  95. data/lib/theme_check/version.rb +1 -1
  96. metadata +52 -2
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThemeCheck
4
+ module RegexHelpers
5
+ def matches(s, re)
6
+ start_at = 0
7
+ matches = []
8
+ while (m = s.match(re, start_at))
9
+ matches.push(m)
10
+ start_at = m.end(0)
11
+ end
12
+ matches
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+ require "net/http"
3
+ require "pathname"
4
+
5
+ module ThemeCheck
6
+ class RemoteAssetFile
7
+ class << self
8
+ def cache
9
+ @cache ||= {}
10
+ end
11
+
12
+ def from_src(src)
13
+ key = uri(src).to_s
14
+ cache[key] = RemoteAssetFile.new(src) unless cache.key?(key)
15
+ cache[key]
16
+ end
17
+
18
+ def uri(src)
19
+ URI.parse(src.sub(%r{^//}, "https://"))
20
+ end
21
+ end
22
+
23
+ def initialize(src)
24
+ @uri = RemoteAssetFile.uri(src)
25
+ @content = nil
26
+ end
27
+
28
+ def content
29
+ return @content unless @content.nil?
30
+
31
+ res = Net::HTTP.start(@uri.hostname, @uri.port, use_ssl: @uri.scheme == 'https') do |http|
32
+ req = Net::HTTP::Get.new(@uri)
33
+ req['Accept-Encoding'] = 'gzip, deflate, br'
34
+ http.request(req)
35
+ end
36
+
37
+ @content = res.body
38
+ end
39
+
40
+ def gzipped_size
41
+ @gzipped_size ||= content.bytesize
42
+ end
43
+ end
44
+ end
@@ -2,3 +2,4 @@
2
2
  require_relative 'shopify_liquid/deprecated_filter'
3
3
  require_relative 'shopify_liquid/filter'
4
4
  require_relative 'shopify_liquid/object'
5
+ require_relative 'shopify_liquid/tag'
@@ -10,6 +10,10 @@ module ThemeCheck
10
10
  all.fetch(filter, nil)
11
11
  end
12
12
 
13
+ def labels
14
+ @labels ||= all.keys
15
+ end
16
+
13
17
  private
14
18
 
15
19
  def all
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'yaml'
3
+
4
+ module ThemeCheck
5
+ module ShopifyLiquid
6
+ module Tag
7
+ extend self
8
+
9
+ def labels
10
+ @tags ||= begin
11
+ YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/tags.yml"))
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
@@ -11,6 +11,12 @@ module ThemeCheck
11
11
  @storage = storage
12
12
  end
13
13
 
14
+ def assets
15
+ @assets ||= @storage.files
16
+ .select { |path| path.starts_with?("assets/") }
17
+ .map { |path| AssetFile.new(path, @storage) }
18
+ end
19
+
14
20
  def liquid
15
21
  @liquid ||= @storage.files
16
22
  .select { |path| LIQUID_REGEX.match?(path) }
@@ -43,7 +49,7 @@ module ThemeCheck
43
49
  end
44
50
 
45
51
  def all
46
- @all ||= json + liquid
52
+ @all ||= json + liquid + assets
47
53
  end
48
54
 
49
55
  def [](name)
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ThemeCheck
3
- VERSION = "0.3.1"
3
+ VERSION = "0.6.0"
4
4
  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.3.1
4
+ version: 0.6.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-02-16 00:00:00.000000000 Z
11
+ date: 2021-03-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -65,6 +65,7 @@ files:
65
65
  - ".github/workflows/theme-check.yml"
66
66
  - ".gitignore"
67
67
  - ".rubocop.yml"
68
+ - CHANGELOG.md
68
69
  - CODE_OF_CONDUCT.md
69
70
  - CONTRIBUTING.md
70
71
  - Gemfile
@@ -79,17 +80,51 @@ files:
79
80
  - data/shopify_liquid/filters.yml
80
81
  - data/shopify_liquid/objects.yml
81
82
  - data/shopify_liquid/plus_objects.yml
83
+ - data/shopify_liquid/tags.yml
84
+ - data/shopify_translation_keys.yml
82
85
  - dev.yml
86
+ - docs/checks/CHECK_DOCS_TEMPLATE.md
87
+ - docs/checks/asset_size_css.md
88
+ - docs/checks/asset_size_javascript.md
89
+ - docs/checks/convert_include_to_render.md
90
+ - docs/checks/default_locale.md
91
+ - docs/checks/deprecated_filter.md
92
+ - docs/checks/img_width_and_height.md
93
+ - docs/checks/liquid_tag.md
94
+ - docs/checks/matching_schema_translations.md
95
+ - docs/checks/matching_translations.md
96
+ - docs/checks/missing_enable_comment.md
97
+ - docs/checks/missing_required_template_files.md
98
+ - docs/checks/missing_template.md
99
+ - docs/checks/nested_snippet.md
100
+ - docs/checks/parser_blocking_javascript.md
101
+ - docs/checks/required_directories.md
102
+ - docs/checks/required_layout_theme_object.md
103
+ - docs/checks/space_inside_braces.md
104
+ - docs/checks/syntax_error.md
105
+ - docs/checks/template_length.md
106
+ - docs/checks/translation_key_exists.md
107
+ - docs/checks/undefined_object.md
108
+ - docs/checks/unknown_filter.md
109
+ - docs/checks/unused_assign.md
110
+ - docs/checks/unused_snippet.md
111
+ - docs/checks/valid_html_translation.md
112
+ - docs/checks/valid_json.md
113
+ - docs/checks/valid_schema.md
83
114
  - docs/preview.png
84
115
  - exe/theme-check
85
116
  - exe/theme-check-language-server
86
117
  - lib/theme_check.rb
87
118
  - lib/theme_check/analyzer.rb
119
+ - lib/theme_check/asset_file.rb
88
120
  - lib/theme_check/check.rb
89
121
  - lib/theme_check/checks.rb
122
+ - lib/theme_check/checks/asset_size_css.rb
123
+ - lib/theme_check/checks/asset_size_javascript.rb
90
124
  - lib/theme_check/checks/convert_include_to_render.rb
91
125
  - lib/theme_check/checks/default_locale.rb
92
126
  - lib/theme_check/checks/deprecated_filter.rb
127
+ - lib/theme_check/checks/img_width_and_height.rb
93
128
  - lib/theme_check/checks/liquid_tag.rb
94
129
  - lib/theme_check/checks/matching_schema_translations.rb
95
130
  - lib/theme_check/checks/matching_translations.rb
@@ -122,8 +157,20 @@ files:
122
157
  - lib/theme_check/json_file.rb
123
158
  - lib/theme_check/json_helpers.rb
124
159
  - lib/theme_check/language_server.rb
160
+ - lib/theme_check/language_server/completion_engine.rb
161
+ - lib/theme_check/language_server/completion_helper.rb
162
+ - lib/theme_check/language_server/completion_provider.rb
163
+ - lib/theme_check/language_server/completion_providers/filter_completion_provider.rb
164
+ - lib/theme_check/language_server/completion_providers/object_completion_provider.rb
165
+ - lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb
166
+ - lib/theme_check/language_server/completion_providers/tag_completion_provider.rb
167
+ - lib/theme_check/language_server/constants.rb
168
+ - lib/theme_check/language_server/document_link_engine.rb
125
169
  - lib/theme_check/language_server/handler.rb
170
+ - lib/theme_check/language_server/position_helper.rb
171
+ - lib/theme_check/language_server/protocol.rb
126
172
  - lib/theme_check/language_server/server.rb
173
+ - lib/theme_check/language_server/tokens.rb
127
174
  - lib/theme_check/liquid_check.rb
128
175
  - lib/theme_check/locale_diff.rb
129
176
  - lib/theme_check/node.rb
@@ -131,10 +178,13 @@ files:
131
178
  - lib/theme_check/packager.rb
132
179
  - lib/theme_check/parsing_helpers.rb
133
180
  - lib/theme_check/printer.rb
181
+ - lib/theme_check/regex_helpers.rb
182
+ - lib/theme_check/remote_asset_file.rb
134
183
  - lib/theme_check/shopify_liquid.rb
135
184
  - lib/theme_check/shopify_liquid/deprecated_filter.rb
136
185
  - lib/theme_check/shopify_liquid/filter.rb
137
186
  - lib/theme_check/shopify_liquid/object.rb
187
+ - lib/theme_check/shopify_liquid/tag.rb
138
188
  - lib/theme_check/storage.rb
139
189
  - lib/theme_check/tags.rb
140
190
  - lib/theme_check/template.rb