theme-check 0.3.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (110) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/theme-check.yml +10 -3
  3. data/.rubocop.yml +12 -3
  4. data/CHANGELOG.md +42 -0
  5. data/CONTRIBUTING.md +5 -2
  6. data/Gemfile +5 -3
  7. data/LICENSE.md +2 -0
  8. data/README.md +12 -4
  9. data/RELEASING.md +10 -3
  10. data/Rakefile +6 -0
  11. data/config/default.yml +16 -0
  12. data/data/shopify_liquid/tags.yml +27 -0
  13. data/data/shopify_translation_keys.yml +850 -0
  14. data/docs/checks/CHECK_DOCS_TEMPLATE.md +47 -0
  15. data/docs/checks/asset_size_css.md +52 -0
  16. data/docs/checks/asset_size_javascript.md +79 -0
  17. data/docs/checks/convert_include_to_render.md +48 -0
  18. data/docs/checks/default_locale.md +46 -0
  19. data/docs/checks/deprecated_filter.md +46 -0
  20. data/docs/checks/img_width_and_height.md +79 -0
  21. data/docs/checks/liquid_tag.md +65 -0
  22. data/docs/checks/matching_schema_translations.md +93 -0
  23. data/docs/checks/matching_translations.md +72 -0
  24. data/docs/checks/missing_enable_comment.md +50 -0
  25. data/docs/checks/missing_required_template_files.md +26 -0
  26. data/docs/checks/missing_template.md +40 -0
  27. data/docs/checks/nested_snippet.md +69 -0
  28. data/docs/checks/parser_blocking_javascript.md +97 -0
  29. data/docs/checks/remote_asset.md +82 -0
  30. data/docs/checks/required_directories.md +25 -0
  31. data/docs/checks/required_layout_theme_object.md +28 -0
  32. data/docs/checks/space_inside_braces.md +63 -0
  33. data/docs/checks/syntax_error.md +49 -0
  34. data/docs/checks/template_length.md +50 -0
  35. data/docs/checks/translation_key_exists.md +63 -0
  36. data/docs/checks/undefined_object.md +53 -0
  37. data/docs/checks/unknown_filter.md +45 -0
  38. data/docs/checks/unused_assign.md +47 -0
  39. data/docs/checks/unused_snippet.md +32 -0
  40. data/docs/checks/valid_html_translation.md +53 -0
  41. data/docs/checks/valid_json.md +60 -0
  42. data/docs/checks/valid_schema.md +50 -0
  43. data/lib/theme_check.rb +4 -0
  44. data/lib/theme_check/asset_file.rb +34 -0
  45. data/lib/theme_check/check.rb +20 -10
  46. data/lib/theme_check/checks/asset_size_css.rb +89 -0
  47. data/lib/theme_check/checks/asset_size_javascript.rb +68 -0
  48. data/lib/theme_check/checks/convert_include_to_render.rb +1 -1
  49. data/lib/theme_check/checks/default_locale.rb +1 -0
  50. data/lib/theme_check/checks/deprecated_filter.rb +1 -1
  51. data/lib/theme_check/checks/img_width_and_height.rb +74 -0
  52. data/lib/theme_check/checks/liquid_tag.rb +3 -3
  53. data/lib/theme_check/checks/matching_schema_translations.rb +1 -0
  54. data/lib/theme_check/checks/matching_translations.rb +2 -1
  55. data/lib/theme_check/checks/missing_enable_comment.rb +1 -0
  56. data/lib/theme_check/checks/missing_required_template_files.rb +1 -2
  57. data/lib/theme_check/checks/missing_template.rb +1 -0
  58. data/lib/theme_check/checks/nested_snippet.rb +1 -0
  59. data/lib/theme_check/checks/parser_blocking_javascript.rb +8 -15
  60. data/lib/theme_check/checks/remote_asset.rb +98 -0
  61. data/lib/theme_check/checks/required_directories.rb +1 -1
  62. data/lib/theme_check/checks/required_layout_theme_object.rb +1 -1
  63. data/lib/theme_check/checks/space_inside_braces.rb +1 -0
  64. data/lib/theme_check/checks/syntax_error.rb +1 -0
  65. data/lib/theme_check/checks/template_length.rb +1 -0
  66. data/lib/theme_check/checks/translation_key_exists.rb +14 -1
  67. data/lib/theme_check/checks/undefined_object.rb +16 -7
  68. data/lib/theme_check/checks/unknown_filter.rb +1 -0
  69. data/lib/theme_check/checks/unused_assign.rb +5 -3
  70. data/lib/theme_check/checks/unused_snippet.rb +1 -0
  71. data/lib/theme_check/checks/valid_html_translation.rb +2 -1
  72. data/lib/theme_check/checks/valid_json.rb +1 -0
  73. data/lib/theme_check/checks/valid_schema.rb +1 -0
  74. data/lib/theme_check/cli.rb +49 -13
  75. data/lib/theme_check/config.rb +5 -2
  76. data/lib/theme_check/disabled_checks.rb +2 -2
  77. data/lib/theme_check/in_memory_storage.rb +13 -8
  78. data/lib/theme_check/language_server.rb +12 -0
  79. data/lib/theme_check/language_server/completion_engine.rb +38 -0
  80. data/lib/theme_check/language_server/completion_helper.rb +25 -0
  81. data/lib/theme_check/language_server/completion_provider.rb +28 -0
  82. data/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +51 -0
  83. data/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +31 -0
  84. data/lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb +43 -0
  85. data/lib/theme_check/language_server/completion_providers/tag_completion_provider.rb +31 -0
  86. data/lib/theme_check/language_server/constants.rb +10 -0
  87. data/lib/theme_check/language_server/document_link_engine.rb +48 -0
  88. data/lib/theme_check/language_server/handler.rb +105 -10
  89. data/lib/theme_check/language_server/position_helper.rb +27 -0
  90. data/lib/theme_check/language_server/protocol.rb +41 -0
  91. data/lib/theme_check/language_server/server.rb +9 -4
  92. data/lib/theme_check/language_server/tokens.rb +55 -0
  93. data/lib/theme_check/liquid_check.rb +11 -0
  94. data/lib/theme_check/node.rb +1 -2
  95. data/lib/theme_check/offense.rb +52 -15
  96. data/lib/theme_check/regex_helpers.rb +15 -0
  97. data/lib/theme_check/releaser.rb +39 -0
  98. data/lib/theme_check/remote_asset_file.rb +44 -0
  99. data/lib/theme_check/shopify_liquid.rb +1 -0
  100. data/lib/theme_check/shopify_liquid/deprecated_filter.rb +10 -8
  101. data/lib/theme_check/shopify_liquid/filter.rb +3 -5
  102. data/lib/theme_check/shopify_liquid/object.rb +2 -6
  103. data/lib/theme_check/shopify_liquid/tag.rb +14 -0
  104. data/lib/theme_check/storage.rb +3 -3
  105. data/lib/theme_check/string_helpers.rb +47 -0
  106. data/lib/theme_check/tags.rb +1 -2
  107. data/lib/theme_check/theme.rb +7 -1
  108. data/lib/theme_check/version.rb +1 -1
  109. data/theme-check.gemspec +1 -2
  110. metadata +57 -18
