theme-check 0.2.2 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -0
  3. data/CHANGELOG.md +40 -0
  4. data/CONTRIBUTING.md +2 -0
  5. data/README.md +45 -4
  6. data/RELEASING.md +41 -0
  7. data/Rakefile +24 -4
  8. data/config/default.yml +16 -0
  9. data/data/shopify_liquid/plus_objects.yml +15 -0
  10. data/data/shopify_liquid/tags.yml +26 -0
  11. data/dev.yml +2 -0
  12. data/lib/theme_check.rb +5 -0
  13. data/lib/theme_check/analyzer.rb +0 -6
  14. data/lib/theme_check/check.rb +11 -0
  15. data/lib/theme_check/checks.rb +10 -0
  16. data/lib/theme_check/checks/missing_enable_comment.rb +31 -0
  17. data/lib/theme_check/checks/parser_blocking_javascript.rb +55 -0
  18. data/lib/theme_check/checks/space_inside_braces.rb +1 -0
  19. data/lib/theme_check/checks/template_length.rb +11 -3
  20. data/lib/theme_check/checks/undefined_object.rb +27 -6
  21. data/lib/theme_check/checks/unused_assign.rb +4 -3
  22. data/lib/theme_check/checks/valid_html_translation.rb +2 -2
  23. data/lib/theme_check/cli.rb +31 -7
  24. data/lib/theme_check/config.rb +95 -43
  25. data/lib/theme_check/corrector.rb +0 -4
  26. data/lib/theme_check/disabled_checks.rb +77 -0
  27. data/lib/theme_check/file_system_storage.rb +51 -0
  28. data/lib/theme_check/in_memory_storage.rb +37 -0
  29. data/lib/theme_check/json_file.rb +12 -10
  30. data/lib/theme_check/language_server.rb +10 -0
  31. data/lib/theme_check/language_server/completion_engine.rb +38 -0
  32. data/lib/theme_check/language_server/completion_helper.rb +35 -0
  33. data/lib/theme_check/language_server/completion_provider.rb +23 -0
  34. data/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +47 -0
  35. data/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +31 -0
  36. data/lib/theme_check/language_server/completion_providers/tag_completion_provider.rb +31 -0
  37. data/lib/theme_check/language_server/handler.rb +74 -13
  38. data/lib/theme_check/language_server/position_helper.rb +27 -0
  39. data/lib/theme_check/language_server/protocol.rb +41 -0
  40. data/lib/theme_check/language_server/server.rb +2 -2
  41. data/lib/theme_check/language_server/tokens.rb +55 -0
  42. data/lib/theme_check/offense.rb +51 -14
  43. data/lib/theme_check/shopify_liquid.rb +1 -0
  44. data/lib/theme_check/shopify_liquid/object.rb +6 -0
  45. data/lib/theme_check/shopify_liquid/tag.rb +16 -0
  46. data/lib/theme_check/storage.rb +25 -0
  47. data/lib/theme_check/template.rb +26 -21
  48. data/lib/theme_check/theme.rb +14 -9
  49. data/lib/theme_check/version.rb +1 -1
  50. data/lib/theme_check/visitor.rb +14 -3
  51. data/packaging/homebrew/theme_check.base.rb +10 -6
  52. metadata +22 -2
@@ -3,16 +3,29 @@ require "pathname"
3
3
 
4
4
  module ThemeCheck
5
5
  class Template
6
- attr_reader :path
6
+ def initialize(relative_path, storage)
7
+ @storage = storage
8
+ @relative_path = relative_path
9
+ end
7
10
 
8
- def initialize(path, root)
9
- @path = Pathname(path)
10
- @root = Pathname(root)
11
- @updated = false
11
+ def path
12
+ @storage.path(@relative_path)
12
13
  end
13
14
 
14
15
  def relative_path
15
- @path.relative_path_from(@root)
16
+ @relative_pathname ||= Pathname.new(@relative_path)
17
+ end
18
+
19
+ def source
20
+ @source ||= @storage.read(@relative_path)
21
+ end
22
+
23
+ def write
24
+ content = updated_content
25
+ if source != content
26
+ @storage.write(@relative_path, content)
27
+ @source = content
28
+ end
16
29
  end
17
30
 
18
31
  def name
@@ -31,15 +44,17 @@ module ThemeCheck
31
44
  name.start_with?('snippets')
32
45
  end
33
46
 
