theme-check 0.3.1 → 0.6.0

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