@@ -7,15 +7,11 @@ module ThemeCheck
7
7
  extend self
8
8
 
9
9
  def labels
10
- @labels ||= begin
11
- YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/objects.yml"))
12
- end
10
+ @labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/objects.yml"))
13
11
  end
14
12
 
15
13
  def plus_labels
16
- @plus_labels ||= begin
17
- YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/plus_objects.yml"))
18
- end
14
+ @plus_labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/plus_objects.yml"))
19
15
  end
20
16
  end
21
17
  end
@@ -0,0 +1,14 @@
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 ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/tags.yml"))
11
+ end
12
+ end
13
+ end
14
+ end
@@ -2,15 +2,15 @@
2
2
 
3
3
  module ThemeCheck
4
4
  class Storage
5
- def read(relative_path)
5
+ def path(relative_path)
6
6
  raise NotImplementedError
7
7
  end
8
8
 
9
- def write(relative_path, content)
9
+ def read(relative_path)
10
10
  raise NotImplementedError
11
11
  end
12
12
 
13
- def path(relative_path)
13
+ def write(relative_path, content)
14
14
  raise NotImplementedError
15
15
  end
16
16
 
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ThemeCheck
4
+ module StringHelpers
5
+ extend self
6
+
7
+ # Removes the module part from the expression in the string.
8
+ # Ported from ActiveSupport
9
+ #
10
+ # demodulize('ActiveSupport::Inflector::Inflections') # => "Inflections"
11
+ # demodulize('Inflections') # => "Inflections"
12
+ # demodulize('::Inflections') # => "Inflections"
13
+ # demodulize('') # => ""
14
+ #
15
+ # See also #deconstantize.
16
+ def demodulize(path)
17
+ path = path.to_s
18
+ if (i = path.rindex("::"))
19
+ path[(i + 2)..-1]
20
+ else
21
+ path
22
+ end
23
+ end
24
+
25
+ # Makes an underscored, lowercase form from the expression in the string.
26
+ # Base on ActiveSupport's
27
+ #
28
+ # Changes '::' to '/' to convert namespaces to paths.
29
+ #
30
+ # underscore('ActiveModel') # => "active_model"
31
+ # underscore('ActiveModel::Errors') # => "active_model/errors"
32
+ #
33
+ # As a rule of thumb you can think of +underscore+ as the inverse of
34
+ # #camelize, though there are cases where that does not hold:
35
+ #
36
+ # camelize(underscore('SSLError')) # => "SslError"
37
+ def underscore(camel_cased_word)
38
+ return camel_cased_word unless /[A-Z-]|::/.match?(camel_cased_word)
39
+ word = camel_cased_word.to_s.gsub("::", "/")
40
+ word.gsub!(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
41
+ word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
42
+ word.tr!("-", "_")
43
+ word.downcase!
44
+ word
45
+ end
46
+ end
47
+ end
@@ -1,5 +1,4 @@
1
1
  # frozen_string_literal: true
2
- require "active_support/core_ext/string/starts_ends_with"
3
2
 
4
3
  module ThemeCheck
5
4
  module Tags
@@ -19,7 +18,7 @@ module ThemeCheck
19
18
  "Error in tag 'section' - Valid syntax: section '[type]'",
20
19
  ) unless match