34
- def source
35
- @source ||= @path.read
36
- end
37
-
38
47
  def lines
39
48
  # Retain trailing newline character
40
49
  @lines ||= source.split("\n", -1)
41
50
  end
42
51
 
52
+ # Not entirely obvious but lines is mutable, corrections are to be
53
+ # applied on @lines.
54
+ def updated_content
55
+ lines.join("\n")
56
+ end
57
+
43
58
  def excerpt(line)
44
59
  lines[line - 1].strip
45
60
  end
@@ -65,18 +80,8 @@ module ThemeCheck
65
80
  parse.root
66
81
  end
67
82
 
68
- def update!
69
- @updated = true
70
- end
71
-
72
- def write
73
- if @updated
74
- @path.write(lines.join("\n"))
75
- end
76
- end
77
-
78
83
  def ==(other)
79
- other.is_a?(Template) && @path == other.path
84
+ other.is_a?(Template) && relative_path == other.relative_path
80
85
  end
81
86
 
82
87
  def self.parse(source)
@@ -4,18 +4,27 @@ require "pathname"
4
4
  module ThemeCheck
5
5
  class Theme
6
6
  DEFAULT_LOCALE_REGEXP = %r{^locales/(.*)\.default$}
7
- attr_reader :root
7
+ LIQUID_REGEX = /\.liquid$/i
8
+ JSON_REGEX = /\.json$/i
8
9
 
9
- def initialize(root)
10
- @root = Pathname.new(root)
10
+ def initialize(storage)
11
+ @storage = storage
11
12
  end
12
13
 
13
14
  def liquid
14
- @liquid ||= @root.glob("**/*.liquid").map { |path| Template.new(path, @root) }
15
+ @liquid ||= @storage.files
16
+ .select { |path| LIQUID_REGEX.match?(path) }
17
+ .map { |path| Template.new(path, @storage) }
15
18
  end
16
19
 
17
20
  def json
18
- @json ||= @root.glob("**/*.json").map { |path| JsonFile.new(path, @root) }
21
+ @json ||= @storage.files
22
+ .select { |path| JSON_REGEX.match?(path) }
23
+ .map { |path| JsonFile.new(path, @storage) }
24
+ end
25
+
26
+ def directories
27
+ @storage.directories
19
28
  end
20
29
 
21
30
  def default_locale_json
@@ -52,9 +61,5 @@ module ThemeCheck
52
61
  def snippets
53
62
  liquid.select(&:snippet?)
54
63
  end
55
-
56
- def directories
57
- @directories ||= @root.glob('*').select { |f| File.directory?(f) }.map { |f| f.relative_path_from(@root) }
58
- end
59
64
  end
60
65
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ThemeCheck
3
- VERSION = "0.2.2"
3
+ VERSION = "0.4.0"
4
4
  end
@@ -6,12 +6,15 @@ module ThemeCheck
6
6
  end
7
7
 
8
8
  def visit_template(template)
9
+ @disabled_checks = DisabledChecks.new
9
10
  visit(Node.new(template.root, nil, template))
10
11
  rescue Liquid::Error => exception
11
12
  exception.template_name = template.name
12
13
  call_checks(:on_error, exception)
13
14
  end
14
15
 
16
+ private
17
+
15
18
  def visit(node)
16
19
  call_checks(:on_node, node)
17
20
  call_checks(:on_tag, node) if node.tag?
@@ -22,16 +25,24 @@ module ThemeCheck
22
25
  call_checks(:after_tag, node) if node.tag?
23
26
  call_checks(:after_node, node)
24
27
  end
25
- end
26
28
 
27
- private
29
+ @disabled_checks.update(node) if node.comment?
30
+ end
28
31
 
29
32
  def visit_children(node)
30
33
  node.children.each { |child| visit(child) }
31
34
  end
32
35
 
33
36
  def call_checks(method, *args)
34
- @checks.call(method, *args)
37
+ checks.call(method, *args)
38
+ end
39
+
40
+ def checks
41
+ return @checks unless @disabled_checks.any?
42
+
43
+ return @checks.always_enabled if @disabled_checks.all_disabled?
44
+
45
+ @checks.except_for(@disabled_checks)
35
46
  end
36
47
  end
37
48
  end
@@ -61,12 +61,16 @@ class ThemeCheck < Formula
61
61
  ENV['PATH'] = ENV['PATH'].sub(HOMEBREW_SHIMS_PATH.to_s, '/usr/local/bin')
