theme-check 1.12.0 → 1.12.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (28) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/data/shopify_liquid/deprecated_filters.json +22 -0
  4. data/data/shopify_liquid/plus_labels.json +15 -0
  5. data/data/shopify_liquid/theme_app_extension_labels.json +3 -0
  6. data/lib/theme_check/language_server/completion_provider.rb +10 -0
  7. data/lib/theme_check/language_server/completion_providers/assignments_completion_provider.rb +9 -5
  8. data/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +1 -1
  9. data/lib/theme_check/language_server/completion_providers/object_attribute_completion_provider.rb +1 -0
  10. data/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +6 -4
  11. data/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope.rb +18 -15
  12. data/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb +3 -1
  13. data/lib/theme_check/language_server/variable_lookup_finder/constants.rb +1 -0
  14. data/lib/theme_check/language_server/variable_lookup_finder/tolerant_parser.rb +20 -0
  15. data/lib/theme_check/language_server/variable_lookup_finder.rb +10 -3
  16. data/lib/theme_check/shopify_liquid/deprecated_filter.rb +1 -1
  17. data/lib/theme_check/shopify_liquid/filter.rb +35 -7
  18. data/lib/theme_check/shopify_liquid/object.rb +8 -7
  19. data/lib/theme_check/shopify_liquid/source_index.rb +21 -1
  20. data/lib/theme_check/shopify_liquid/tag.rb +11 -5
  21. data/lib/theme_check/version.rb +1 -1
  22. metadata +5 -8
  23. data/data/shopify_liquid/deprecated_filters.yml +0 -14
  24. data/data/shopify_liquid/filters.yml +0 -211
  25. data/data/shopify_liquid/objects.yml +0 -84
  26. data/data/shopify_liquid/plus_objects.yml +0 -15
  27. data/data/shopify_liquid/tags.yml +0 -30
  28. data/data/shopify_liquid/theme_app_extension_objects.yml +0 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 81371af549f2572360879747bb2e4a05ccddc52e564180d6ae7d0b8e73026e3f
4
- data.tar.gz: 586263191e54240240110853f7a4973413bb5aa1c1e2412c2ac293876a25fc1f
3
+ metadata.gz: cffdb593f51dd3714a1e3d861ebd75e518c8c272781a1c108aecd9f05972370e
4
+ data.tar.gz: 696290b60cc9475824c82a8c9543ce48c7e5ccd687a31c04cf87ecbd4ebe5ebb
5
5
  SHA512:
6
- metadata.gz: b050fff19499529cc00a4382ddc2b525002cfb3058bb4f292d0a2181093d4a4854e62f1cf0736397f0eee40aca8d2f1ec073a3a6093b1e50106fd66600938e90
7
- data.tar.gz: '09f65761f31e53c11c3e723d1651426a6787b5360a67bf8c9c833cd51ab2352b32b18b69580c143193f45ce9438e09a22c95dda66a98c344e4eaee5d3293ce9b'
6
+ metadata.gz: 7df5112c720a4647202b67240c955fde5356c90b91fd29a30865b1e34e95bc955d5a562218bbdaa39d21e7ae501042b94de95444940419e98e319d2e880a0f19
7
+ data.tar.gz: 654f7c3cce5ac06ff3499d4d801b0a27a84a0768bfd9961d824d8cf43123d8cdb64a698a91b24e7bb6be39f64cb4389d92248340b13fc23f61a20b3f9e48d41f
data/CHANGELOG.md CHANGED
@@ -1,3 +1,14 @@
1
+
2
+ v1.12.1 / 2022-12-15
3
+ ==================
4
+
5
+ * `ObjectCompletionProvider` should not provide completion items that don't live in the `SourceIndex` ([#690](https://github.com/Shopify/theme-check/issues/690))
6
+ * Suggest deprecated completion items at the end of the list ([#688](https://github.com/Shopify/theme-check/issues/688))
7
+ * Only suggest filters in SourceIndex ([#689](https://github.com/Shopify/theme-check/issues/689))
8
+ * Remove the `data/shopify_liquid/(tags|filters|objects).yml` files ([#674](https://github.com/Shopify/theme-check/issues/674))
9
+ * Introduce support to range iterations and SFR tags ([#685](https://github.com/Shopify/theme-check/issues/685))
10
+ * Suggest objects for `paginate` ([#686](https://github.com/Shopify/theme-check/issues/686))
11
+
1
12
  v1.12.0 / 2022-12-12
2
13
  ==================
3
14
 
@@ -0,0 +1,22 @@
1
+ {
2
+ "Liquid::ColorFilter": {
3
+ "hex_to_rgba": [
4
+ "color_to_rgb",
5
+ "color_modify"
6
+ ]
7
+ },
8
+ "Liquid::UrlFilter": {
9
+ "img_url": [
10
+ "image_url"
11
+ ],
12
+ "img_tag": [
13
+ "image_tag"
14
+ ],
15
+ "collection_img_url": [
16
+ "img_url"
17
+ ],
18
+ "product_img_url": [
19
+ "img_url"
20
+ ]
21
+ }
22
+ }
@@ -0,0 +1,15 @@
1
+ [
2
+ "alternative_payment_methods",
3
+ "breadcrumb",
4
+ "checkout_html_classes",
5
+ "checkout_scripts",
6
+ "checkout_stylesheets",
7
+ "content_for_footer",
8
+ "content_for_logo",
9
+ "content_for_order_summary",
10
+ "direction",
11
+ "locale",
12
+ "order_summary_toggle",
13
+ "skip_to_content_link",
14
+ "tracking_code"
15
+ ]
@@ -0,0 +1,3 @@
1
+ [
2
+ "app"
3
+ ]
@@ -38,6 +38,16 @@ module ThemeCheck
38
38
  },
39
39
  }
40
40
  end
41
+
42
+ def format_hash(entry)
43
+ return {} unless entry
44
+ return { sortText: entry.name } unless entry.deprecated?
45
+
46
+ {
47
+ tags: [CompletionItemTag::DEPRECATED],
48
+ sortText: "~#{entry.name}",
49
+ }
50
+ end
41
51
  end
42
52
  end
43
53
  end
@@ -13,11 +13,10 @@ module ThemeCheck
13
13
 
14
14
  finder = VariableLookupFinder::AssignmentsFinder.new(content)
15
15
  finder.find!
16
-
17
- finder.assignments.map do |label, potential_lookup|
18
- object, _property = VariableLookupTraverser.lookup_object_and_property(potential_lookup)
19
- object_to_completion(label, object.name)
20
- end
16
+ finder
17
+ .assignments
18
+ .map { |label, potential_lookup| object_to_completion(label, object_name(potential_lookup)) }
19
+ .compact
21
20
  end
22
21
 
23
22
  private
@@ -31,6 +30,11 @@ module ThemeCheck
31
30
  **doc_hash(content),
32
31
  }
33
32
  end
33
+
34
+ def object_name(potential_lookup)
35
+ object, _property = VariableLookupTraverser.lookup_object_and_property(potential_lookup)
36
+ object&.name
37
+ end
34
38
  end
35
39
  end
36
40
  end
@@ -86,7 +86,7 @@ module ThemeCheck
86
86
  {
87
87
  label: filter.name,
88
88
  kind: CompletionItemKinds::FUNCTION,
89
- tags: filter.deprecated? ? [CompletionItemTag::DEPRECATED] : [],
89
+ **format_hash(filter),
90
90
  **doc_hash(content),
91
91
  }
92
92
  end
@@ -39,6 +39,7 @@ module ThemeCheck
39
39
  {
40
40
  label: prop.name,
41
41
  kind: CompletionItemKinds::PROPERTY,
42
+ **format_hash(prop),
42
43
  **doc_hash(content),
43
44
  }
44
45
  end
@@ -11,8 +11,9 @@ module ThemeCheck
11
11
  return [] unless variable_lookup.lookups.empty?
12
12
  return [] if content[context.cursor - 1] == "."
13
13
 
14
- ShopifyLiquid::Object.labels
15
- .select { |w| w.start_with?(partial(variable_lookup)) }
14
+ ShopifyLiquid::SourceIndex
15
+ .objects
16
+ .select { |object| object.name.start_with?(partial(variable_lookup)) }
16
17
  .map { |object| object_to_completion(object) }
17
18
  end
18
19
 
@@ -23,11 +24,12 @@ module ThemeCheck
23
24
  private
24
25
 
25
26
  def object_to_completion(object)
26
- content = ShopifyLiquid::Documentation.object_doc(object)
27
+ content = ShopifyLiquid::Documentation.render_doc(object)
27
28
 
28
29
  {
29
- label: object,
30
+ label: object.name,
30
31
  kind: CompletionItemKinds::VARIABLE,
32
+ **format_hash(object),
31
33
  **doc_hash(content),
32
34
  }
33
35
  end
@@ -20,33 +20,36 @@ module ThemeCheck
20
20
  case tag
21
21
  when Liquid::Assign
22
22
  variable_name = tag.to
23
- variables[variable_name] = assign_tag_as_potential_lookup(tag)
23
+ variables[variable_name] = as_potential_lookup(tag.from.name)
24
24
  when Liquid::For, Liquid::TableRow
25
25
  variable_name = tag.variable_name
26
- variables[variable_name] = iteration_tag_as_potential_lookup(tag)
26
+ variables[variable_name] = as_potential_lookup(tag.collection_name, ['first'])
27
27
  end
28
28
  end
29
29
 
30
30
  private
31
31
 
32
- def assign_tag_as_potential_lookup(tag)
33
- variable_lookup = tag.from.name
34
-
35
- unless variable_lookup.is_a?(Liquid::VariableLookup)
36
- return PotentialLookup.new(input_type_of(variable_lookup), [], variables)
32
+ def as_potential_lookup(variable_lookup, default_lookups = [])
33
+ case variable_lookup
34
+ when Liquid::VariableLookup
35
+ potential_lookup(variable_lookup, default_lookups)
36
+ when Liquid::RangeLookup
37
+ as_potential_lookup(variable_lookup.start_obj)
38
+ when Enumerable
39
+ as_potential_lookup(variable_lookup.first)
40
+ else
41
+ literal_lookup(variable_lookup)
37
42
  end
38
-
39
- name = variable_lookup.name
40
- lookups = variable_lookup.lookups
41
-
42
- PotentialLookup.new(name, lookups, variables)
43
43
  end
44
44
 
45
- def iteration_tag_as_potential_lookup(tag)
46
- variable_lookup = tag.collection_name
45
+ def literal_lookup(variable_lookup)
46
+ name = input_type_of(variable_lookup)
47
+ PotentialLookup.new(name, [], variables)
48
+ end
47
49
 
50
+ def potential_lookup(variable_lookup, default_lookups)
48
51
  name = variable_lookup.name
49
- lookups = [*variable_lookup.lookups, 'first']
52
+ lookups = variable_lookup.lookups.concat(default_lookups)
50
53
 
51
54
  PotentialLookup.new(name, lookups, variables)
52
55
  end
@@ -5,6 +5,8 @@ module ThemeCheck
5
5
  module VariableLookupFinder
6
6
  class AssignmentsFinder
7
7
  class ScopeVisitor
8
+ SCOPE_UNAWARE_NODES = %i(range range_lookup variable variable_lookup)
9
+
8
10
  attr_reader :global_scope, :current_scope
9
11
 
10
12
  def initialize
@@ -22,7 +24,7 @@ module ThemeCheck
22
24
  private
23
25
 
24
26
  def visit(node, scope)
25
- return if node.type_name == :variable_lookup
27
+ return if SCOPE_UNAWARE_NODES.include?(node.type_name)
26
28
 
27
29
  method = :"on_#{node.type_name}"
28
30
  scope = @node_handler.send(method, node, scope) if @node_handler.respond_to?(method)
@@ -27,6 +27,7 @@ module ThemeCheck
27
27
  \s(?:
28
28
  if|elsif|unless|and|or|#{Liquid::Condition.operators.keys.join("|")}
29
29
  |echo
30
+ |paginate
30
31
  |case|when
31
32
  |cycle
32
33
  |in
@@ -73,12 +73,32 @@ module ThemeCheck
73
73
  include TolerantBlockBody
74
74
  end
75
75
 
76
+ class Paginate < Liquid::Tag
77
+ include TolerantBlockBody
78
+ end
79
+
80
+ class Form < Liquid::Tag
81
+ include TolerantBlockBody
82
+ end
83
+
84
+ class Style < Liquid::Tag
85
+ include TolerantBlockBody
86
+ end
87
+
88
+ class Stylesheet < Liquid::Tag
89
+ include TolerantBlockBody
90
+ end
91
+
76
92
  def initialize(standard_tags)
77
93
  @standard_tags = standard_tags
78
94
  @tolerant_tags = {
79
95
  'case' => Case,
80
96
  'for' => For,
97
+ 'form' => Form,
81
98
  'if' => If,
99
+ 'paginate' => Paginate,
100
+ 'style' => Style,
101
+ 'stylesheet' => Stylesheet,
82
102
  'tablerow' => TableRow,
83
103
  'unless' => Unless,
84
104
  }
@@ -30,18 +30,21 @@ module ThemeCheck
30
30
  private
31
31
 
32
32
  def potential_lookup(variable, context)
33
- return variable if context.buffer.nil? || context.buffer.empty?
33
+ return as_potential_lookup(variable) if context.buffer.nil? || context.buffer.empty?
34
34
 
35
35
  buffer = context.buffer[0...context.absolute_cursor]
36
36
  lookups = variable.lookups
37
37
  assignments = find_assignments(buffer)
38
+ assignments_path = []
38
39
 
39
- while assignments[variable.name]
40
+ while assignments[variable.name] && !assignments_path.include?(assignments[variable.name])
40
41
  variable = assignments[variable.name]
41
42
  lookups = variable.lookups + lookups
43
+
44
+ assignments_path << variable
42
45
  end
43
46
 
44
- PotentialLookup.new(variable.name, lookups)
47
+ as_potential_lookup(variable, lookups: lookups)
45
48
  end
46
49
 
47
50
  def find_assignments(buffer)
@@ -50,6 +53,10 @@ module ThemeCheck
50
53
  finder.assignments
51
54
  end
52
55
 
56
+ def as_potential_lookup(variable, lookups: nil)
57
+ PotentialLookup.new(variable.name, lookups || variable.lookups)
58
+ end
59
+
53
60
  def cursor_is_on_bracket_position_that_cant_be_completed(content, cursor)
54
61
  content_before_cursor = content[0..cursor - 1]
55
62
  return false unless /[\[\]]/.match?(content_before_cursor)
@@ -17,7 +17,7 @@ module ThemeCheck
17
17
  private
18
18
 
19
19
  def all
20
- @all ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/deprecated_filters.yml"))
20
+ @all ||= SourceIndex.deprecated_filters
21
21
  .values
22
22
  .each_with_object({}) do |filters, acc|
23
23
  filters.each do |(filter, alternatives)|
@@ -3,17 +3,45 @@ require 'yaml'
3
3
 
4
4
  module ThemeCheck
5
5
  module ShopifyLiquid
6
- # TODO: (6/6) https://github.com/Shopify/theme-check/issues/656
7
- # -
8
- # Remove 'filters.yml' in favor of 'SourceIndex.filters'
9
- # -
10
6
  module Filter
11
7
  extend self
12
8
 
9
+ LABELS_NOT_IN_SOURCE_INDEX = [
10
+ "h",
11
+ "installments_pricing",
12
+ "sentence",
13
+ "t",
14
+ "app_block_path_for",
15
+ "dev_shop?",
16
+ "app_extension_path_for",
17
+ "global_block_type?",
18
+ "app_block_path?",
19
+ "app_extension_path?",
20
+ "app_snippet_path?",
21
+ "registration_uuid_from",
22
+ "handle_from",
23
+ "camelcase",
24
+ "format_code",
25
+ "handle",
26
+ "encode_url_component",
27
+ "recover_password_link",
28
+ "delete_customer_address_link",
29
+ "edit_customer_address_link",
30
+ "cancel_customer_order_link",
31
+ "unit",
32
+ "weight",
33
+ "paragraphize",
34
+ "excerpt",
35
+ "pad_spaces",
36
+ "distance_from",
37
+ "theme_url",
38
+ "link_to_theme",
39
+ "_online_store_editor_live_setting",
40
+ "debug",
41
+ ]
42
+
13
43
  def labels
14
- @labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/filters.yml"))
15
- .values
16
- .flatten
44
+ @labels ||= SourceIndex.filters.map(&:name) + LABELS_NOT_IN_SOURCE_INDEX
17
45
  end
18
46
  end
19
47
  end
@@ -3,23 +3,24 @@ require 'yaml'
3
3
 
4
4
  module ThemeCheck
5
5
  module ShopifyLiquid
6
- # TODO: (4/6) https://github.com/Shopify/theme-check/issues/656
7
- # -
8
- # Remove 'objects.yml' in favor of 'SourceIndex.objects'
9
- # -
10
6
  module Object
11
7
  extend self
12
8
 
9
+ LABELS_NOT_IN_SOURCE_INDEX = [
10
+ "customer_address",
11
+ "product_variant",
12
+ ].freeze
13
+
13
14
  def labels
14
- @labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/objects.yml"))
15
+ @labels ||= SourceIndex.objects.map(&:name) + LABELS_NOT_IN_SOURCE_INDEX
15
16
  end
16
17
 
17
18
  def plus_labels
18
- @plus_labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/plus_objects.yml"))
19
+ @plus_labels ||= SourceIndex.plus_labels
19
20
  end
20
21
 
21
22
  def theme_app_extension_labels
22
- @theme_app_extension_labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/theme_app_extension_objects.yml"))
23
+ @theme_app_extension_labels ||= SourceIndex.theme_app_extension_labels
23
24
  end
24
25
  end
25
26
  end
@@ -21,7 +21,11 @@ module ThemeCheck
21
21
  @objects ||= ObjectState.mark_up_to_date &&
22
22
  load_file(:objects)
23
23
  .concat(built_in_objects)
24
- .map { |hash| ObjectEntry.new(hash) }
24
+ .filter_map do |hash|
25
+ next if (theme_app_extension_labels + labels_only_exposed_in_certain_contexts).include?(hash['name'])
26
+
27
+ ObjectEntry.new(hash)
28
+ end
25
29
  end
26
30
 
27
31
  def tags
@@ -32,6 +36,22 @@ module ThemeCheck
32
36
  .map { |hash| TagEntry.new(hash) }
33
37
  end
34
38
 
39
+ def plus_labels
40
+ @plus_objects ||= load_file("../plus_labels")
41
+ end
42
+
43
+ def theme_app_extension_labels
44
+ @theme_app_extension_labels ||= load_file("../theme_app_extension_labels")
45
+ end
46
+
47
+ def labels_only_exposed_in_certain_contexts
48
+ ['robots'].freeze
49
+ end
50
+
51
+ def deprecated_filters
52
+ @deprecated_filters ||= load_file("../deprecated_filters")
53
+ end
54
+
35
55
  private
36
56
 
37
57
  def load_file(file_name)
@@ -6,6 +6,8 @@ module ThemeCheck
6
6
  module Tag
7
7
  extend self
8
8
 
9
+ LABELS_NOT_IN_SOURCE_INDEX = ["elsif", "ifchanged", { "schema" => "endschema" }, "when"]
10
+
9
11
  def labels
10
12
  @labels ||= tags_file_contents
11
13
  .map { |x| to_label(x) }
@@ -37,12 +39,16 @@ module ThemeCheck
37
39
  label.keys[0]
38
40
  end
39
41
 
40
- # TODO: (5/6) https://github.com/Shopify/theme-check/issues/656
41
- # -
42
- # Remove 'tags.yml' in favor of 'SourceIndex.tags'
43
- # -
44
42
  def tags_file_contents
45
- @tags_file_contents ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/tags.yml"))
43
+ @tags_file_contents ||= SourceIndex.tags.map do |tag|
44
+ opening_tag = tag.name
45
+ closing_tag = "end#{opening_tag}"
46
+ if tag.hash['syntax'] =~ /#{opening_tag}.+#{closing_tag}/m
47
+ { opening_tag => closing_tag }
48
+ else
49
+ opening_tag
50
+ end
51
+ end + LABELS_NOT_IN_SOURCE_INDEX
46
52
  end
47
53
  end
48
54
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module ThemeCheck
3
- VERSION = "1.12.0"
3
+ VERSION = "1.12.1"
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: 1.12.0
4
+ version: 1.12.1
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: 2022-12-12 00:00:00.000000000 Z
11
+ date: 2022-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid
@@ -83,16 +83,13 @@ files:
83
83
  - config/nothing.yml
84
84
  - config/theme_app_extension.yml
85
85
  - data/shopify_liquid/built_in_liquid_objects.json
86
- - data/shopify_liquid/deprecated_filters.yml
86
+ - data/shopify_liquid/deprecated_filters.json
87
87
  - data/shopify_liquid/documentation/filters.json
88
88
  - data/shopify_liquid/documentation/latest.json
89
89
  - data/shopify_liquid/documentation/objects.json
90
90
  - data/shopify_liquid/documentation/tags.json
91
- - data/shopify_liquid/filters.yml
92
- - data/shopify_liquid/objects.yml
93
- - data/shopify_liquid/plus_objects.yml
94
- - data/shopify_liquid/tags.yml
95
- - data/shopify_liquid/theme_app_extension_objects.yml
91
+ - data/shopify_liquid/plus_labels.json
92
+ - data/shopify_liquid/theme_app_extension_labels.json
96
93
  - data/shopify_translation_keys.yml
97
94
  - dev.yml
98
95
  - docs/api/check.md
@@ -1,14 +0,0 @@
1
- ---
2
- Liquid::ColorFilter:
3
- hex_to_rgba:
4
- - color_to_rgb
5
- - color_modify
6
- Liquid::UrlFilter:
7
- img_url:
8
- - image_url
9
- img_tag:
10
- - image_tag
11
- collection_img_url:
12
- - img_url
13
- product_img_url:
14
- - img_url
@@ -1,211 +0,0 @@
1
- ---
2
- # Here's an example workflow that's going to get ya the list of filters available
3
- # ```bash
4
- # spin up storefront-renderer
5
- # spin ssh
6
- # cd storefront-renderer
7
- # bundle exec rake console
8
- # ```
9
- # ```ruby
10
- # Pathname(ENV["HOME"]).join('filters.yml').write(YAML.dump(Liquid::StrainerFactory.global_filter_names))
11
- # ```
12
- # ```bash
13
- # exit
14
- # scp $(spin show -o fqdn):/filters.yml .
15
- # ```
16
- # The list of filters is now in a file named filters.yml in your $(pwd).
17
- # Note that it'll probably need a bit of massaging before including here...
18
- Liquid::StandardFilters:
19
- - times
20
- - h
21
- - uniq
22
- - compact
23
- - url_encode
24
- - escape
25
- - escape_once
26
- - url_decode
27
- - base64_encode
28
- - base64_decode
29
- - base64_url_safe_encode
30
- - base64_url_safe_decode
31
- - truncatewords
32
- - strip_html
33
- - strip_newlines
34
- - replace
35
- - remove
36
- - sort_natural
37
- - replace_first
38
- - replace_last
39
- - remove_first
40
- - remove_last
41
- - newline_to_br
42
- - upcase
43
- - downcase
44
- - capitalize
45
- - divided_by
46
- - minus
47
- - at_most
48
- - at_least
49
- - size
50
- - last
51
- - split
52
- - append
53
- - reverse
54
- - concat
55
- - prepend
56
- - join
57
- - strip
58
- - lstrip
59
- - rstrip
60
- - sort
61
- - where
62
- - map
63
- - default
64
- - first
65
- - slice
66
- - modulo
67
- - abs
68
- - date
69
- - ceil
70
- - round
71
- - truncate
72
- - plus
73
- - floor
74
- FormFilter:
75
- - payment_terms
76
- - installments_pricing
77
- - default_errors
78
- - payment_button
79
- DateFilter:
80
- - date
81
- I18nFilter:
82
- - translate
83
- - time_tag
84
- - sentence
85
- - t
86
- - date
87
- - app_block_path_for
88
- - dev_shop?
89
- - app_extension_path_for
90
- - global_block_type?
91
- - app_block_path?
92
- - app_extension_path?
93
- - app_snippet_path?
94
- - registration_uuid_from
95
- - handle_from
96
- UrlFilter:
97
- - stylesheet_tag
98
- - script_tag
99
- - img_tag
100
- - link_to
101
- - shopify_asset_url
102
- - payment_type_img_url
103
- - payment_type_svg_tag
104
- - placeholder_svg_tag
105
- - img_url
106
- - asset_url
107
- - asset_img_url
108
- - global_asset_url
109
- - file_url
110
- - file_img_url
111
- - product_img_url
112
- - collection_img_url
113
- - article_img_url
114
- - image_url
115
- - preload_tag
116
- JsonFilter:
117
- - json
118
- ColorFilter:
119
- - color_mix
120
- - color_contrast
121
- - color_difference
122
- - brightness_difference
123
- - hex_to_rgba
124
- - color_to_rgb
125
- - color_to_hsl
126
- - color_to_hex
127
- - color_extract
128
- - color_brightness
129
- - color_modify
130
- - color_lighten
131
- - color_darken
132
- - color_saturate
133
- - color_desaturate
134
- MoneyFilter:
135
- - money
136
- - money_with_currency
137
- - money_without_currency
138
- - money_without_trailing_zeros
139
- StringFilter:
140
- - md5
141
- - camelcase
142
- - format_code
143
- - handle
144
- - camelize
145
- - handleize
146
- - url_param_escape
147
- - url_escape
148
- - encode_url_component
149
- CollectionFilter:
150
- - sort_by
151
- - within
152
- - link_to_vendor
153
- - link_to_type
154
- - url_for_type
155
- - url_for_vendor
156
- TagFilter:
157
- - link_to_tag
158
- - highlight_active_tag
159
- - link_to_add_tag
160
- - link_to_remove_tag
161
- CryptoFilter:
162
- - hmac_sha1
163
- - hmac_sha256
164
- - md5
165
- - sha1
166
- - sha256
167
- CustomerAccountFilter:
168
- - customer_login_link
169
- - customer_logout_link
170
- - customer_register_link
171
- - recover_password_link
172
- - delete_customer_address_link
173
- - edit_customer_address_link
174
- - cancel_customer_order_link
175
- CurrencyFormFilter:
176
- - currency_selector
177
- PaginationFilter:
178
- - default_pagination
179
- WeightFilter:
180
- - unit
181
- - weight
182
- - weight_with_unit
183
- TextFilter:
184
- - pluralize
185
- - highlight
186
- - format_address
187
- - paragraphize
188
- - excerpt
189
- - pad_spaces
190
- FontFilter:
191
- - font_face
192
- - font_url
193
- - font_modify
194
- DistanceFilter:
195
- - distance_from
196
- MediaFilter:
197
- - external_video_tag
198
- - video_tag
199
- - model_viewer_tag
200
- - media_tag
201
- - image_tag
202
- - external_video_url
203
- ThemeFilter:
204
- - theme_url
205
- - link_to_theme
206
- - _online_store_editor_live_setting
207
- MetafieldFilter:
208
- - metafield_tag
209
- - metafield_text
210
- DebugFilter:
211
- - debug
@@ -1,84 +0,0 @@
1
- ---
2
- - additional_checkout_buttons
3
- - address
4
- - all_country_option_tags
5
- - all_products
6
- - article
7
- - articles
8
- - block
9
- - blog
10
- - blogs
11
- - canonical_url
12
- - cart
13
- - checkout
14
- - collection
15
- - collections
16
- - comment
17
- - content_for_additional_checkout_buttons
18
- - content_for_header
19
- - content_for_index
20
- - content_for_layout
21
- - country_option_tags
22
- - currency
23
- - current_page
24
- - current_tags
25
- - customer
26
- - customer_address
27
- - discount_allocation
28
- - discount_application
29
- - external_video
30
- - font
31
- - forloop
32
- - form
33
- - fulfillment
34
- - gift_card
35
- - handle
36
- - image
37
- - images
38
- - line_item
39
- - link
40
- - linklist
41
- - linklists
42
- - location
43
- - localization
44
- - metafield
45
- - model
46
- - model_source
47
- - order
48
- - page
49
- - page_description
50
- - page_image
51
- - page_title
52
- - pages
53
- - paginate
54
- - part
55
- - policy
56
- - powered_by_link
57
- - predictive_search
58
- - product
59
- - product_option
60
- - product_variant
61
- - recommendations
62
- - request
63
- - routes
64
- - script
65
- - scripts
66
- - search
67
- - section
68
- - selling_plan
69
- - selling_plan_allocation
70
- - selling_plan_group
71
- - settings
72
- - shipping_method
73
- - shop
74
- - shop_locale
75
- - store_availability
76
- - tablerow
77
- - tax_line
78
- - template
79
- - theme
80
- - transaction
81
- - unit_price_measurement
82
- - variant
83
- - video
84
- - video_source
@@ -1,15 +0,0 @@
1
- ---
2
- - alternative_payment_methods
3
- - breadcrumb
4
- - checkout_html_classes
5
- - checkout_scripts
6
- - checkout_stylesheets
7
- - content_for_footer
8
- - content_for_logo
9
- - content_for_order_summary
10
- - direction
11
- - locale
12
- - order_summary_toggle
13
- - page_title
14
- - skip_to_content_link
15
- - tracking_code
@@ -1,30 +0,0 @@
1
- ---
2
- - assign
3
- - break
4
- - capture
5
- - case: endcase
6
- - comment: endcomment
7
- - continue
8
- - cycle
9
- - decrement
10
- - echo
11
- - else
12
- - elsif
13
- - for: endfor
14
- - form: endform
15
- - if: endif
16
- - ifchanged
17
- - increment
18
- - javascript: endjavascript
19
- - layout
20
- - liquid
21
- - paginate: endpaginate
22
- - raw
23
- - render
24
- - schema: endschema
25
- - section
26
- - style: endstyle
27
- - stylesheet
28
- - tablerow
29
- - unless
30
- - when
@@ -1,2 +0,0 @@
1
- ---
2
- - app