21
20
  @section_name = match[:section_name].tr(%('"), '')
22
- @section_name.chomp!(".liquid") if @section_name.ends_with?(".liquid")
21
+ @section_name.chomp!(".liquid") if @section_name.end_with?(".liquid")
23
22
  end
24
23
  end
25
24
 
@@ -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.start_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.2"
3
+ VERSION = "0.7.0"
4
4
  end
data/theme-check.gemspec CHANGED
@@ -22,7 +22,6 @@ Gem::Specification.new do |spec|
22
22
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
23
  spec.require_paths = ["lib"]
24
24
 
25
- spec.add_dependency('liquid', '>= 5')
26
- spec.add_dependency('activesupport')
25
+ spec.add_dependency('liquid', '>= 5.0.1')
27
26
  spec.add_dependency('nokogumbo')
28
27
  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.2
4
+ version: 0.7.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-17 00:00:00.000000000 Z
11
+ date: 2021-04-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -16,28 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5'
19
+ version: 5.0.1
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'
27
- - !ruby/object:Gem::Dependency
28
- name: activesupport
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: 5.0.1
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: nokogumbo
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -80,17 +66,52 @@ files:
80
66
  - data/shopify_liquid/filters.yml
81
67
  - data/shopify_liquid/objects.yml
82
68
  - data/shopify_liquid/plus_objects.yml
69
+ - data/shopify_liquid/tags.yml
70
+ - data/shopify_translation_keys.yml
83
71
  - dev.yml
72
+ - docs/checks/CHECK_DOCS_TEMPLATE.md
73
+ - docs/checks/asset_size_css.md
74
+ - docs/checks/asset_size_javascript.md
75
+ - docs/checks/convert_include_to_render.md
76
+ - docs/checks/default_locale.md
77
+ - docs/checks/deprecated_filter.md
78
+ - docs/checks/img_width_and_height.md
79
+ - docs/checks/liquid_tag.md
80
+ - docs/checks/matching_schema_translations.md
81
+ - docs/checks/matching_translations.md
82
+ - docs/checks/missing_enable_comment.md
83
+ - docs/checks/missing_required_template_files.md
84
+ - docs/checks/missing_template.md
85
+ - docs/checks/nested_snippet.md
86
+ - docs/checks/parser_blocking_javascript.md
87
+ - docs/checks/remote_asset.md
88
+ - docs/checks/required_directories.md
89
+ - docs/checks/required_layout_theme_object.md
90
+ - docs/checks/space_inside_braces.md
91
+ - docs/checks/syntax_error.md
92
+ - docs/checks/template_length.md
93
+ - docs/checks/translation_key_exists.md
94
+ - docs/checks/undefined_object.md
95
+ - docs/checks/unknown_filter.md
96
+ - docs/checks/unused_assign.md
97
+ - docs/checks/unused_snippet.md
98
+ - docs/checks/valid_html_translation.md
99
+ - docs/checks/valid_json.md
100
+ - docs/checks/valid_schema.md
84
101
  - docs/preview.png
85
102
  - exe/theme-check
86
103
  - exe/theme-check-language-server
87
104
  - lib/theme_check.rb
88
105
  - lib/theme_check/analyzer.rb
106
+ - lib/theme_check/asset_file.rb
89
107
  - lib/theme_check/check.rb
90
108
  - lib/theme_check/checks.rb
109
+ - lib/theme_check/checks/asset_size_css.rb
110
+ - lib/theme_check/checks/asset_size_javascript.rb
91
111
  - lib/theme_check/checks/convert_include_to_render.rb
92
112
  - lib/theme_check/checks/default_locale.rb
93
113
  - lib/theme_check/checks/deprecated_filter.rb
114
+ - lib/theme_check/checks/img_width_and_height.rb
94
115
  - lib/theme_check/checks/liquid_tag.rb
95
116
  - lib/theme_check/checks/matching_schema_translations.rb
96
117
  - lib/theme_check/checks/matching_translations.rb
@@ -99,6 +120,7 @@ files:
99
120
  - lib/theme_check/checks/missing_template.rb
100
121
  - lib/theme_check/checks/nested_snippet.rb
101
122
  - lib/theme_check/checks/parser_blocking_javascript.rb
123
+ - lib/theme_check/checks/remote_asset.rb
102
124
  - lib/theme_check/checks/required_directories.rb
103
125
  - lib/theme_check/checks/required_layout_theme_object.rb
104
126
  - lib/theme_check/checks/space_inside_braces.rb
@@ -123,8 +145,20 @@ files:
123
145
  - lib/theme_check/json_file.rb
124
146
  - lib/theme_check/json_helpers.rb
125
147
  - lib/theme_check/language_server.rb
148
+ - lib/theme_check/language_server/completion_engine.rb
149
+ - lib/theme_check/language_server/completion_helper.rb
150
+ - lib/theme_check/language_server/completion_provider.rb
151
+ - lib/theme_check/language_server/completion_providers/filter_completion_provider.rb
152
+ - lib/theme_check/language_server/completion_providers/object_completion_provider.rb
153
+ - lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb
154
+ - lib/theme_check/language_server/completion_providers/tag_completion_provider.rb
155
+ - lib/theme_check/language_server/constants.rb
156
+ - lib/theme_check/language_server/document_link_engine.rb
126
157
  - lib/theme_check/language_server/handler.rb
158
+ - lib/theme_check/language_server/position_helper.rb
159
+ - lib/theme_check/language_server/protocol.rb
127
160
  - lib/theme_check/language_server/server.rb
161
+ - lib/theme_check/language_server/tokens.rb
128
162
  - lib/theme_check/liquid_check.rb
129
163
  - lib/theme_check/locale_diff.rb
130
164
  - lib/theme_check/node.rb
@@ -132,11 +166,16 @@ files:
132
166
  - lib/theme_check/packager.rb
133
167
  - lib/theme_check/parsing_helpers.rb
134
168
  - lib/theme_check/printer.rb
169
+ - lib/theme_check/regex_helpers.rb
170
+ - lib/theme_check/releaser.rb
171
+ - lib/theme_check/remote_asset_file.rb
135
172
  - lib/theme_check/shopify_liquid.rb
136
173
  - lib/theme_check/shopify_liquid/deprecated_filter.rb
137
174
  - lib/theme_check/shopify_liquid/filter.rb
138
175
  - lib/theme_check/shopify_liquid/object.rb
176
+ - lib/theme_check/shopify_liquid/tag.rb
139
177
  - lib/theme_check/storage.rb
178
+ - lib/theme_check/string_helpers.rb
140
179
  - lib/theme_check/tags.rb
141
180
  - lib/theme_check/template.rb
142
181
  - lib/theme_check/theme.rb