62
62
  end
63
63
 
64
- system("#{ruby_bin}/gem", "install", cached_download,
65
- "--no-document",
66
- "--no-wrapper",
67
- "--no-user-install",
68
- "--install-dir", prefix,
69
- "--bindir", bin)
64
+ system(
65
+ "#{ruby_bin}/gem",
66
+ "install",
67
+ cached_download,
68
+ "--no-document",
69
+ "--no-wrapper",
70
+ "--no-user-install",
71
+ "--install-dir", prefix,
72
+ "--bindir", bin
73
+ )
70
74
 
71
75
  raise "gem install 'theme-check' failed with status #{$CHILD_STATUS.exitstatus}" unless $CHILD_STATUS.success?
72
76
 
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.2.2
4
+ version: 0.4.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-01-22 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -65,18 +65,22 @@ 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
71
72
  - Guardfile
72
73
  - LICENSE.md
73
74
  - README.md
75
+ - RELEASING.md
74
76
  - Rakefile
75
77
  - bin/liquid-server
76
78
  - config/default.yml
77
79
  - data/shopify_liquid/deprecated_filters.yml
78
80
  - data/shopify_liquid/filters.yml
79
81
  - data/shopify_liquid/objects.yml
82
+ - data/shopify_liquid/plus_objects.yml
83
+ - data/shopify_liquid/tags.yml
80
84
  - dev.yml
81
85
  - docs/preview.png
82
86
  - exe/theme-check
@@ -91,9 +95,11 @@ files:
91
95
  - lib/theme_check/checks/liquid_tag.rb
92
96
  - lib/theme_check/checks/matching_schema_translations.rb
93
97
  - lib/theme_check/checks/matching_translations.rb
98
+ - lib/theme_check/checks/missing_enable_comment.rb
94
99
  - lib/theme_check/checks/missing_required_template_files.rb
95
100
  - lib/theme_check/checks/missing_template.rb
96
101
  - lib/theme_check/checks/nested_snippet.rb
102
+ - lib/theme_check/checks/parser_blocking_javascript.rb
97
103
  - lib/theme_check/checks/required_directories.rb
98
104
  - lib/theme_check/checks/required_layout_theme_object.rb
99
105
  - lib/theme_check/checks/space_inside_braces.rb
@@ -111,12 +117,24 @@ files:
111
117
  - lib/theme_check/cli.rb
112
118
  - lib/theme_check/config.rb
113
119
  - lib/theme_check/corrector.rb
120
+ - lib/theme_check/disabled_checks.rb
121
+ - lib/theme_check/file_system_storage.rb
122
+ - lib/theme_check/in_memory_storage.rb
114
123
  - lib/theme_check/json_check.rb
115
124
  - lib/theme_check/json_file.rb
116
125
  - lib/theme_check/json_helpers.rb
117
126
  - lib/theme_check/language_server.rb
127
+ - lib/theme_check/language_server/completion_engine.rb
128
+ - lib/theme_check/language_server/completion_helper.rb
129
+ - lib/theme_check/language_server/completion_provider.rb
130
+ - lib/theme_check/language_server/completion_providers/filter_completion_provider.rb
131
+ - lib/theme_check/language_server/completion_providers/object_completion_provider.rb
132
+ - lib/theme_check/language_server/completion_providers/tag_completion_provider.rb
118
133
  - lib/theme_check/language_server/handler.rb
134
+ - lib/theme_check/language_server/position_helper.rb
135
+ - lib/theme_check/language_server/protocol.rb
119
136
  - lib/theme_check/language_server/server.rb
137
+ - lib/theme_check/language_server/tokens.rb
120
138
  - lib/theme_check/liquid_check.rb
121
139
  - lib/theme_check/locale_diff.rb
122
140
  - lib/theme_check/node.rb
@@ -128,6 +146,8 @@ files:
128
146
  - lib/theme_check/shopify_liquid/deprecated_filter.rb
129
147
  - lib/theme_check/shopify_liquid/filter.rb
130
148
  - lib/theme_check/shopify_liquid/object.rb
149
+ - lib/theme_check/shopify_liquid/tag.rb
150
+ - lib/theme_check/storage.rb
131
151
  - lib/theme_check/tags.rb
132
152
  - lib/theme_check/template.rb
133
153
  - lib/theme_check/theme.rb