theme-check 0.10.1 → 1.2.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 (56) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/theme-check.yml +2 -6
  3. data/CHANGELOG.md +41 -0
  4. data/README.md +39 -0
  5. data/RELEASING.md +34 -2
  6. data/Rakefile +1 -1
  7. data/config/default.yml +39 -3
  8. data/config/nothing.yml +11 -0
  9. data/config/theme_app_extension.yml +153 -0
  10. data/data/shopify_liquid/objects.yml +2 -0
  11. data/docs/checks/asset_size_app_block_css.md +52 -0
  12. data/docs/checks/asset_size_app_block_javascript.md +57 -0
  13. data/docs/checks/asset_size_css_stylesheet_tag.md +50 -0
  14. data/docs/checks/deprecate_bgsizes.md +66 -0
  15. data/docs/checks/deprecate_lazysizes.md +61 -0
  16. data/docs/checks/html_parsing_error.md +50 -0
  17. data/docs/checks/liquid_tag.md +2 -2
  18. data/docs/checks/template_length.md +12 -2
  19. data/exe/theme-check-language-server.bat +3 -0
  20. data/exe/theme-check.bat +3 -0
  21. data/lib/theme_check.rb +15 -0
  22. data/lib/theme_check/analyzer.rb +25 -21
  23. data/lib/theme_check/asset_file.rb +3 -15
  24. data/lib/theme_check/bug.rb +3 -1
  25. data/lib/theme_check/check.rb +24 -2
  26. data/lib/theme_check/checks/asset_size_app_block_css.rb +44 -0
  27. data/lib/theme_check/checks/asset_size_app_block_javascript.rb +44 -0
  28. data/lib/theme_check/checks/asset_size_css.rb +11 -74
  29. data/lib/theme_check/checks/asset_size_css_stylesheet_tag.rb +24 -0
  30. data/lib/theme_check/checks/asset_size_javascript.rb +10 -36
  31. data/lib/theme_check/checks/deprecate_bgsizes.rb +14 -0
  32. data/lib/theme_check/checks/deprecate_lazysizes.rb +16 -0
  33. data/lib/theme_check/checks/html_parsing_error.rb +12 -0
  34. data/lib/theme_check/checks/img_lazy_loading.rb +1 -6
  35. data/lib/theme_check/checks/liquid_tag.rb +2 -2
  36. data/lib/theme_check/checks/remote_asset.rb +2 -0
  37. data/lib/theme_check/checks/space_inside_braces.rb +1 -1
  38. data/lib/theme_check/checks/template_length.rb +18 -4
  39. data/lib/theme_check/cli.rb +34 -13
  40. data/lib/theme_check/config.rb +56 -10
  41. data/lib/theme_check/exceptions.rb +29 -27
  42. data/lib/theme_check/html_check.rb +2 -0
  43. data/lib/theme_check/html_visitor.rb +3 -1
  44. data/lib/theme_check/json_file.rb +2 -29
  45. data/lib/theme_check/language_server/constants.rb +8 -0
  46. data/lib/theme_check/language_server/document_link_engine.rb +40 -4
  47. data/lib/theme_check/language_server/handler.rb +1 -1
  48. data/lib/theme_check/language_server/server.rb +13 -2
  49. data/lib/theme_check/liquid_check.rb +0 -12
  50. data/lib/theme_check/parsing_helpers.rb +3 -1
  51. data/lib/theme_check/regex_helpers.rb +17 -0
  52. data/lib/theme_check/tags.rb +62 -8
  53. data/lib/theme_check/template.rb +3 -32
  54. data/lib/theme_check/theme_file.rb +40 -0
  55. data/lib/theme_check/version.rb +1 -1
  56. metadata +22 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 56b6a91e5ac4b1e2045b1e4fb2748e5ecb9600206f9ba07df401c1410bf494fc
