Skip to content
This repository has been archived by the owner on Jul 27, 2024. It is now read-only.

Support app drop in theme app extensions #566

Merged
merged 1 commit into from
Mar 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions config/theme_app_extension.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,7 @@ UndefinedObject:
enabled: true
ignore: []
exclude_snippets: true
config_type: theme_app_extension

RequiredDirectories:
enabled: false
Expand Down
2 changes: 2 additions & 0 deletions data/shopify_liquid/theme_app_extension_objects.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
---
- app
10 changes: 9 additions & 1 deletion lib/theme_check/checks/undefined_object.rb
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ def each_variable_lookup(unique_keys = false)
end
end

def initialize(exclude_snippets: true)
def initialize(config_type: :default, exclude_snippets: true)
@config_type = config_type
@exclude_snippets = exclude_snippets
@files = {}
end
Expand Down Expand Up @@ -111,6 +112,9 @@ def on_end
shopify_plus_objects = ThemeCheck::ShopifyLiquid::Object.plus_labels
shopify_plus_objects.freeze

theme_app_extension_objects = ThemeCheck::ShopifyLiquid::Object.theme_app_extension_labels
theme_app_extension_objects.freeze

each_template do |(name, info)|
if 'templates/customers/reset_password' == name
# NOTE: `email` is exceptionally exposed as a theme object in
Expand All @@ -121,6 +125,8 @@ def on_end
# the checkout template
# https://shopify.dev/docs/themes/theme-templates/checkout-liquid#optional-objects
check_object(info, all_global_objects + shopify_plus_objects)
elsif config_type == :theme_app_extension
check_object(info, all_global_objects + theme_app_extension_objects)
else
check_object(info, all_global_objects)
end
Expand All @@ -129,6 +135,8 @@ def on_end

private

attr_reader :config_type

def ignore?(node)
@exclude_snippets && node.theme_file.snippet?
end
Expand Down
4 changes: 4 additions & 0 deletions lib/theme_check/shopify_liquid/object.rb
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@ def labels
def plus_labels
@plus_labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/plus_objects.yml"))
end

def theme_app_extension_labels
@theme_app_extension_labels ||= YAML.load(File.read("#{__dir__}/../../../data/shopify_liquid/theme_app_extension_objects.yml"))
end
end
end
end
25 changes: 25 additions & 0 deletions test/checks/undefined_object_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -395,4 +395,29 @@ def test_render_block
)
assert_offenses("", offenses)
end

def test_report_on_app_liquid_drop_in_themes
offenses = analyze_theme(
ThemeCheck::UndefinedObject.new(exclude_snippets: false),
"blocks/block_a.liquid" => <<~END,
<p>{{ app.metafields.namespace.key }}</p>
END
)
assert_offenses(<<~END, offenses)
Undefined object `app` at blocks/block_a.liquid:1
END
end

def test_does_not_report_on_app_liquid_drop_in_theme_app_extensions
offenses = analyze_theme(
ThemeCheck::UndefinedObject.new(exclude_snippets: false, config_type: :theme_app_extension),
"blocks/block_a.liquid" => <<~END,
<p>{{ app.metafields.namespace.key }}</p>
END
"snippets/snippet_a.liquid" => <<~END,
<p>{{ app.metafields.namespace.key }}</p>
END
)
assert_offenses("", offenses)
end
end