4
- data.tar.gz: b6fb1b3957ae5aecd7b2efbaa76a2e3c07390ec442f94d416ea5b20ca2cbf966
3
+ metadata.gz: 28cb25e47867151bea85360a9f07667f46ea30ad90285f16cc74e85370ad39d9
4
+ data.tar.gz: 2023811dad002a72f00e2c26562ff3e6b5f2f49c748d44968fd94d1f9e72300f
5
5
  SHA512:
6
- metadata.gz: e2ca68b31968949dc52240c8ee5ca607e10e063b500cda0a7b06306589849f2bc0098f1b0742f962a91a0ca282aa504acb9f7c0de6b785afff0b577b84fa6eba
7
- data.tar.gz: c7186299a1168c5ad1e3cd6544ee8c8248b96a492e1dc82481c26a69e75fb1f04172ceb58da61e310a393fd36c9b990464542e7528810c7bea556b5b8ce9b61d
6
+ metadata.gz: f3a5339873aea7a325cbc3f3715e9166b1f7734226e3d9ac7b400f048629a514f3eec5d559c77eaf70febacda35416b8332d8d1a6ebefa1d9a34f29474a4e41d
7
+ data.tar.gz: 19eec11d1eb86188fe170bce61f884072340d848e800b2bb2b344cddf3561d60594e4f066199b7f9157b54da81ce8afebc5e6db0f3dbfbc5fac208c95d2b5ed8
@@ -1,10 +1,6 @@
1
1
  name: ThemeCheck
2
2
 
3
- on:
4
- push:
5
- branches: [ master ]
6
- pull_request:
7
- branches: [ master ]
3
+ on: [push]
8
4
 
9
5
  jobs:
10
6
  test:
@@ -36,4 +32,4 @@ jobs:
36
32
  run: bundle exec rake
37
33
  - name: Test runtime
38
34
  # Testing that runtime can execute, not testing the results themselves
39
- run: bundle exec theme-check ./test/theme | grep -q "files inspected"
35
+ run: bundle exec theme-check ./test/theme | grep -q "files inspected"
data/CHANGELOG.md CHANGED
@@ -1,4 +1,45 @@
1
1
 
2
+ v1.2.0 / 2021-07-15
3
+ ==================
4
+
5
+ * Add Windows Support ([#364](https://github.com/shopify/theme-check/issues/364))
6
+ * Ignore empty `{{}}` in SpaceInsideBraces ([#350](https://github.com/shopify/theme-check/issues/350))
7
+ * Switch to main branch
8
+ * Minor documentation fixes
9
+
10
+ v1.1.0 / 2021-07-06
11
+ ==================
12
+
13
+ * Add `--fail-level` CLI flag to configure exit code
14
+ * Refactor all theme file classes to inherit from `ThemeFile`
15
+ * Fix `undefined method liquid?` error when scanning from LSP
16
+ * Adding asset document links
17
+ * Allow initializing theme app extension configuration files
18
+ * Allow disabling registering mock Liquid tags w/ `ThemeCheck::Tags.register_tags = false`
19
+ * Support Theme App Extensions
20
+ * Add checks for theme app extension block JS/CSS
21
+ * Disable Liquid::C when parsing Liquid templates
22
+
23
+ v1.0.0 / 2021-06-28
24
+ ==================
25
+
26
+ * Convert `AssetSizeCSS` to `HtmlCheck`
27
+ * Add `DeprecateLazysizes` & `DeprecateBgsizes` checks
28
+ * Allow hardcoded CDN urls in `RemoteAsset`
29
+ * Bump `LiquidTag` `min_consecutive_statements` default to 5
30
+ * Exclude {% javascript %} and {% stylesheet %} from line counts in `TemplateLength`
31
+ * Bump `TemplateLength` `max_length` default to 500
32
+ * Fix `StringScanner#skip(String)` not being supported on some Rubies
33
+ * Fix `ParsingHelpers#outside_of_strings` handling of empty strings
34
+ * Update to support new `{% render %}` syntax
35
+ * Converted `AssetSizeJavaScript` to `HtmlCheck`
36
+
37
+ v0.10.2 / 2021-06-18
38
+ ==================
39
+
40
+ * Fix error when parsing a template with lots of HTML attributes.
41
+ * Add `HtmlParsingError` check for reporting errors during HTML parsing.
42
+
2
43
  v0.10.1 / 2021-06-11
3
44
  ==================
4
45
 
data/README.md CHANGED
@@ -100,6 +100,8 @@ TemplateLength:
100
100
  # Or ignore certain paths
101
101
  ignore:
102
102
  - snippets/icon-*
103
+ # Or change the severity (error|suggestion|style)
104
+ severity: suggestion
103
105
 
104
106
  # Enable a custom check
105
107
  MyCustomCheck
@@ -141,3 +143,40 @@ Disable checks for the _entire document_ by placing the comment on the first lin
141
143
 
142
144
  {%assign x = 1%}
143
145
  ```
146
+
147
+ ## Exit Code and `--fail-level`
148
+
149
+ Use the `--fail-level` (default: `error`) flag to configure the exit code of theme-check. Useful in CI scenarios.
150
+
151
+ Example:
152
+
153
+ ```
154
+ # Make CI fail on styles warnings, suggestions, and errors
155
+ theme-check --fail-level style path_to_theme
156
+
157
+ # Make CI fail on suggestions, and errors
158
+ theme-check --fail-level suggestion path_to_theme
159
+
160
+ # Make CI fail on errors
161
+ theme-check path_to_theme
162
+ ```
163
+
164
+ There are three fail levels:
165
+
166
+ - `error`
167
+ - `suggestion`
168
+ - `style`
169
+
170
+ Exit code meanings:
171
+
172
+ - 0: Success!
173
+ - 1: Your code doesn't pass the checks
174
+ - 2: There's a bug in theme-check
175
+
176
+ If you would like to change the severity of a check, you can do so with the `severity` attribute. Example:
177
+
178
+ ```yaml
179
+ DeprecateLazysizes:
180
+ enabled: true
181
+ severity: error
182
+ ```
data/RELEASING.md CHANGED
@@ -13,7 +13,14 @@
13
13
 
14
14
  4. Commit your changes and make a PR.
15
15
 
16
- 5. Merge your PR to master.
16
+ ```bash
17
+ git checkout -b "bump/theme-check-$VERSION"
18
+ git add docs/checks CHANGELOG.md lib/theme_check/version.rb
19
+ git commit -m "Bump theme-check version to $VERSION"
20
+ hub compare "main:bump/theme-check-$VERSION"
21
+ ```
22
+
23
+ 5. Merge your PR to main.
17
24
 
18
25
  6. On [Shipit](https://shipit.shopify.io/shopify/theme-check/rubygems), deploy your commit.
19
26
 
@@ -46,5 +53,30 @@
46
53
 
47
54
  ```bash
48
55
  # shortcut if you have `hub` installed
49
- hub compare "master:bump/theme-check-$VERSION"
56
+ hub compare "main:bump/theme-check-$VERSION"
57
+ ```
58
+
59
+ ## Shopify CLI Release Process
60
+
61
+ 1. Release `theme-check` on RubyGems by following the steps in the previous section.
62
+
63
+ 2. Update the `theme-check` version in [`shopify-cli`](https://github.com/shopify/shopify-cli)'s `Gemfile.lock` and `shopify-cli.gemspec` files.
64
+
65
+ Such as in [this PR.](https://github.com/Shopify/shopify-cli/pull/1357/files)
66
+
67
+ 3. Create a branch + a commit on the [`shopify-cli`](https://github.com/Shopify/shopify-cli) repository.
68
+
69
+ ```bash
70
+ VERSION=X.X.X
71
+ git checkout -b "bump/theme-check-$VERSION"
72
+ git add Gemfile.lock
73
+ git add shopify-cli.gemspec
74
+ git commit -m "Bump theme-check version to $VERSION"
75
+ ```
76
+
77
+ 4. Create a pull-request for those changes on the [`shopify-cli`](https://github.com/Shopify/shopify-cli) repository.
78
+
79
+ ```bash
80
+ # shortcut if you have `hub` installed
81
+ hub compare "main:bump/theme-check-$VERSION"
50
82
  ```
data/Rakefile CHANGED
@@ -75,7 +75,7 @@ task :new_check, [:name] do |_t, args|
75
75
  code_source: code_source,
76
76
  doc_source: doc_source,
77
77
  )
78
- sh "bundle exec ruby -Itest test/checks/my_new_check_test.rb"
78
+ sh "bundle exec ruby -Itest #{test_source}"
79
79
  end
80
80
 
81
81
  def erb(file, to, **args)
data/config/default.yml CHANGED
@@ -1,7 +1,13 @@
1
1
  root: .
2
2
 
3
+ extends: :nothing
4
+
3
5
  require: []
4
6
 
7
+ include_categories: []
8
+
9
+ exclude_categories: []
10
+
5
11
  ignore:
6
12
  - node_modules/*
7
13
 
@@ -12,7 +18,7 @@ ConvertIncludeToRender:
12
18
  LiquidTag:
13
19
  enabled: true
14
20
  ignore: []
15
- min_consecutive_statements: 4
21
+ min_consecutive_statements: 5
16
22
 
17
23
  MissingTemplate:
18
24
  enabled: true
@@ -38,9 +44,13 @@ SyntaxError:
38
44
  TemplateLength:
39
45
  enabled: true
40
46
  ignore: []
41
- max_length: 200
47
+ max_length: 500
42
48
  # Exclude content of {% schema %} in line count
43
49
  exclude_schema: true
50
+ # Exclude content of {% stylesheet %} in line count
51
+ exclude_stylesheet: true
52
+ # Exclude content of {% javascript %} in line count
53
+ exclude_javascript: true
44
54
 
45
55
  UnknownFilter:
46
56
  enabled: true
@@ -99,6 +109,14 @@ DeprecatedFilter:
99
109
  enabled: true
100
110
  ignore: []
101
111
 
112
+ DeprecateLazysizes:
113
+ enabled: true
114
+ ignore: []
115
+
116
+ DeprecateBgsizes:
117
+ enabled: true
118
+ ignore: []
119
+
102
120
  MissingEnableComment:
103
121
  enabled: true
104
122
  ignore: []
@@ -109,16 +127,20 @@ ParserBlockingJavaScript:
109
127
 
110
128
  ParserBlockingScriptTag:
111
129
  enabled: true
130
+ ignore: []
112
131
 
113
132
  AssetSizeJavaScript:
114
133
  enabled: false
115
- ignore: []
116
134
  threshold_in_bytes: 10_000
117
135
  ignore: []
118
136
 
119
137
  AssetSizeCSS:
120
138
  enabled: false
139
+ threshold_in_bytes: 100_000
121
140
  ignore: []
141
+
142
+ AssetSizeCSSStylesheetTag:
143
+ enabled: false
122
144
  threshold_in_bytes: 100_000
123
145
  ignore: []
124
146
 
@@ -141,3 +163,17 @@ ContentForHeaderModification:
141
163
  ImgLazyLoading:
142
164
  enabled: true
143
165
  ignore: []
166
+
167
+ HtmlParsingError:
168
+ enabled: true
169
+ ignore: []
170
+
171
+ AssetSizeAppBlockJavaScript:
172
+ enabled: false
173
+ ignore: []
174
+ threshold_in_bytes: 10_000
175
+
176
+ AssetSizeAppBlockCSS:
177
+ enabled: false
178
+ ignore: []
179
+ threshold_in_bytes: 100_000
@@ -0,0 +1,11 @@
1
+ root: .
2
+
3
+ require: []
4
+
5
+ include_categories: []
6
+
7
+ exclude_categories: []
8
+
9
+ ignore:
10
+ - node_modules/*
11
+
@@ -0,0 +1,153 @@
1
+ root: .
2
+
3
+ extends: :nothing
4
+
5
+ require: []
6
+
7
+ include_categories: []
8
+
9
+ exclude_categories: []
10
+
11
+ ignore:
12
+ - node_modules/*
13
+
14
+ ConvertIncludeToRender:
15
+ enabled: true
16
+ ignore: []
17
+
18
+ LiquidTag:
19
+ enabled: true
20
+ ignore: []
21
+ min_consecutive_statements: 4
22
+
23
+ MissingTemplate:
24
+ enabled: true
25
+ ignore: []
26
+
27
+ NestedSnippet:
28
+ enabled: true
29
+ ignore: []
30
+ max_nesting_level: 3
31
+
32
+ RequiredLayoutThemeObject:
33
+ enabled: true
34
+ ignore: []
35
+
36
+ SpaceInsideBraces:
37
+ enabled: true
38
+ ignore: []
39
+
40
+ SyntaxError:
41
+ enabled: true
42
+ ignore: []
43
+
44
+ TemplateLength:
45
+ enabled: true
46
+ ignore: []
47
+ max_length: 200
48
+ # Exclude content of {% schema %} in line count
49
+ exclude_schema: true
50
+
51
+ UnknownFilter:
52
+ enabled: true
53
+ ignore: []
54
+
55
+ UnusedAssign:
56
+ enabled: true
57
+ ignore: []
58
+
59
+ UnusedSnippet:
60
+ enabled: true
61
+ ignore: []
62
+
63
+ MatchingSchemaTranslations:
64
+ enabled: true
65
+ ignore: []
66
+
67
+ MatchingTranslations:
68
+ enabled: true
69
+ ignore: []
70
+
71
+ TranslationKeyExists:
72
+ enabled: true
73
+ ignore: []
74
+
75
+ ValidHTMLTranslation:
76
+ enabled: true
77
+ ignore: []
78
+
79
+ ValidJson:
80
+ enabled: true
81
+ ignore: []
82
+
83
+ ValidSchema:
84
+ enabled: true
85
+ ignore: []
86
+
87
+ UndefinedObject:
88
+ enabled: true
89
+ ignore: []
90
+ exclude_snippets: true
91
+
92
+ RequiredDirectories:
93
+ enabled: false
94
+ ignore: []
95
+
96
+ DeprecatedFilter:
97
+ enabled: true
98
+ ignore: []
99
+
100
+ MissingEnableComment:
101
+ enabled: true
102
+ ignore: []
103
+
104
+ ParserBlockingJavaScript:
105
+ enabled: true
106
+ ignore: []
107
+
108
+ ParserBlockingScriptTag:
109
+ enabled: true
110
+
111
+ AssetSizeJavaScript:
112
+ enabled: true
113
+ ignore: []
114
+ threshold_in_bytes: 10_000
115
+
116
+ AssetSizeCSS:
117
+ enabled: true
118
+ ignore: []
119
+ threshold_in_bytes: 100_000
120
+
121
+ ImgWidthAndHeight:
122
+ enabled: true
123
+ ignore: []
124
+
125
+ RemoteAsset:
126
+ enabled: true
127
+ ignore: []
128
+
129
+ AssetUrlFilters:
130
+ enabled: true
131
+ ignore: []
132
+
133
+ ContentForHeaderModification:
134
+ enabled: true
135
+ ignore: []
136
+
137
+ ImgLazyLoading:
138
+ enabled: true
139
+ ignore: []
140
+
141
+ HtmlParsingError:
142
+ enabled: true
143
+ ignore: []
144
+
145
+ AssetSizeAppBlockJavaScript:
146
+ enabled: true
147
+ ignore: []
148
+ threshold_in_bytes: 10_000
149
+
150
+ AssetSizeAppBlockCSS:
151
+ enabled: true
152
+ ignore: []
153
+ threshold_in_bytes: 100_000
@@ -40,6 +40,7 @@
40
40
  - linklist
41
41
  - linklists
42
42
  - location
43
+ - localization
43
44
  - metafield
44
45
  - model
45
46
  - model_source
@@ -55,6 +56,7 @@
55
56
  - powered_by_link
56
57
  - product
57
58
  - product_option
59
+ - product_variant
58
60
  - recommendations
59
61
  - request
60
62
  - routes