diff --git a/.gitignore b/.gitignore index 6faf3a13..c94b0b0b 100644 --- a/.gitignore +++ b/.gitignore @@ -15,5 +15,8 @@ packaging/builds .vscode *.DS_Store +.ruby-version +.ruby-gemset + # Theme Liquid docs live at git@github.com:Shopify/theme-liquid-docs.git, /data/shopify_liquid/documentation/ diff --git a/.rubocop.yml b/.rubocop.yml index 6cd1983e..e568edc9 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -1,13 +1,10 @@ -inherit_gem: - rubocop-shopify: rubocop.yml - require: - rubocop-performance - rubocop-minitest - rubocop-rake AllCops: - TargetRubyVersion: 2.6 + TargetRubyVersion: 3.2 Exclude: - 'vendor/bundle/**/*' - 'packaging/builds/**/*' diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a151b32..c9e80496 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,458 +1,5 @@ -v1.15.0 / 2023-04-14 +v0.0.1 / 2023-08-19 ================== - * Improve rule for lazy loading to prevent developers from overusing it - * Introduce `--update-docs` flag to synchronously update Theme Check resources (objects, filters, and tags) (#707) - -v1.14.0 / 2023-01-10 -================== - - * Add shopify-dev link to code completion suggestion title ([#700](https://github.com/Shopify/theme-check/issues/700)) - * Fix examples in `SchemaJsonFormat` ([#698](https://github.com/Shopify/theme-check/issues/698)) - * Do not suggest `escape` filter for already escaped strings ([#692](https://github.com/Shopify/theme-check/issues/692)) - -v1.13.0 / 2023-01-04 -================== - - * Add support for new sections liquid tag in theme check ([#694](https://github.com/Shopify/theme-check/issues/694)) - -v1.12.1 / 2022-12-15 -================== - - * `ObjectCompletionProvider` should not provide completion items that don't live in the `SourceIndex` ([#690](https://github.com/Shopify/theme-check/issues/690)) - * Suggest deprecated completion items at the end of the list ([#688](https://github.com/Shopify/theme-check/issues/688)) - * Only suggest filters in SourceIndex ([#689](https://github.com/Shopify/theme-check/issues/689)) - * Remove the `data/shopify_liquid/(tags|filters|objects).yml` files ([#674](https://github.com/Shopify/theme-check/issues/674)) - * Introduce support to range iterations and SFR tags ([#685](https://github.com/Shopify/theme-check/issues/685)) - * Suggest objects for `paginate` ([#686](https://github.com/Shopify/theme-check/issues/686)) - -v1.12.0 / 2022-12-12 -================== - - * Introduce Intelligent Code Completion ([#672](https://github.com/Shopify/theme-check/issues/672)) - * Update TROUBLESHOOTING.md to include language server stopping guide ([#664](https://github.com/Shopify/theme-check/issues/664)) - * Create troubleshooting doc, update contributing and readme with links ([#630](https://github.com/Shopify/theme-check/issues/630)) - * robots Object in robots.txt file ([#644](https://github.com/Shopify/theme-check/issues/644)). Thanks @we5! - -v1.11.0 / 2022-08-22 -==================== - -## TL;DR - - * New check, overdue fixes and dropped support for ruby 2.6. - -## Features - - * :new: [AssetPreload](https://github.com/Shopify/theme-check/blob/main/docs/checks/asset_preload.md) check ([#605](https://github.com/shopify/theme-check/issues/605)). Thanks @krzksz! - * Encourages the use of the new platform features for some sweet 103 Early Hints gains powered by the `preload_tag` and `preload: true` media filter argument. - -## Fixes: - -### General - - * Add support for new comment syntax `{% # this is an inline comment %}` ([#533](https://github.com/shopify/theme-check/issues/533)) - * Fix UnusedAssign false positives from `{% render ... with|for var %}` ([#608](https://github.com/shopify/theme-check/issues/608)) - * Update list of platform filters ([#626](https://github.com/shopify/theme-check/issues/626)) - -### Language Server - - * Make `runChecks` command respect `onlySingleFileChecks` LSP config ([#624](https://github.com/shopify/theme-check/issues/624)) - * Handle file delete|rename ([#611](https://github.com/shopify/theme-check/issues/611)) - * Prevent server from hanging on error ([#623](https://github.com/shopify/theme-check/issues/623)) - -### Linter - - * Help migrate named sizes (master|pico|etc.) in `img_url` with `DeprecatedFilter` corrector ([#619](https://github.com/shopify/theme-check/issues/619)) - * Fix MissingTemplate `ignore` config interactions (#613) - * Fix MissingRequiredTemplateFiles JSON file corrector ([#616](https://github.com/shopify/theme-check/issues/616)) - * Fixes theme-check-disable when disable comment is followed by another (#617) - * Fix handling of `{% render block %}` in UnusedSnippet ([#615](https://github.com/shopify/theme-check/issues/615)) - * Fix IndexError: string not matched in matching translation keys fixer ([#602](https://github.com/shopify/theme-check/issues/602)) - * Handle variable lookup as names in UnusedAssign ([#612](https://github.com/shopify/theme-check/issues/612)) - -## Breaking change (maybe) - - * Bump min version of ruby to 2.7 ([#609](https://github.com/shopify/theme-check/issues/609)) - * Upstream change from Shopify/liquid as ruby 2.6 is now EOL. - -v1.10.3 / 2022-06-16 -================== - - * Support app drop in theme app extensions ([#566](https://github.com/shopify/theme-check/issues/566)) - * Fix requiring custom check when root is specified ([#565](https://github.com/shopify/theme-check/issues/565)) - * Fix TranslationKeyExists.on_end issue ([#587](https://github.com/shopify/theme-check/issues/587)) - * Fix bad link on check documentation ([#575](https://github.com/shopify/theme-check/issues/575)) - * Update TEMPLATE.md.erb to use shopify.dev URL - * Fixed broken URL ([#574](https://github.com/shopify/theme-check/issues/574)) - * Fix unknown configuration issue for UndefinedObject checker ([#568](https://github.com/shopify/theme-check/issues/568)) - -v1.10.2 / 2022-03-07 -==================== - - * Handle nil paths in json_printer's sort_by ([#561](https://github.com/shopify/theme-check/issues/561)) - * Prevent bad render tags from passing theme-check ([#559](https://github.com/shopify/theme-check/issues/559)) - -v1.10.1 / 2022-02-24 -==================== - - * Revert "Prevent bad render tags from passing theme-check ([#551](https://github.com/shopify/theme-check/issues/551))" - -v1.10.0 / 2022-02-24 -==================== - -## Features - - * Performance Improvements ([#556](https://github.com/shopify/theme-check/issues/556)) - - Boasts ~125x faster `checkOnChange` checks. - - * New language server configuration: `"themeCheck.onlySingleFileChecks"` ([#556](https://github.com/shopify/theme-check/issues/556)) - - When `true`, disables whole theme checks in the editor and makes it so only the open files are checked. - - When `false` (default), behaves as before. - -## Fixes - - * Do not complain about variables passed to the default filter ([#532](https://github.com/shopify/theme-check/issues/532)) - * `extend:` should accept absolute and relative paths ([#555](https://github.com/shopify/theme-check/issues/555)) - * Gracefully handle initialized without config. ([#552](https://github.com/shopify/theme-check/issues/552)) - * Add missing metafield filters ([#550](https://github.com/shopify/theme-check/issues/550)) - * Handle media.sources edge case in RemoteAsset ([#549](https://github.com/shopify/theme-check/issues/549)) - * Disable HTML checks inside Liquid comments ([#548](https://github.com/shopify/theme-check/issues/548)) - * Prevent bad render tags from passing theme-check ([#551](https://github.com/shopify/theme-check/issues/551)) - * Handle rogue carriage returns ([#547](https://github.com/shopify/theme-check/issues/547)) - -v1.9.2 / 2021-12-13 -=================== - - * Improve HTML parsing errors - -v1.9.1 / 2021-12-09 -=================== - - * Fix img_url correction for string properties - -v1.9.0 / 2021-12-01 -=================== - -## Features - - * Add Corrections as Code Actions in Language Server (quickfix + source.fixAll) ([#471](https://github.com/shopify/theme-check/issues/471)) - * Add SchemaJsonFormat check ([#512](https://github.com/shopify/theme-check/issues/512)) - * Add checkOn{Open,Change,Save} Language Server Configurations ([#511](https://github.com/shopify/theme-check/issues/511)) - * Add support for new filters `image_tag` + `image_url` - * Add autocorrection to `img_url` to ease migration - * Deprecate `img_tag`, `img_url` - -## Fixes - - * Fix missing null check in ValidHTMLTranslation ([#517](https://github.com/shopify/theme-check/issues/517)) - * Fix MatchingTranslations check + corrections ([#515](https://github.com/shopify/theme-check/issues/515)) - * Fix RemoteAsset false positive from settings variables ([#516](https://github.com/shopify/theme-check/issues/516)) - * Make SpaceInsideBraces work for missing cases ([#509](https://github.com/shopify/theme-check/issues/509)) - * Fix Liquid in HTML parsing - * Make TranslationKeyExists also check section translations - -v1.8.0 / 2021-11-09 -=================== - -## Features - -**New corrections for the following checks:** - - * `MissingRequiredTemplateFiles` ([#462](https://github.com/shopify/theme-check/issues/462)) - * `RequiredLayoutThemeObject` ([#484](https://github.com/shopify/theme-check/issues/484)) - * `UnusedAssign` ([#380](https://github.com/shopify/theme-check/issues/380)) - -## Fixes - - * Add support for `preload_tag` filter - * Minor Language Server improvements (close logs) ([#472](https://github.com/shopify/theme-check/issues/472)) - -v1.7.2 / 2021-09-24 -=================== - - * Fixup a multithreading problem with our IO Messenger (regression from 1.7.1) ([#468](https://github.com/shopify/theme-check/issues/468)) - -v1.7.1 / 2021-09-24 -=================== - - * Handle Errno::EADDRNOTAVAIL in RemoteAsset ([#465](https://github.com/shopify/theme-check/issues/465)) - * Complete end tags ([#277](https://github.com/shopify/theme-check/issues/277)) - * Do not flag shopify translations as missing or extra ([#407](https://github.com/shopify/theme-check/issues/407)) - -v1.7.0 / 2021-09-20 -=================== - -### Features - - * Handle LSP messages concurrently in the Language Server ([#459](https://github.com/shopify/theme-check/issues/459)) - * Adds progress reporting while checking (:eyes: VS Code status bar) - * Makes completions work while checking (more noticeable on Windows since ruby is 3x slower on Windows) - -v1.6.2 / 2021-09-16 -=================== - - * SpaceInsideBraces fixup for tags without arguments ([#458](https://github.com/shopify/theme-check/issues/458)) - * Fix UnusedAssign bug when variable used in for loop range by bumping Liquid to 5.1 ([#456](https://github.com/shopify/theme-check/issues/456)) - -v1.6.1 / 2021-09-15 -=================== - - * Fix `Undefined method `-' for nil:NilClass` in Node when tag was missing surrounding spaces ([#454](https://github.com/shopify/theme-check/issues/454), [#452](https://github.com/shopify/theme-check/issues/452)) - -v1.6.0 / 2021-09-14 -=================== - -### Features - - * Add `--auto-correct` support to `TranslationKeyExists` (add missing translation as TODO to default locale) ([#422](https://github.com/shopify/theme-check/issues/422)) - * Add `--auto-correct` support to `UnusedSnippet` (delete unused file) ([#416](https://github.com/shopify/theme-check/issues/416)) - * Add `--auto-correct` support to `MissingRequiredTemplateFiles` (create missing files) ([#385](https://github.com/shopify/theme-check/issues/385)) - -### Fixes - - * Fix `undefined method [] of nil` in `replace_placeholders` ([#441](https://github.com/shopify/theme-check/issues/441), [#444](https://github.com/shopify/theme-check/issues/444)) - * Disable ConvertIncludeToRender corrector until we fix [#445](https://github.com/shopify/theme-check/issues/445) ([#446](https://github.com/shopify/theme-check/issues/446)) - * Fix a couple of correction bugs ([#442](https://github.com/shopify/theme-check/issues/442), [#439](https://github.com/shopify/theme-check/issues/439)) - * Fix `AssetSizeCSS` error when size is nil ([#419](https://github.com/shopify/theme-check/issues/419)) - * Write JSON to file, not a Ruby Hash. ([#434](https://github.com/shopify/theme-check/issues/434), [#432](https://github.com/shopify/theme-check/issues/432)) - -v1.5.2 / 2021-09-09 -=================== - - * Handle invalid URIs in RemoteAssetFile ([#418](https://github.com/shopify/theme-check/issues/418), [#438](https://github.com/shopify/theme-check/issues/438)) - * Fix `Bad start_index` error in SpaceInsideBraces ([#423](https://github.com/shopify/theme-check/issues/423)) - * Autocorrect missing directories ([#389](https://github.com/shopify/theme-check/issues/389)) - -v1.5.1 / 2021-09-08 -=================== - - * Fix PaginationSize issue ([#429](https://github.com/shopify/theme-check/issues/429), [#428](https://github.com/shopify/theme-check/issues/428)) - -v1.5.0 / 2021-09-07 -================== - -### Features - - * Add [DeprecatedGlobalAppBlockType](docs/checks/deprecated_global_app_block_type.md) ([#402](https://github.com/shopify/theme-check/issues/402)) - -### Fixes - - * Add Windows CI - * Fix multiple Windows bugs ([#413](https://github.com/shopify/theme-check/issues/413), [#415](https://github.com/shopify/theme-check/issues/415)) - * Fix pagination size as string bug in PaginationSize ([#417](https://github.com/shopify/theme-check/issues/417), [#421](https://github.com/shopify/theme-check/issues/421)) - -v1.4.0 / 2021-08-30 -================== - - * Add new object drop: `predictive_search` - * Bump `TemplateLength` `max_length` default - * Fix `RemoteAsset` incorrectly firing on structured data elements [#393](https://github.com/Shopify/theme-check/issues/393) - * Fix document links not working on open - * Fix `asset_url` document links - * Use better heuristics for `DeprecateLazysizes` - * Add support for `section` document links - * Add support for `include` document links - * Automatically creates the default translation file (`locales/en.default.json`) if it doesn't already exist. - -v1.3.0 / 2021-08-26 -================== - - * Add `--output json` option for the CLI ([#392](https://github.com/shopify/theme-check/issues/392)) - * Add PaginationSize check ([#359](https://github.com/shopify/theme-check/issues/359)) - * Add ConvertIncludeToRender auto corrector ([#341](https://github.com/shopify/theme-check/issues/341)) - * Add MissingTemplate auto corrector ([#388](https://github.com/shopify/theme-check/issues/388)) - * Add `MissingTemplate` `ignore_missing` option ([#394](https://github.com/shopify/theme-check/issues/394)) - * Fix Windows duplicate .bat file problem ([#400](https://github.com/shopify/theme-check/issues/400)) - * Fix substring highlighting inside nodes ([#386](https://github.com/shopify/theme-check/issues/386)) - * Add check for forbidden tags in theme app extension blocks ([#383](https://github.com/shopify/theme-check/issues/383)) - * Improve HTML parsing of liquid attributes ([#381](https://github.com/shopify/theme-check/issues/381)) - * Handle escaped file URIs in language server ([#360](https://github.com/shopify/theme-check/issues/360)) ([#382](https://github.com/shopify/theme-check/issues/382)) - * Change asset size errors into suggestions ([#378](https://github.com/shopify/theme-check/issues/378)) - * Switch to nokogiri 1.12, since it includes html5 support directly now ([#391](https://github.com/shopify/theme-check/issues/391)) - -v1.2.0 / 2021-07-15 -================== - - * Add Windows Support ([#364](https://github.com/shopify/theme-check/issues/364)) - * Ignore empty `{{}}` in SpaceInsideBraces ([#350](https://github.com/shopify/theme-check/issues/350)) - * Switch to main branch - * Minor documentation fixes - -v1.1.0 / 2021-07-06 -================== - - * Add `--fail-level` CLI flag to configure exit code - * Refactor all theme file classes to inherit from `ThemeFile` - * Fix `undefined method liquid?` error when scanning from LSP - * Adding asset document links - * Allow initializing theme app extension configuration files - * Allow disabling registering mock Liquid tags w/ `ThemeCheck::Tags.register_tags = false` - * Support Theme App Extensions - * Add checks for theme app extension block JS/CSS - * Disable Liquid::C when parsing Liquid templates - -v1.0.0 / 2021-06-28 -================== - - * Convert `AssetSizeCSS` to `HtmlCheck` - * Add `DeprecateLazysizes` & `DeprecateBgsizes` checks - * Allow hardcoded CDN urls in `RemoteAsset` - * Bump `LiquidTag` `min_consecutive_statements` default to 5 - * Exclude {% javascript %} and {% stylesheet %} from line counts in `TemplateLength` - * Bump `TemplateLength` `max_length` default to 500 - * Fix `StringScanner#skip(String)` not being supported on some Rubies - * Fix `ParsingHelpers#outside_of_strings` handling of empty strings - * Update to support new `{% render %}` syntax - * Converted `AssetSizeJavaScript` to `HtmlCheck` - -v0.10.2 / 2021-06-18 -================== - - * Fix error when parsing a template with lots of HTML attributes. - * Add `HtmlParsingError` check for reporting errors during HTML parsing. - -v0.10.1 / 2021-06-11 -================== - - * Fix LSP diagnostics not being merged properly when analyzing a single file. - Causing VSCode problems not being cleared after fixing. - -v0.10.0 / 2021-06-08 -================== - - * Add ImgLazyLoading check for recommending loading="lazy" attribute - -v0.9.1 / 2021-06-04 -================== - - * Convert `RemoteAsset` into an `HtmlCheck` - * Move Liquid logic from `RemoteAsset` to a new `AssetUrlFilters` check - -v0.9.0 / 2021-05-28 -================== - - * Introduce HtmlCheck, and convert ParserBlockingJavaScript & ImgWidthAndHeight to it - * Move `script-tag` validation from ParserBlockingJavaScript to ParserBlockingScriptTag - * Add ability to ignore individual checks using file patterns - * Introduce single file and whole theme checks to optimize LSP diagnostics - * Fix TemplateLength counter not being reseted on each document - * Add missing category to ValidHTMLTranslation - * Set Ruby default encodings to UTF-8 to fix encoding issues - * Add ContentForHeaderModification check to prevent relying on the content of ``content_for_header` - * Fix `Content-Length` in LSP responses - * Fix disabling checks that emit offences in `on_end` - * Fix completion bug in `filter_completion_provider` - -v0.8.3 / 2021-05-17 -================== - - * Making sure VERSION is set before referencing it - -v0.8.2 / 2021-05-14 -=================== - - * Bump NestedSnippet max_nesting_level to 3 - * Add a message to help debug errors, and timeout checks after 5 sec - * Object Completions Everywhere! - * Include operators to space inside braces check - -0.8.1 / 2021-04-22 -================== - - * Add consistent spacing around the pipe character (`|`) in variable expressions to the `SpaceInsideBrace` check ([#73](https://github.com/shopify/theme-check/issues/73)) - * Add ReCaptcha system translation ([#265](https://github.com/shopify/theme-check/issues/265)) - * Fix document links in `{% liquid %}` tags ([#263](https://github.com/shopify/theme-check/issues/263)) - * Fix theme-check-disable for checks based on regular expressions ([#242](https://github.com/shopify/theme-check/issues/242)) - * Fix VS Code crash on new window ([#264](https://github.com/shopify/theme-check/issues/264)) - * Rescue errors thrown by remote_asset_file - -0.8.0 / 2021-04-13 -================== - - * Set minimal Ruby version to 2.6 - -0.7.3 / 2021-04-13 -================== - - * Refactor CLI option parsing - -0.7.2 / 2021-04-12 -================== - - * Fixup bug in RemoteAsset causing Language Server to break - -0.7.1 / 2021-04-12 -================== - - * Fix High CPU Bug in RemoteAsset check - * Fix document link for render tags that trim whitespace. - -0.7.0 / 2021-04-08 -================== - - * Add [RemoteAsset Check](/docs/checks/remote_asset.md) - * Fixes: - * Don't hang on self closing img tags ([#247](https://github.com/shopify/theme-check/issues/247)) - * Fix document links from different root - -0.6.0 / 2021-03-23 -================== - - * Add [Snippet Completion](https://screenshot.click/23-22-5tyee-kv5vl.mp4) ([#223](https://github.com/shopify/theme-check/issues/223)) - * Add [Snippet Document Links](https://screenshot.click/23-09-71h84-pp23z.mp4) ([#223](https://github.com/shopify/theme-check/issues/223)) - * Add [ImgWidthAndHeight](/docs/checks/img_width_and_height.md) check ([#216](https://github.com/shopify/theme-check/issues/216)) - * Add [AssetSizeCSS](/docs/checks/asset_size_css.md) check ([#206](https://github.com/shopify/theme-check/issues/206)) - * Do not flag SystemTranslations as errors ([#114](https://github.com/shopify/theme-check/issues/114)) - * Do not complete deprecated filters ([#205](https://github.com/shopify/theme-check/issues/205)) - * Add `-C, --config path` support ([#213](https://github.com/shopify/theme-check/issues/213)) - -0.5.0 / 2021-03-12 -================== - - * Add [AssetSizeJavaScript](/docs/checks/asset_size_javascript.md) check ([#194](https://github.com/Shopify/theme-check/pull/194)) - * Add [documentation for all checks](/docs/checks) - * Make documentation for checks mandatory - * Add link to documentation from within the editor (via `codeDescription` in the Language Server) (![Demo](https://screenshot.click/10-29-cjx7r-4asor.mp4)) - * Allow checks to have multiple categories - * Fix multiple occurrences of UndefinedObject not being reported ([#192](https://github.com/shopify/theme-check/issues/192)) - -v0.4.0 / 2021-02-25 -================== - - * Add Completion Engine ([#161](https://github.com/shopify/theme-check/issues/161)) - * Add init command to CLI ([#174](https://github.com/shopify/theme-check/issues/174)) - * Refactor start and end Position logic ([#172](https://github.com/shopify/theme-check/issues/172)) - -v0.3.3 / 2021-02-18 -================== - - * Fix column_end issues ([#164](https://github.com/Shopify/theme-check/issues/164)) - * Fix stack overflow in UndefinedObject + UnusedAssign when snippets renders itself ([#165](https://github.com/Shopify/theme-check/issues/165)) - -v0.3.2 / 2021-02-17 -================== - - * Ignore snippets in UndefinedObject check - -v0.3.1 / 2021-02-16 -=================== - - * Fixup version flag - -v0.3.0 / 2021-02-16 -=================== - - * Add ParserBlockingJavaScript Check ([#78](https://github.com/Shopify/theme-check/issues/78), [#146](https://github.com/Shopify/theme-check/issues/146)) - * Internal refactor to enable running theme-check in servers ([#145](https://github.com/Shopify/theme-check/issues/145), [#148](https://github.com/Shopify/theme-check/issues/148)) - * Add -v, --version flag ([#126](https://github.com/Shopify/theme-check/issues/126)) - * Exclude content of {% schema %} in line count for TemplateLength ([#140](https://github.com/Shopify/theme-check/issues/140)) - * Fix Language Server removed files bug ([#136](https://github.com/Shopify/theme-check/issues/136)) - * Add ignore config ([#147](https://github.com/Shopify/theme-check/issues/147)) - * Add ability to disable checks with comments ([#79](https://github.com/Shopify/theme-check/issues/79)) - * Adding checks for shopify plus objects in checkout ([#121](https://github.com/Shopify/theme-check/issues/121)) - -v0.2.2 / 2021-01-22 -=================== - - * [Language Server] Send empty dianogstics to flush errors + * Use Shopify's theme-check as a starting point for platformOS-lsp diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index 03d40f51..ebd4aaf5 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -55,7 +55,7 @@ further defined and clarified by project maintainers. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at opensource@shopify.com. All +reported by contacting the project team at support@platformos.com. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. @@ -67,7 +67,7 @@ members of the project's leadership. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +This Code of Conduct is adapted from Shopify's theme-check, which adapted it from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e02c739c..7ee633a3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,4 @@ -# Contributing to Theme Check - -We love receiving pull requests! - -For your contribution to be accepted you will need to sign the [Shopify Contributor License Agreement (CLA)](https://cla.shopify.com/). +# Contributing to platformOS Check ## Standards @@ -15,14 +11,15 @@ For your contribution to be accepted you will need to sign the [Shopify Contribu ## How to contribute -1. Fork it ( https://github.com/Shopify/theme-check/fork ) +1. Fork it ( https://github.com/Platform-OS/platformos-lsp ) 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) 5. Create a new Pull Request -## Run Language Server -If you're making changes to the language server and you want to debug, you can run the repo's version of `theme-check-language-server`. +## Run Language Server + +If you're making changes to the language server and you want to debug, you can run the repo's version of `platformos-check-language-server`. ### Setup @@ -32,38 +29,26 @@ Before configuring your IDE, run the following commands in a terminal: ```bash mkdir -p $HOME/bin ``` - * Paste this script to create an executable wrapper in `$HOME/bin/theme-check-language-server` for language server + * Paste this script to create an executable wrapper in `$HOME/bin/platformos-check-language-server` for language server ```bash - cat <<-'EOF' > $HOME/bin/theme-check-language-server + cat <<-'EOF' > $HOME/bin/platformos-check-language-server #!/usr/bin/env bash - cd "$HOME/src/github.com/Shopify/theme-check" &> /dev/null - chruby () { - source '/opt/dev/sh/chruby/chruby.sh' - chruby "$@" - } - export THEME_CHECK_DEBUG=true - export THEME_CHECK_DEBUG_LOG_FILE="/tmp/theme-check-debug.log" - touch "$THEME_CHECK_DEBUG_LOG_FILE" - chruby 2.7 &>/dev/null + cd "$HOME/src/github.com/Platform-OS/platformos-lsp" &> /dev/null + export PLATFORMOS_CHECK_DEBUG=true + export PLATFORMOS_CHECK_DEBUG_LOG_FILE="/tmp/platformos-check-debug.log" + touch "$PLATFORMOS_CHECK_DEBUG_LOG_FILE" gem env &>/dev/null - bin/theme-check-language-server + bin/platformos-check-language-server EOF ``` * Make the script executable ```bash - chmod u+x $HOME/bin/theme-check-language-server + chmod u+x $HOME/bin/platformos-check-language-server ``` #### Configure VS Code -* Install the [Shopify Liquid](https://github.com/shopify/theme-check-vscode) plugin - -* Add the following to `settings.json`: - -```json -"shopifyLiquid.formatterDevPreview": true, -"shopifyLiquid.languageServerPath": "/Users//bin/theme-check-language-server", -``` +TODO #### Configure Vim @@ -71,13 +56,13 @@ If you use `coc.nvim` as your completion engine, add this to your CocConfig: ```json "languageserver": { - "theme-check": { - "command": "/Users//bin/theme-check-language-server", + "platformos-check": { + "command": "/Users//bin/platformos-check-language-server", "trace.server": "verbose", - "filetypes": ["liquid", "liquid.html"], - "rootPatterns": [".theme-check.yml", "snippets/*"], + "filetypes": ["liquid"], + "rootPatterns": [".platformos-check.yml, .pos"], "settings": { - "themeCheck": { + "platformosCheck": { "checkOnSave": true, "checkOnEnter": true, "checkOnChange": false @@ -88,12 +73,12 @@ If you use `coc.nvim` as your completion engine, add this to your CocConfig: ### Confirm Setup -* In another terminal from the root of theme check run `tail -f /tmp/theme-check-debug.log` to watch the server logs +* In another terminal from the root of theme check run `tail -f /tmp/platformos-check-debug.log` to watch the server logs * Restart your IDE, confirm the response for initialize in the logs is pointing to the language server in the `$HOME/bin` directory (the version will be different) ```json "serverInfo": { - "name": "/Users/johndoe/bin/theme-check-language-server", + "name": "/Users/johndoe/bin/platformos-check-language-server", "version": "1.10.3" } ``` @@ -102,21 +87,21 @@ If you use `coc.nvim` as your completion engine, add this to your CocConfig: ## Running Tests ``` -bundle install # Or `dev up` if you're from Shopify +bundle install bundle exec rake ``` -## Checking a theme +## Checking a pOS app ``` -bin/theme-check /path/to/your/theme +bin/platformos-check /path/to/your/app ``` ## Creating a new "Check" Run `bundle exec rake "new_check[MyNewCheckName]"` to generate all the files required to create a new check. -Check the [Check API](/docs/api/check.md) for how to implement a check. Also take a look at other checks in [lib/theme_check/checks](/lib/theme_check/checks). +Check the [Check API](/docs/api/check.md) for how to implement a check. Also take a look at other checks in [lib/platformos_check/checks](/lib/platformos_check/checks). We done implementing your check, add it to `config/default.yml` to enable it: @@ -146,23 +131,23 @@ MyNewCheckName: ## Debugging -A couple of things are turned on when the `THEME_CHECK_DEBUG` environment variable is set. +A couple of things are turned on when the `PLATFORMOS_CHECK_DEBUG` environment variable is set. 1. The check timeout is turned off. This means you can add `binding.pry` in tests and properly debug with `bundle exec rake tests:in_memory` 2. The `--profile` flag appears. You can now create Flamegraphs to inspect performance. ``` -export THEME_CHECK_DEBUG=true +export PLATFORMOS_CHECK_DEBUG=true # The following will behave slightly differently -bin/theme-check ../dawn +bin/platformos-check ../dawn bundle exec rake tests:in_memory # The following becomes available -bin/theme-check --profile ../dawn +bin/platformos-check --profile ../dawn # The LanguageServer will log the JSONRPC calls to STDERR -bin/theme-check-language-server +bin/platformos-check-language-server ``` ### Profiling @@ -171,10 +156,10 @@ bin/theme-check-language-server #### Flamegraph -With the `--profile` flag, you can run theme-check on a theme and the `ruby-prof-flamegraph` printer will output profiling information in a format [Flamegraph](/brendangregg/FlameGraph) understands. +With the `--profile` flag, you can run platformos-check on a theme and the `ruby-prof-flamegraph` printer will output profiling information in a format [Flamegraph](/brendangregg/FlameGraph) understands. -**Setup:** +**Setup:** ```bash # clone the FlameGraph repo somewhere @@ -187,10 +172,10 @@ alias flamegraph=/path/to/FlameGraph/flamegraph.pl **Profiling:** ``` -# run theme-check with --profile +# run platformos-check with --profile # pass the output to flamegraph # dump the output into an svg file -bin/theme-check --profile ../dawn \ +bin/platformos-check --profile ../dawn \ | flamegraph --countname=ms --width=1750 \ > /tmp/fg.svg diff --git a/Gemfile b/Gemfile index 968668d2..843b38b3 100644 --- a/Gemfile +++ b/Gemfile @@ -3,7 +3,7 @@ source "https://rubygems.org" git_source(:github) { |repo_name| "https://github.com/#{repo_name}" } -# Specify your gem's dependencies in theme-check.gemspec +# Specify your gem's dependencies in platformos-check.gemspec gemspec gem 'bundler' @@ -24,8 +24,7 @@ group :development do gem 'solargraph' end -gem 'rubocop', '~> 1.12.0', require: false -gem 'rubocop-performance', '~> 1.10.2', require: false -gem 'rubocop-shopify', '~> 1.0.7', require: false -gem 'rubocop-minitest', '~> 0.11.0', require: false -gem 'rubocop-rake', '~> 0.5.1', require: false +gem 'rubocop', require: false +gem 'rubocop-performance', require: false +gem 'rubocop-minitest', require: false +gem 'rubocop-rake', require: false diff --git a/Guardfile b/Guardfile index 101601cd..8f2d618d 100644 --- a/Guardfile +++ b/Guardfile @@ -2,6 +2,6 @@ guard :minitest do watch(%r{^test/(.*)_test.rb$}) - watch(%r{^lib/theme_check/(.*)\.rb$}) { |m| "test/#{m[1]}_test.rb" } + watch(%r{^lib/platformos_check/(.*)\.rb$}) { |m| "test/#{m[1]}_test.rb" } watch(%r{^test/test_helper\.rb$}) { 'test' } end diff --git a/LICENSE.md b/LICENSE.md index 6e1f9f5a..ff718a50 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,5 +1,5 @@ -Copyright 2020-present, Shopify Inc. +Copyright 2023-present, platformOS. Contains code from activesupport Copyright (c) 2005-2019 David Heinemeier Hansson diff --git a/README.md b/README.md index d0a14289..fdf12494 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,6 @@ -# Theme Check ✅ - A linter for Themes +# platformOS Check ✅ - A linter for platformOS -Think RuboCop, or eslint, but for Shopify themes. - -Theme Check is a command line tool that helps you follow Shopify Themes & Liquid best practices by analyzing the Liquid & JSON inside your theme. - -Theme Check is also available [inside some code editors](https://github.com/Shopify/theme-check/wiki). +PlaformOS Check is a tool that helps you follow platformOS recommendations & best practices by analyzing the Liquid inside your app. ![](docs/preview.png) @@ -12,37 +8,32 @@ Theme Check is also available [inside some code editors](https://github.com/Shop Theme Check currently checks for the following: -✅ Liquid syntax errors -✅ JSON syntax errors -✅ Missing snippet & section templates -✅ Unused `{% assign ... %}` -✅ Unused snippet templates -✅ Template length -✅ Deprecated tags -✅ Unknown tags -✅ Unknown filters -✅ Missing `{{ content_for_* }}` in `theme.liquid` -✅ Excessive nesting of snippets -✅ Missing or extra spaces inside `{% ... %}` and `{{ ... }}` -✅ Missing default locale file -✅ Unmatching translation keys in locale files -✅ Using unknown translation keys in `{{ 'missing_key' | t }}` -✅ Using several `{% ... %}` instead of `{% liquid ... %}` -✅ Undefined [objects](https://shopify.dev/docs/themes/liquid/reference/objects) -✅ Deprecated filters -✅ Missing `theme-check-enable` comment +✅ Liquid syntax errors +✅ JSON syntax errors +✅ Missing snippet & section templates +✅ Unused `{% assign ... %}` +✅ Unused snippet templates +✅ Template length +✅ Deprecated tags +✅ Unknown tags +✅ Unknown filters +✅ Missing or extra spaces inside `{% ... %}` and `{{ ... }}` +✅ Using several `{% ... %}` instead of `{% liquid ... %}` +✅ Undefined objects +✅ Deprecated filters +✅ Missing `platformos-check-enable` comment As well as checks that prevent easy to spot performance problems: -✅ Use of [parser-blocking](/docs/checks/parser_blocking_javascript.md) JavaScript -✅ [Use of non-Shopify domains for assets](/docs/checks/remote_asset.md) -✅ [Missing width and height attributes on `img` tags](/docs/checks/img_width_and_height.md) -✅ [Too much JavaScript](/docs/checks/asset_size_javascript.md) -✅ [Too much CSS](/docs/checks/asset_size_css.md) +✅ Use of [parser-blocking](/docs/checks/parser_blocking_javascript.md) JavaScript +✅ [Use of non-platformOS domains for assets](/docs/checks/remote_asset.md) +✅ [Missing width and height attributes on `img` tags](/docs/checks/img_width_and_height.md) +✅ [Too much JavaScript](/docs/checks/asset_size_javascript.md) +✅ [Too much CSS](/docs/checks/asset_size_css.md) For detailed descriptions and configuration options, [take a look at the complete list.](/docs/checks/) -With more to come! Suggestions welcome ([create an issue](https://github.com/Shopify/theme-check/issues)). +With more to come! Suggestions welcome ([create an issue](https://github.com/Platform-OS/platformos-lsp/issues)). ## Requirements @@ -50,114 +41,62 @@ With more to come! Suggestions welcome ([create an issue](https://github.com/Sho ## Installation -Theme Check is available through Homebrew _or_ RubyGems. - -**Homebrew** - -You’ll need to run `brew tap` first to add Shopify’s third-party repositories to Homebrew. - -```sh -brew tap shopify/shopify -brew install theme-check -``` - -**RubyGems** - -```sh -gem install theme-check -``` - -## Usage - -``` -theme-check /path/to/your/theme - -# or from /path/to/your/theme -theme-check -``` - -Run `theme-check --help` to get full usage. +TODO ## Configuration -Add a `.theme-check.yml` file at the root of your theme to configure: - -```yaml -# If your theme is not using the supported directory structure, provide the root path -# where to find the `templates/`, `sections/`, `snippets/` directories as they would -# be uploaded to Shopify. -root: dist - -# It is possible to extend theme-check with custom checks -require: - - ./path/to/my_custom_check.rb - -TemplateLength: - # Disable some checks - enabled: false - # Or configure options - max_length: 300 - # Or ignore certain paths - ignore: - - snippets/icon-* - # Or change the severity (error|suggestion|style) - severity: suggestion - -# Enable a custom check -MyCustomCheck - enabled: true -``` +Add a `.platformos-check.yml` file at the root of your app. See [config/default.yml](config/default.yml) for available options & defaults. ## Disable checks with comments -Use Liquid comments to disable and re-enable all checks for a section of your template: +Use Liquid comments to disable and re-enable all checks for a section of your file: ```liquid -{% # theme-check-disable %} +{% # platformos-check-disable %} {% assign x = 1 %} -{% # theme-check-enable %} +{% # platformos-check-enable %} ``` Disable a specific check by including it in the comment: ```liquid -{% # theme-check-disable UnusedAssign %} +{% # platformos-check-disable UnusedAssign %} {% assign x = 1 %} -{% # theme-check-enable UnusedAssign %} +{% # platformos-check-enable UnusedAssign %} ``` Disable multiple checks by including them as a comma-separated list: ```liquid -{% # theme-check-disable UnusedAssign,SpaceInsideBraces %} +{% # platformos-check-disable UnusedAssign,SpaceInsideBraces %} {%assign x = 1%} -{% # theme-check-enable UnusedAssign,SpaceInsideBraces %} +{% # platformos-check-enable UnusedAssign,SpaceInsideBraces %} ``` Disable checks for the _entire document_ by placing the comment on the first line: ```liquid -{% # theme-check-disable SpaceInsideBraces %} +{% # platformos-check-disable SpaceInsideBraces %} {%assign x = 1%} ``` ## Exit Code and `--fail-level` -Use the `--fail-level` (default: `error`) flag to configure the exit code of theme-check. Useful in CI scenarios. +Use the `--fail-level` (default: `error`) flag to configure the exit code of platformos-check. Useful in CI scenarios. Example: ``` # Make CI fail on styles warnings, suggestions, and errors -theme-check --fail-level style path_to_theme +platformos-check --fail-level style path_to_app # Make CI fail on suggestions, and errors -theme-check --fail-level suggestion path_to_theme +platformos-check --fail-level suggestion path_to_app # Make CI fail on errors -theme-check path_to_theme +platformos-check path_to_app ``` There are three fail levels: @@ -170,7 +109,7 @@ Exit code meanings: - 0: Success! - 1: Your code doesn't pass the checks -- 2: There's a bug in theme-check +- 2: There's a bug in platformos-check If you would like to change the severity of a check, you can do so with the `severity` attribute. Example: @@ -182,15 +121,15 @@ DeprecateLazysizes: ## Language Server Configurations -- `themeCheck.checkOnOpen` (default: `true`) makes it so theme check runs on file open. -- `themeCheck.checkOnChange` (default: `true`) makes it so theme check runs on file change. -- `themeCheck.checkOnSave` (default: `true`) makes it so theme check runs on file save. -- `themeCheck.onlySingleFileChecks` (default: `false`) makes it so we only check the opened files and disable "whole theme" checks (e.g. UnusedSnippet, TranslationKeyExists) +- `platformosCheck.checkOnOpen` (default: `true`) makes it so theme check runs on file open. +- `platformosCheck.checkOnChange` (default: `true`) makes it so theme check runs on file change. +- `platformosCheck.checkOnSave` (default: `true`) makes it so theme check runs on file save. +- `platformosCheck.onlySingleFileChecks` (default: `false`) makes it so we only check the opened files and disable "whole theme" checks (e.g. UnusedSnippet, TranslationKeyExists) -⚠️ **Note:** Quickfixes only work on a freshly checked file. If any of those configurations are turned off, you will need to rerun theme-check in order to apply quickfixes. +⚠️ **Note:** Quickfixes only work on a freshly checked file. If any of those configurations are turned off, you will need to rerun platformos-check in order to apply quickfixes. In VS Code, these can be set directly in your `settings.json`. ## Contributing -For guidance on contributing, refer to this [doc](/CONTRIBUTING) +For guidance on contributing, refer to this [doc](/CONTRIBUTING.md) diff --git a/RELEASING.md b/RELEASING.md index f742e80f..b0bb045a 100644 --- a/RELEASING.md +++ b/RELEASING.md @@ -1,8 +1,8 @@ -## Releasing Theme Check +## Releasing platformOS Check 1. Check the Semantic Versioning page for info on how to version the new release: http://semver.org -2. Run the following command to update the version in `lib/theme_check/version.rb` and replace the `THEME_CHECK_VERSION` placeholder in the documentation for new rules: +2. Run the following command to update the version in `lib/platformos_check/version.rb` and replace the `PLATFORMOS_CHECK_VERSION` placeholder in the documentation for new rules: ```bash VERSION="X.X.X" @@ -14,17 +14,17 @@ 4. Commit your changes and make a PR. ```bash - git checkout -b "bump/theme-check-$VERSION" - git add docs/checks CHANGELOG.md lib/theme_check/version.rb - git commit -m "Bump theme-check version to $VERSION" - hub compare "main:bump/theme-check-$VERSION" + git checkout -b "bump/platformos-check-$VERSION" + git add docs/checks CHANGELOG.md lib/platformos_check/version.rb + git commit -m "Bump platformos-check version to $VERSION" + hub compare "main:bump/platformos-check-$VERSION" ``` 5. Merge your PR to main. -6. On [Shipit](https://shipit.shopify.io/shopify/theme-check/rubygems), deploy your commit. +6. On [Shipit](https://shipit.shopify.io/shopify/platformos-check/rubygems), deploy your commit. -7. [Create a GitHub release](https://github.com/Shopify/theme-check/releases/new) for the change. +7. [Create a GitHub release](https://github.com/Shopify/platformos-check/releases/new) for the change. ``` VERSION=v1.X.Y @@ -35,61 +35,3 @@ ``` (It's a good idea to copy parts of the CHANGELOG in there) - - -## Homebrew Release Process - -1. Release `theme-check` on RubyGems by following the steps in the previous section. - -2. Generate the homebrew formula. - - ```bash - rake package - ``` - -3. Copy the formula over in the [`homebrew-shopify`](https://github.com/Shopify/homebrew-shopify) repository. - - ```bash - VERSION=X.X.X - cp packaging/builds/$VERSION/theme-check.rb ../homebrew-shopify - ``` - -4. Create a branch + a commit on the [`homebrew-shopify`](https://github.com/Shopify/homebrew-shopify) repository. - - ```bash - git checkout -b "bump/theme-check-$VERSION" - git add theme-check.rb - git commit -m "Bump theme-check version to $VERSION" - ``` - -5. Create a pull-request for those changes on the [`homebrew-shopify`](https://github.com/Shopify/homebrew-shopify) repository. - - ```bash - # shortcut if you have `hub` installed - hub compare "main:bump/theme-check-$VERSION" - ``` - -## Shopify CLI Release Process - -1. Release `theme-check` on RubyGems by following the steps in the previous section. - -2. Update the `theme-check` version in [`shopify-cli`](https://github.com/shopify/shopify-cli)'s `shopify-cli.gemspec` file. - -3. Run `bundle update theme-check` and get an updated `Gemfile.lock` - -4. Create a branch + a commit on the [`shopify-cli`](https://github.com/Shopify/shopify-cli) repository. - - ```bash - VERSION=X.X.X - git checkout -b "bump/theme-check-$VERSION" - git add Gemfile.lock - git add shopify-cli.gemspec - git commit -m "Bump theme-check version to $VERSION" - ``` - -5. Create a pull-request for those changes on the [`shopify-cli`](https://github.com/Shopify/shopify-cli) repository. - - ```bash - # shortcut if you have `hub` installed - hub compare "main:bump/theme-check-$VERSION" - ``` diff --git a/Rakefile b/Rakefile index 64aa7f50..89ddfb27 100644 --- a/Rakefile +++ b/Rakefile @@ -34,13 +34,13 @@ RuboCop::RakeTask.new task default: [:test, :rubocop] namespace :package do - require 'theme_check/packager' + require 'platformos_check/packager' task all: [:homebrew] desc("Builds a Homebrew package of the CLI") task :homebrew do - ThemeCheck::Packager.new.build_homebrew + PlatformosCheck::Packager.new.build_homebrew end end @@ -49,27 +49,27 @@ task(package: 'package:all') desc("Update files in the repo to match new version") task :prerelease, [:version] do |_t, args| - require 'theme_check/releaser' - ThemeCheck::Releaser.new.release(args.version) + require 'platformos_check/releaser' + PlatformosCheck::Releaser.new.release(args.version) end desc("Download theme-liquid-docs") task :download_theme_liquid_docs do - require 'theme_check/shopify_liquid/source_manager' + require 'platformos_check/shopify_liquid/source_manager' - ThemeCheck::ShopifyLiquid::SourceManager.download + PlatformosCheck::ShopifyLiquid::SourceManager.download end desc "Create a new check" task :new_check, [:name] do |_t, args| - require "theme_check/string_helpers" + require "platformos_check/string_helpers" class_name = args.name - base_name = ThemeCheck::StringHelpers.underscore(class_name) - code_source = "lib/theme_check/checks/#{base_name}.rb" + base_name = PlatformosCheck::StringHelpers.underscore(class_name) + code_source = "lib/platformos_check/checks/#{base_name}.rb" doc_source = "docs/checks/#{base_name}.md" test_source = "test/checks/#{base_name}_test.rb" erb( - "lib/theme_check/checks/TEMPLATE.rb.erb", code_source, + "lib/platformos_check/checks/TEMPLATE.rb.erb", code_source, class_name: class_name, ) erb( diff --git a/TROUBLESHOOTING.md b/TROUBLESHOOTING.md index b8562dba..d7605edc 100644 --- a/TROUBLESHOOTING.md +++ b/TROUBLESHOOTING.md @@ -1,6 +1,6 @@ # Troubleshooting -## Issues with Language Server +## Issues with Language Server ### Language server erroring out on startup @@ -10,39 +10,10 @@ Calling `DidYouMean::SPELL_CHECKERS.merge!(error_name => spell_checker)' has bee /Users/johndoe/.gem/ruby/3.1.2/gems/bundler-2.2.22/lib/bundler/spec_set.rb:91:in `block in materialize': Could not find ruby-prof-0.18.0 in any of the sources (Bundler::GemNotFound) ``` -Confirm the version of theme-check matches the version in the wrapper in `~/bin/theme-language-server`. If it doesn't match the ruby version, run the following from the theme-check directory: +Confirm the version of platformos-check matches the version in the wrapper in `~/bin/platformos-check-language-server`. If it doesn't match the ruby version, run the following from the platformos-check directory: ```bash -chruby 3.1.2 #your `~/bin/theme-language-server` ruby version -bundle install -``` - -### Language server changes not propogating to your IDE - -Look at logs for language server and check the response for initialize. If it looks like this, you're pointing to the Shopify CLI and not the language server in the repo: - -```json - "serverInfo": { - "name": "/opt/homebrew/bin/shopify", - "version": "1.10.3" - } -``` - -Check the config for your IDE/completion engine and confirm the Shopify CLI path isn't present (this by default overrides theme-check pointing to the repo's language server). If you're using VS Code this would be in your `settings.json`. - -The response for initialize should look like this: - -```json - "serverInfo": { - "name": "/Users/johndoe/src/github.com/Shopify/theme-check/bin/theme-check-language-server", - "version": "1.10.3" - } -``` - -If this isn't an issue, confirm the theme check repo's version of ruby matches the ruby version of your theme. If it doesn't, from the theme-check repo run: - -```bash -chruby 3.1.2 #your theme ruby version +chruby 3.1.2 #your `~/bin/platformos-check-language-server` ruby version bundle install ``` @@ -50,16 +21,15 @@ bundle install To debug, confirm these steps are included in your local language server startup script: -```bash -export THEME_CHECK_DEBUG=true -export THEME_CHECK_DEBUG_LOG_FILE="/tmp/theme-check-debug.log" -touch "$THEME_CHECK_DEBUG_LOG_FILE" +```bash +export PLATFORMOS_CHECK_DEBUG=true +export PLATFORMOS_CHECK_DEBUG_LOG_FILE="/tmp/platformos-check-debug.log" +touch "$PLATFORMOS_CHECK_DEBUG_LOG_FILE" ``` An example script can be found [here](/CONTRIBUTING.md#run-language-server). -Open `/tmp/theme-check-debug.log` in your IDE. Check if there are any exceptions being raised by language server. +Open `/tmp/platformos-check-debug.log` in your IDE. Check if there are any exceptions being raised by language server. If there are no exceptions, check if there are any logs that aren't in jsonrpc. The language server and client use stdin and stdout to communicate using jsonrpc. Debugging statements that aren't in a jsonrpc format might trigger unexpected behavior (this includes any logs from language server or echo statements in your language server script). - diff --git a/bin/theme-check b/bin/platformos-check similarity index 84% rename from bin/theme-check rename to bin/platformos-check index 58e2df1a..7b6a5d6e 100755 --- a/bin/theme-check +++ b/bin/platformos-check @@ -4,7 +4,7 @@ # # This file was generated by Bundler. # -# The application 'theme-check' is installed as part of a gem, and +# The application 'platformos-check' is installed as part of a gem, and # this file is here to facilitate running it. # @@ -26,4 +26,4 @@ end require "rubygems" require "bundler/setup" -load Gem.bin_path("theme-check", "theme-check") +load Gem.bin_path("platformos-check", "platformos-check") diff --git a/bin/theme-check-language-server b/bin/platformos-check-language-server similarity index 81% rename from bin/theme-check-language-server rename to bin/platformos-check-language-server index e927fe58..9d5ddabb 100755 --- a/bin/theme-check-language-server +++ b/bin/platformos-check-language-server @@ -4,7 +4,7 @@ # # This file was generated by Bundler. # -# The application 'theme-check-language-server' is installed as part of a gem, and +# The application 'platformos-check-language-server' is installed as part of a gem, and # this file is here to facilitate running it. # @@ -26,4 +26,4 @@ end require "rubygems" require "bundler/setup" -load Gem.bin_path("theme-check", "theme-check-language-server") +load Gem.bin_path("platformos-check", "platformos-check-language-server") diff --git a/config/theme_app_extension.yml b/config/platformos_app_extension.yml similarity index 100% rename from config/theme_app_extension.yml rename to config/platformos_app_extension.yml diff --git a/data/platformos_liquid/built_in_liquid_objects.json b/data/platformos_liquid/built_in_liquid_objects.json new file mode 100644 index 00000000..b7e25cbd --- /dev/null +++ b/data/platformos_liquid/built_in_liquid_objects.json @@ -0,0 +1,70 @@ +[ + { + "properties": [ + { + "name": "first", + "return_type": [ + { + "type": "generic" + } + ], + "description": "Returns the first item of an array." + }, + { + "name": "size", + "description": "Returns the number of items in an array." + }, + { + "name": "last", + "return_type": [ + { + "type": "generic" + } + ], + "description": "Returns the last item of an array." + } + ], + "name": "array", + "description": "Arrays hold lists of variables of any type." + }, + { + "properties": [ + { + "name": "size", + "description": "Returns the number of items in an array." + } + ], + "name": "hash", + "description": "Hash stores key value pairs" + }, + { + "properties": [ + { + "name": "size", + "description": "Returns the number of characters in a string." + } + ], + "name": "string", + "description": "Strings are sequences of characters wrapped in single or double quotes." + }, + { + "properties": [], + "name": "number", + "description": "Numeric values, including floats and integers." + }, + { + "properties": [], + "name": "boolean", + "description": "A binary value, either true or false." + }, + { + "properties": [], + "name": "nil", + "description": "An undefined value. Tags or outputs that return nil don't print anything to the page. They are also treated as false." + }, + { + "properties": [], + "name": "empty", + "description": "An empty object is returned if you try to access an object that is defined, but has no value. For example a page or product that’s been deleted, or a setting with no value. You can compare an object with empty to check whether an object exists before you access any of its attributes." + } +] diff --git a/data/platformos_liquid/deprecated_filters.json b/data/platformos_liquid/deprecated_filters.json new file mode 100644 index 00000000..c5d09cd1 --- /dev/null +++ b/data/platformos_liquid/deprecated_filters.json @@ -0,0 +1,22 @@ +{ + "Liquid::ColorFilter": { + "hex_to_rgba": [ + "color_to_rgb", + "color_modify" + ] + }, + "Liquid::UrlFilter": { + "img_url": [ + "image_url" + ], + "img_tag": [ + "image_tag" + ], + "collection_img_url": [ + "img_url" + ], + "product_img_url": [ + "img_url" + ] + } +} diff --git a/data/platformos_liquid/documentation/filters.json b/data/platformos_liquid/documentation/filters.json new file mode 100644 index 00000000..0c001332 --- /dev/null +++ b/data/platformos_liquid/documentation/filters.json @@ -0,0 +1,5674 @@ +[ + { + "category": "cart", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/cart", + "raw_liquid": "{{ cart | item_count_for_variant: 39888235757633 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the total item count for a specified variant in the cart.", + "syntax": "cart | item_count_for_variant: {variant_id}", + "name": "item_count_for_variant" + }, + { + "category": "cart", + "deprecated": false, + "deprecation_reason": "", + "description": "Accepts the following object types:\n\n- `product`\n- `variant`", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/bloodroot-whole", + "raw_liquid": "{% assign product = all_products['bloodroot-whole'] %}\n{% assign line_items = cart | line_items_for: product %}\n\nTotal cart quantity for product: {{ line_items | sum: 'quantity' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/bloodroot-whole", + "raw_liquid": "{% assign product = all_products['bloodroot-whole'] %}\n{% assign variant = product.variants.first %}\n{% assign line_items = cart | line_items_for: variant %}\n\nTotal cart quantity for variant: {{ line_items | sum: 'quantity' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the subset of cart line items that include a specified product or variant.", + "syntax": "cart | line_items_for: object", + "name": "line_items_for" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "attribute [string] You can specify the value of supported [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes).", + "name": "HTML", + "required": false, + "types": [ + + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'Health' | link_to_type }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes) by including a parameter that matches the attribute name, and the desired value.\n", + "syntax": "string | link_to_type: attribute: string", + "path": "/", + "raw_liquid": "{{ 'Health' | link_to_type: class: 'link-class' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<a>` tag with an `href` attribute linking to a collection page that lists all products of the given\nproduct type.", + "syntax": "string | link_to_type", + "name": "link_to_type" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "attribute [string] [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes) for the link, passed as `attribute: value`.", + "name": "HTML", + "required": false, + "types": [ + + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ \"Polina's Potent Potions\" | link_to_vendor }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes) by including a parameter that matches the attribute name, and the desired value.\n", + "syntax": "string | link_to_vendor: attribute: string", + "path": "/", + "raw_liquid": "{{ \"Polina's Potent Potions\" | link_to_vendor: class: 'link-class' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<a>` tag with an `href` attribute linking to a collection page that lists all products of a given\nproduct vendor.", + "syntax": "string | link_to_vendor", + "name": "link_to_vendor" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "Accepts the following values:\n\n- `manual`\n- `best-selling`\n- `title-ascending`\n- `title-descending`\n- `price-ascending`\n- `price-descending`\n- `created-ascending`\n- `created-descending`\n\n> Tip:\n> You can append the `sort_by` filter to the [`url_for_type`](/docs/api/liquid/filters/url_for_type)\n> and [`url_for_vendor`](/docs/api/liquid/filters/url_for_vendor) filters.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.url | sort_by: 'best-selling' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates a collection URL with the provided `sort_by` parameter appended. This filter must be applied to a collection URL.", + "syntax": "string | sort_by: string", + "name": "sort_by" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'health' | url_for_type }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates a URL for a collection page that lists all products of the given product type.", + "syntax": "string | url_for_type", + "name": "url_for_type" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ \"Polina's Potent Potions\" | url_for_vendor }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates a URL for a collection page that lists all products from the given product vendor.", + "syntax": "string | url_for_vendor", + "name": "url_for_vendor" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "When the collection context is included, you can access the associated [`collection` object](/docs/api/liquid/objects/collection)\nin the [product template](/themes/architecture/templates/product).\n\n> Caution:\n> Because a standard product page and a product page in the context of a collection have the same content on separate\n> URLs, you should consider the SEO implications of using the `within` filter.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{%- assign collection_product = collection.products.first -%}\n\n{{ collection_product.url | within: collection }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates a product URL within the context of the provided collection.", + "syntax": "string | within: collection", + "name": "within" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> For accessibility best practices, it's recommended to have a minimum brightness difference of 125.", + "parameters": [ + { + "description": "A color to compare with the provided color.", + "name": "color", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#E800B0' | brightness_difference: '#FECEE9' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Calculates the [perceived brightness difference](https://www.w3.org/WAI/ER/WD-AERT/#color-contrast) between two colors.", + "syntax": "string | brightness_difference: string", + "name": "brightness_difference" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_brightness }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Calculates the [perceived brightness](https://www.w3.org/WAI/ER/WD-AERT/#color-contrast) of a given color.", + "syntax": "string | color_brightness", + "name": "color_brightness" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "The order in which you specify the colors doesn't matter.\n\n> Tip:\n> For accessibility best practices, the\n> [WCAG 2.0 level AA](https://www.w3.org/WAI/WCAG21/quickref/?versions=2.0#qr-visual-audio-contrast-contrast) requires a\n> minimum contrast ratio of 4.5:1 for normal text, and 3:1 for large text. [Level AAA](https://www.w3.org/WAI/WCAG21/quickref/?versions=2.0#qr-visual-audio-contrast7)\n> requires a minimum contrast ratio of 7:1 for normal text, and 4.5:1 for large text.", + "parameters": [ + { + "description": "A color to compare with the provided color.", + "name": "color", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#E800B0' | color_contrast: '#D9D8FF' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Calculates the contrast ratio between two colors and returns the ratio's numerator. The ratio's denominator, which isn't\nreturned, is always 1. For example, with a contrast ratio of 3.5:1, this filter returns 3.5.", + "syntax": "string | color_contrast: string", + "name": "color_contrast" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The amount to darken the provided color by.", + "name": "percent", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_darken: 30 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Darkens a given color by a specific percentage. The percentage must be between 0 and 100.", + "syntax": "string | color_darken: number", + "name": "color_darken" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The amount to desaturate the provided color by.", + "name": "percent", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_desaturate: 30 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Desaturates a given color by a specific percentage. The percentage must be between 0 and 100.", + "syntax": "string | color_desaturate: number", + "name": "color_desaturate" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> For accessibility best practices, it's recommended to have a minimum color difference of 500.", + "parameters": [ + { + "description": "A color to compare with the provided color.", + "name": "color", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#720955' | color_difference: '#FFF3F9' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Calculates the [color difference](https://www.w3.org/WAI/ER/WD-AERT/#color-contrast) between two colors.", + "syntax": "string | color_difference: string", + "name": "color_difference" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "Accepts the following color components:\n\n- `alpha`\n- `red`\n- `green`\n- `blue`\n- `hue`\n- `saturation`\n- `lightness`", + "parameters": [ + { + "description": "The color component that you want to extract.", + "name": "color_component", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_extract: 'red' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Extracts a specific color component from a given color.", + "syntax": "string | color_extract: string", + "name": "color_extract" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The amount to lighten the provided color by.", + "name": "percent", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_lighten: 30 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Lightens a given color by a specific percentage. The percentage must be between 0 and 100.", + "syntax": "string | color_lighten: number", + "name": "color_lighten" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> A percentage factor of 100 returns the color being filtered. A percentage factor of 0 returns the color\n> supplied to the filter.", + "parameters": [ + { + "description": "A color to mix with the provided color.", + "name": "color", + "required": true, + "types": [ + "string" + ] + }, + { + "description": "The percentage amount to mix the colors by.", + "name": "percent", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#E800B0' | color_mix: '#00936F', 50 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "", + "description": "If one input has an alpha component, but the other does not, an alpha component of 1.0 will be assumed for the input without an alpha component.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'rgba(232, 0, 176, 0.75)' | color_mix: '#00936F', 50 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Blends two colors together by a specific percentage factor. The percentage must be between 0 and 100.", + "syntax": "string | color_mix: string, number", + "name": "color_mix" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "The following table outlines valid color components, and the value range for their modifications:\n\n| Component | Value range |\n| --- | --- |\n| <ul><li>`red`</li><li>`green`</li><li>`blue`</li></ul> | An integer between 0 and 255 |\n| `alpha` | A decimal between 0 and 1 |\n| `hue` | An integer between 0 and 360 |\n| <ul><li>`saturation`<li>`lightness`</li></ul> | An integer between 0 and 100 |", + "parameters": [ + { + "description": "The color component that you want to modify.", + "name": "color_component", + "required": true, + "types": [ + "string" + ] + }, + { + "description": "The amount to modify the supplied color component by.", + "name": "modification_value", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_modify: 'red', 255 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "", + "description": "The format of the modified color depends on the component being modified. For example, if you modify the `alpha` component of a color in hexadecimal format, then the modified color will be in `rgba()` format.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_modify: 'alpha', 0.85 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Modifies a specific color component of a given color by a specific amount.", + "syntax": "string | color_modify: string, number", + "name": "color_modify" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The amount to saturate the provided color by.", + "name": "percent", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_saturate: 30 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Saturates a given color by a specific percentage. The percentage must be between 0 and 100.", + "syntax": "string | color_saturate: number", + "name": "color_saturate" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "Because colors are converted to `hex6` format, if a color with an alpha component is provided, then the alpha component\nis excluded from the output.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'rgb(234, 90, 185)' | color_to_hex }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a CSS color string to hexadecimal format (`hex6`).", + "syntax": "string | color_to_hex", + "name": "color_to_hex" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "If a color with an alpha component is provided, the color is converted to `HSLA` format.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_to_hsl }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a CSS color string to `HSL` format.", + "syntax": "string | color_to_hsl", + "name": "color_to_hsl" + }, + { + "category": "color", + "deprecated": false, + "deprecation_reason": "", + "description": "If a color with an alpha component is provided, then the color is converted to `RGBA` format.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | color_to_rgb }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a CSS color string to `RGB` format.", + "syntax": "string | color_to_rgb", + "name": "color_to_rgb" + }, + { + "category": "color", + "deprecated": true, + "deprecation_reason": "The `hex_to_rgba` filter has been replaced by [`color_to_rgb`](/docs/api/liquid/filters/color_to_rgb) and\n[`color_modify`](/docs/api/liquid/filters/color_modify).", + "description": "", + "parameters": [ + { + "description": "The desired alpha value.", + "name": "alpha", + "required": false, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | hex_to_rgba }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "alpha", + "description": "The default `alpha` value is 1.0. However, you can specify a decimal value between 0.0 and 1.0.", + "syntax": "string | hex_to_rgba: number", + "path": "/", + "raw_liquid": "{{ '#EA5AB9' | hex_to_rgba: 0.5 }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a CSS color string from hexadecimal format to `RGBA` format. Shorthand hexadecimal formatting (`hex3`) is also accepted.", + "syntax": "string | hex_to_rgba", + "name": "hex_to_rgba" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "The secret key for the message is supplied as a parameter to the filter.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign secret_potion = 'Polyjuice' | hmac_sha1: 'Polina' -%}\n\nMy secret potion: {{ secret_potion }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string into an SHA-1 hash using a hash message authentication code (HMAC).", + "syntax": "string | hmac_sha1: string", + "name": "hmac_sha1" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "The secret key for the message is supplied as a parameter to the filter.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign secret_potion = 'Polyjuice' | hmac_sha256: 'Polina' -%}\n\nMy secret potion: {{ secret_potion }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string into an SHA-256 hash using a hash message authentication code (HMAC).", + "syntax": "string | hmac_sha256: string", + "name": "hmac_sha256" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '' | md5 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string into an MD5 hash.", + "syntax": "string | md5", + "name": "md5" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign secret_potion = 'Polyjuice' | sha1 -%}\n\nMy secret potion: {{ secret_potion }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string into an SHA-1 hash.", + "syntax": "string | sha1: string", + "name": "sha1" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign secret_potion = 'Polyjuice' | sha256 -%}\n\nMy secret potion: {{ secret_potion }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string into an SHA-256 hash.", + "syntax": "string | sha256: string", + "name": "sha256" + }, + { + "category": "localization", + "deprecated": true, + "deprecation_reason": "Deprecated without a direct replacement because the [currency form](/docs/api/liquid/tags/form#form-currency) has also been\ndeprecated. The currency form was replaced by the [localization form](/docs/api/liquid/tags/form#form-localization). Refer to\nthis guide which explains [how to create a country selector](/docs/themes/markets/multiple-currencies-languages#implementing-country-and-language-selectors)\nusing the localization form.", + "description": "The `currency_selector` filter must be applied to the [`form` object](/docs/api/liquid/objects/form) within a\n[currency form](/docs/api/liquid/tags/form#form-currency).", + "parameters": [ + { + "description": "The desired `class` attribute.", + "name": "class", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The desired `id` attribute.", + "name": "id", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% form 'currency' %}\n {{ form | currency_selector }}\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "class", + "description": "Specify the `class` attribute of the `<select>` element.", + "syntax": "form | currency_selector: class: string", + "path": "/", + "raw_liquid": "{% form 'currency' %}\n {{ form | currency_selector: class: 'custom-class' }}\n{% endform %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "id", + "description": "Specify the `id` attribute of the `<select>` element.", + "syntax": "form | currency_selector: id: string", + "path": "/", + "raw_liquid": "{% form 'currency' %}\n {{ form | currency_selector: id: 'custom-id' }}\n{% endform %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<select>` element with an option for each currency available on the store.", + "syntax": "form | currency_selector", + "name": "currency_selector" + }, + { + "category": "customer", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'Log in' | customer_login_link }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML link to the customer login page.", + "syntax": "string | customer_login_link", + "name": "customer_login_link" + }, + { + "category": "customer", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'Log out' | customer_logout_link }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML link to log the customer out of their account and redirect to the homepage.", + "syntax": "string | customer_logout_link", + "name": "customer_logout_link" + }, + { + "category": "customer", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'Create an account' | customer_register_link }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML link to the customer registration page.", + "syntax": "string | customer_register_link", + "name": "customer_register_link" + }, + { + "category": "format", + "deprecated": false, + "deprecation_reason": "", + "description": "The `date` filter accepts the same parameters as Ruby's strftime method for formatting the date. For a list of shorthand\nformats, refer to the [Ruby documentation](https://ruby-doc.org/core-3.1.1/Time.html#method-i-strftime) or\n[strftime reference and sandbox](http://www.strfti.me/).", + "parameters": [ + { + "description": "The desired date format.", + "name": "format", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | date: '%B %d, %Y' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "The current date", + "description": "You can apply the `date` filter to the keywords `'now'` and `'today'` to output the current timestamp.\n\n> Note:\n> The timestamp will reflect the time that the Liquid was last rendered. Because of this, the timestamp might not be updated for every page view, depending on the context and caching.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'now' | date: '%B %d, %Y' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "format", + "description": "Specify a locale-aware date format. You can use the following formats:\n\n- `abbreviated_date`\n- `basic`\n- `date`\n- `date_at_time`\n- `default`\n- `on_date`\n- `short` (deprecated)\n- `long` (deprecated)\n\n> Note:\n> You can also [define custom formats](/docs/api/liquid/filters/date-setting-format-options-in-locale-files) in your theme's locale files.\n", + "syntax": "string | date: format: string", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | date: format: 'abbreviated_date' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Setting format options in locale files", + "description": "You can define custom date formats in your [theme's storefront locale files](/themes/architecture/locales/storefront-locale-files). These custom formats should be included in a `date_formats` category:\n\n```json\n\"date_formats\": {\n \"month_day_year\": \"%B %d, %Y\"\n}\n```\n", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | date: format: 'month_day_year' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a timestamp into another date format.", + "syntax": "string | date: string", + "name": "date" + }, + { + "category": "font", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "[string] Customize the [`font_display` property](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display) of the `@font-face` declaration.", + "name": "font_display", + "required": false, + "types": [ + + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ settings.type_header_font | font_face }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "font_display", + "description": "You can include an optional parameter to specify the [`font_display` property](https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display) of the `@font_face` declaration.\n", + "syntax": "font | font_face: font_display: string", + "path": "/", + "raw_liquid": "{{ settings.type_header_font | font_face: font_display: 'swap' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Generates a CSS [`@font_face` declaration](https://developer.mozilla.org/en-US/docs/Web/CSS/%40font-face) to load the provided font.", + "syntax": "font | font_face", + "name": "font_face" + }, + { + "category": "font", + "deprecated": false, + "deprecation_reason": "", + "description": "The `font_modify` filter requires two parameters. The first indicates which property should be modified and the second is\neither the new value, or modification amount, for that property.\n\n> Tip:\n> You can access every variant of the chosen font's family by using [`font.variants`](/docs/api/liquid/objects/font#font-variants).\n> However, you can more easily access specific styles and weights by using the `font_modify` filter.\n\nThe following table outlines the valid font properties and modification values:\n\n<table>\n <thead>\n <th>Property</th>\n <th>Modification value</th>\n <th>Output</th>\n </thead>\n <tbody>\n <tr>\n <td rowspan=3><code>style</code></td>\n <td><code>normal</code></td>\n <td>Returns the normal variant of the same weight, if it exists.</td>\n </tr>\n <tr>\n <td><code>italic</code></td>\n <td>Returns the italic variant of the same weight, if it exists.</td>\n </tr>\n <tr>\n <td><code>oblique</code></td>\n <td>\n <p>Returns the oblique variant of the same weight, if it exists.</p>\n <p>Oblique variants are similar to italic variants in appearance. All Shopify fonts have only oblique or italic variants, not both.</p>\n </td>\n </tr>\n <tr>\n <td rowspan=7><code>weight</code></td>\n <td><code>100</code> &rarr; <code>900</code></td>\n <td>Returns a variant of the same style with the given weight, if it exists.</td>\n </tr>\n <tr>\n <td><code>normal</code></td>\n <td>Returns a variant of the same style with a weight of <code>400</code>, if it exists.</td>\n </tr>\n <tr>\n <td><code>bold</code></td>\n <td>Returns a variant of the same style with a weight of <code>700</code>, if it exists.</td>\n </tr>\n <tr>\n <td><code>+100</code> &rarr; <code>+900</code></td>\n <td>\n <p>Returns a variant of the same style with a weight incremented by the given value, if it exists.</p>\n <p>For example, if a font has a weight of <code>400</code>, then using <code>+100</code> would return the font with a weight of <code>500</code>.</p>\n </td>\n </tr>\n <tr>\n <td><code>-100</code> &rarr; <code>-900</code></td>\n <td>\n <p>Returns a variant of the same style with a weight decremented by the given value, if it exists.</p>\n <p>For example, if a font has a weight of <code>400</code>, then using <code>-100</code> would return the font with a weight of <code>300</code>.</p>\n </td>\n </tr>\n <tr>\n <td><code>lighter</code></td>\n <td>Returns a lighter variant of the same style by applying the rules used by the <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Meaning_of_relative_weights\">CSS <code>font-weight</code> property</a> and browser <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Fallback_weights\">fallback weights</a>, if it exists.</td>\n </tr>\n <tr>\n <td><code>bolder</code></td>\n <td>Returns a bolder variant of the same style by applying the rules used by the <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Meaning_of_relative_weights\">CSS <code>font-weight</code> property</a> and browser <a href=\"https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight#Fallback_weights\">fallback weights</a>, if it exists.</td>\n </tr>\n </tbody>\n</table>", + "parameters": [ + { + "description": "Font property to modify", + "name": "property", + "required": true, + "types": [ + "string" + ] + }, + { + "description": "The new value for the associated property.", + "name": "value", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "font", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign bold_font = settings.type_body_font | font_modify: 'weight', 'bold' -%}\n\nh2 {\n font-weight: {{ bold_font.weight }};\n}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Non-existent font variants", + "description": "If the `font_modify` filter tries to create a font variant that doesn't exist, then it returns `nil`. To handle this, you can either assign a fallback value with the [`default` filter](/docs/api/liquid/filters/default), or check for `nil` before using the variant.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign bold_font = settings.type_body_font | font_modify: 'weight', 'bold' -%}\n{%- assign italic_font = settings.type_body_font | font_modify: 'style', 'italic' -%}\n{%- assign heavy_font = settings.type_body_font | font_modify: 'weight', '900' | default: bold_font -%}\n{%- assign oblique_font = settings.type_body_font | font_modify: 'style', 'oblique' | default: italic_font -%}\n\nh2 {\n font-style: {{ heavy_font.weight }};\n}\n\n.italic {\n {% if oblique_font -%}\n font-style: {{ oblique_font.style }};\n {%- else -%}\n font-style: {{ italic_font.style }};\n {%- endif %}\n}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Modifies a specific property of a given font.", + "syntax": "font | font_modify: string, string", + "name": "font_modify" + }, + { + "category": "font", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "Choose to return the URL for the font in `woff` format, instead of `woff2`.", + "name": "font_type", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ settings.type_header_font | font_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "woff format", + "description": "By default, the `font_url` filter returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for the font in `woff2` format. However, you can also choose `woff` format.\n", + "syntax": "font | font_url: string", + "path": "/", + "raw_liquid": "{{ settings.type_header_font | font_url: 'woff' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for the provided font in `woff2` format.", + "syntax": "font | font_url", + "name": "font_url" + }, + { + "category": "default", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + + ], + "summary": "Generates default error messages for each possible value of [`form.errors`](/docs/themes/liquid/reference/objects/form#form-errors).", + "syntax": "string | default_errors", + "name": "default_errors" + }, + { + "category": "payment", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> You can't render dynamic checkout buttons through AJAX requests, including those through the\n> [Section Rendering API](/api/section-rendering). The dynamic checkout buttons are added by JavaScript included\n> by Shopify through the [`content_for_header`](/docs/api/liquid/objects/content_for_header) object, which only runs on\n> the initial page load.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% form 'product', product %}\n {{ form | payment_button }}\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML container to host [dynamic checkout buttons](https://help.shopify.com/manual/online-store/dynamic-checkout)\nfor a product. The `payment_button` filter must be used on the `form` object within a [product form](/docs/api/liquid/tags/form#form-product).", + "syntax": "form | payment_button", + "name": "payment_button" + }, + { + "category": "payment", + "deprecated": false, + "deprecation_reason": "", + "description": "The `payment_terms` filter must be used on the `form` object within a [product form](/docs/api/liquid/tags/form#form-product) or\n[cart form](/docs/api/liquid/tags/form#form-cart).\n\n```liquid\n{% form 'product', product %}\n {{ form | payment_terms }}\n{% endform %}\n```\n\n```liquid\n{% form 'cart', cart %}\n {{ form | payment_terms }}\n{% endform %}\n```", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + + ], + "summary": "Generates the HTML for the [Shop Pay Installments banner](/themes/pricing-payments/installments).", + "syntax": "form | payment_terms", + "name": "payment_terms" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "The `time_tag` filter accepts the same parameters as Ruby's strftime method for formatting the date. For a list of shorthand\nformats, refer to the [Ruby documentation](https://ruby-doc.org/core-3.1.1/Time.html#method-i-strftime) or\n[strftime reference and sandbox](http://www.strfti.me/).", + "parameters": [ + { + "description": "The desired date format.", + "name": "format", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | time_tag: '%B %d, %Y' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "format", + "description": "Specify a locale-aware date format. Accepts the following values:\n\n- `abbreviated_date`\n- `basic`\n- `date`\n- `date_at_time`\n- `default`\n- `on_date`\n- `short` (deprecated)\n- `long` (deprecated)\n\n> Note:\n> You can also [define custom formats](/docs/api/liquid/filters/date-setting-format-options-in-locale-files) in your theme's locale files.\n", + "syntax": "string | time_tag: format: string", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | time_tag: format: 'abbreviated_date' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "datetime", + "description": "By default, the value of the `datetime` attribute of the `<time>` tag is formatted as `YYYY-MM-DDThh:mm:ssTZD`. However, you can specify a custom format with [strftime shorthand formats](https://ruby-doc.org/core-3.1.2/Time.html#method-i-strftime).\n", + "syntax": "string | time_tag: datetime: string", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | time_tag: '%B %d, %Y', datetime: '%Y-%m-%d' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Setting format options in locale files", + "description": "You can define custom date formats in your [theme's storefront locale files](/themes/architecture/locales/storefront-locale-files). These custom formats should be included in a `date_formats` category:\n\n```json\n\"date_formats\": {\n \"month_day_year\": \"%B %d, %Y\"\n}\n```\n", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.created_at | time_tag: format: 'month_day_year' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a timestamp into an HTML `<time>` tag.", + "syntax": "string | time_tag: string", + "name": "time_tag" + }, + { + "category": "localization", + "deprecated": false, + "deprecation_reason": "", + "description": "The `translate` filter has an alias of `t`, which is more commonly used.\n\n> Tip:\n> To learn more about using the `t` filter, refer to [storefront locale file usage](/themes/architecture/locales/storefront-locale-files#usage)\n> or [schema locale file usage](/themes/architecture/locales/schema-locale-files#usage).", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Section locales vs. theme locales", + "description": "The `t` filter can also reference keys defined in the [`locales` object](/themes/architecture/sections/section-schema#locales) of section file's `schema` tag. Content that you put in the `schema` under the `locales` object is only accessible to that section. This is useful if you need to make a standalone section that you want to share between themes.\n\nContent that is global to a theme should be placed in the theme's `locales` directory. For example, you could include the expression \"See more\" in your `locales` directory to create a single translation. You could then use the translation in a blog post and on the product details page.\n\n> Note:\n> Translations in the section's `schema` tag that aren't part of the `locales` object are used for merchant-facing text shown in the theme editor. These translations don't use the `t` filter.\n", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns a string of translated text for a given translation key from a [locale file](/themes/architecture/locales).", + "syntax": "string | t", + "name": "translate" + }, + { + "category": "format", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> When using the JSON output in JavaScript, you don't need to wrap it in quotes because the `json` filter includes them.\n> The `json` filter also escapes any quotes inside the output.\n\n#### Product inventory\n\nWhen applied to a [`product` object](/docs/api/liquid/objects/product) on any Shopify store created after December 5, 2017, the\n`json` filter doesn't output values for the `inventory_quantity` and `inventory_policy` properties of any associated\n[variants](/docs/api/liquid/objects/variant). These properties are excluded to help prevent bots and crawlers from retrieving\ninventory quantities for stores to which they aren't granted access.\n\nIf you need inventory information, you can access it through individual variants.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/crocodile-tears", + "raw_liquid": "{{ product | json }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string, or object, into JSON format.", + "syntax": "variable | json", + "name": "json" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ -3 | abs }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the absolute value of a number.", + "syntax": "number | abs", + "name": "abs" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{%- assign path = product.url -%}\n\n{{ request.origin | append: path }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Adds a given string to the end of a string.", + "syntax": "string | append: string", + "name": "append" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 4 | at_least: 5 }}\n{{ 4 | at_least: 3 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Limits a number to a minimum value.", + "syntax": "number | at_least", + "name": "at_least" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 6 | at_most: 5 }}\n{{ 4 | at_most: 5 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Limits a number to a maximum value.", + "syntax": "number | at_most", + "name": "at_most" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'b25lIHR3byB0aHJlZQ==' | base64_decode }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Decodes a string in [Base64 format](https://developer.mozilla.org/en-US/docs/Glossary/Base64).", + "syntax": "string | base64_decode", + "name": "base64_decode" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'one two three' | base64_encode }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Encodes a string to [Base64 format](https://developer.mozilla.org/en-US/docs/Glossary/Base64).", + "syntax": "string | base64_encode", + "name": "base64_encode" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'b25lIHR3byB0aHJlZQ==' | base64_url_safe_decode }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Decodes a string in URL-safe [Base64 format](https://developer.mozilla.org/en-US/docs/Glossary/Base64).", + "syntax": "string | base64_url_safe_decode", + "name": "base64_url_safe_decode" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "To produce URL-safe Base64, this filter uses `-` and `_` in place of `+` and `/`.", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'one two three' | base64_url_safe_encode }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Encodes a string to URL-safe [Base64 format](https://developer.mozilla.org/en-US/docs/Glossary/Base64).", + "syntax": "string | base64_url_safe_encode", + "name": "base64_url_safe_encode" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'this sentence should start with a capitalized word.' | capitalize }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Capitalizes the first word in a string and downcases the remaining characters.", + "syntax": "string | capitalize", + "name": "capitalize" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 1.2 | ceil }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Rounds a number up to the nearest integer.", + "syntax": "number | ceil", + "name": "ceil" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{%- assign original_prices = collection.products | map: 'compare_at_price' -%}\n\nOriginal prices:\n\n{% for price in original_prices -%}\n - {{ price }}\n{%- endfor %}\n\n{%- assign compacted_original_prices = original_prices | compact -%}\n\nOriginal prices - compacted:\n\n{% for price in compacted_original_prices -%}\n - {{ price }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Removes any `nil` items from an array.", + "syntax": "array | compact", + "name": "compact" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The `concat` filter won't filter out duplicates. If you want to remove duplicates, then you need to use the\n> [`uniq` filter](/docs/api/liquid/filters/uniq).", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{%- assign types_and_vendors = collection.all_types | concat: collection.all_vendors -%}\n\nTypes and vendors:\n\n{% for item in types_and_vendors -%}\n {%- if item != blank -%}\n - {{ item }}\n {%- endif -%}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Concatenates (combines) two arrays.", + "syntax": "array | concat: array", + "name": "concat" + }, + { + "category": "default", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "Whether to use false values instead of the default.", + "name": "allow_false", + "required": false, + "types": [ + "boolean" + ] + } + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.selected_variant.url | default: product.url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "allow_false", + "description": "By default, the `default` filter's value will be used in place of `false` values. You can use the `allow_false` parameter to allow variables to return `false` instead of the default value.\n", + "syntax": "variable | default: variable, allow_false: boolean", + "path": "/products/health-potion", + "raw_liquid": "{%- assign display_price = false -%}\n\n{{ display_price | default: true, allow_false: true }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Sets a default value for any variable whose value is one of the following:\n\n- [`empty`](/docs/api/liquid/basics#empty)\n- [`false`](/docs/api/liquid/basics#truthy-and-falsy)\n- [`nil`](/docs/api/liquid/basics#nil)", + "syntax": "variable | default: variable", + "name": "default" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 4 | divided_by: 2 }}\n\n# divisor is an integer\n{{ 20 | divided_by: 7 }}\n\n# divisor is a float \n{{ 20 | divided_by: 7.0 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Divides a number by a given number. The `divided_by` filter produces a result of the same type as the divisor. This means if you divide by an integer, the result will be an integer, and if you divide by a float, the result will be a float.", + "syntax": "number | divided_by: number", + "name": "divided_by" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.title | downcase }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string to all lowercase characters.", + "syntax": "string | downcase", + "name": "downcase" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '<p>Text to be escaped.</p>' | escape }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Escapes special characters in HTML, such as `<>`, `'`, and `&`, and converts characters into escape sequences. The filter doesn't effect characters within the string that don’t have a corresponding escape sequence.\".", + "syntax": "string | escape", + "name": "escape" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign escaped_text = '<p>Text to be escaped.</p>' | escape -%}\n\n{{ escaped_text }}\n{{ escaped_text | escape_once }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Escapes a string without changing characters that have already been escaped.", + "syntax": "string | escape_once", + "name": "escape_once" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{%- assign first_product = collection.products | first -%}\n\n{{ first_product.title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Dot notation", + "description": "You can use the `first` filter with dot notation when you need to use it inside a tag or object output.\n", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{{ collection.products.first.title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the first item in an array.", + "syntax": "array | first", + "name": "first" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 1.2 | floor }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Rounds a number down to the nearest integer.", + "syntax": "number | floor", + "name": "floor" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.all_tags | join }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Custom separator", + "description": "You can specify a custom separator for the joined items.\n", + "syntax": "array | join: string", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.all_tags | join: ', ' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Combines all of the items in an array into a single string, separated by a space.", + "syntax": "array | join", + "name": "join" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{%- assign last_product = collection.products | last -%}\n\n{{ last_product.title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Dot notation", + "description": "You can use the `last` filter with dot notation when you need to use it inside a tag or object output.\n", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{{ collection.products.last.title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the last item in an array.", + "syntax": "array | last", + "name": "last" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign text = ' Some potions create whitespace. ' -%}\n\n\"{{ text }}\"\n\"{{ text | lstrip }}\"", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Strips all whitespace from the left of a string.", + "syntax": "string | lstrip", + "name": "lstrip" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{%- assign product_titles = collection.products | map: 'title' -%}\n\n{{ product_titles | join: ', ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Creates an array of values from a specific property of the items in an array.", + "syntax": "array | map: string", + "name": "map" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 4 | minus: 2 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Subtracts a given number from another number.", + "syntax": "number | minus: number", + "name": "minus" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 12 | modulo: 5 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the remainder of dividing a number by a given number.", + "syntax": "number | modulo: number", + "name": "modulo" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.description | newline_to_br }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts newlines (`\\n`) in a string to HTML line breaks (`<br>`).", + "syntax": "string | newline_to_br", + "name": "newline_to_br" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 2 | plus: 2 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Adds two numbers.", + "syntax": "number | plus: number", + "name": "plus" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{%- assign origin = request.origin -%}\n\n{{ product.url | prepend: origin }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Adds a given string to the beginning of a string.", + "syntax": "string | prepend: string", + "name": "prepend" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ \"I can't do it!\" | remove: \"'t\" }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Removes any instance of a substring inside a string.", + "syntax": "string | remove: string", + "name": "remove" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ \"I hate it when I accidentally spill my duplication potion accidentally!\" | remove_first: ' accidentally' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Removes the first instance of a substring inside a string.", + "syntax": "string | remove_first: string", + "name": "remove_first" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ \"I hate it when I accidentally spill my duplication potion accidentally!\" | remove_last: ' accidentally' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Removes the last instance of a substring inside a string.", + "syntax": "string | remove_last: string", + "name": "remove_last" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/komodo-dragon-scale", + "raw_liquid": "{{ product.handle | replace: '-', ' ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Replaces any instance of a substring inside a string with a given string.", + "syntax": "string | replace: string, string", + "name": "replace" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/komodo-dragon-scale", + "raw_liquid": "{{ product.handle | replace_first: '-', ' ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Replaces the first instance of a substring inside a string with a given string.", + "syntax": "string | replace_first: string, string", + "name": "replace_first" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/komodo-dragon-scale", + "raw_liquid": "{{ product.handle | replace_last: '-', ' ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Replaces the last instance of a substring inside a string with a given string.", + "syntax": "string | replace_last: string, string", + "name": "replace_last" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "Original order:\n{{ collection.products | map: 'title' | join: ', ' }}\n\nReverse order:\n{{ collection.products | reverse | map: 'title' | join: ', ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Reversing strings", + "description": "You can't use the `reverse` filter on strings directly. However, you can use the [`split` filter](/docs/api/liquid/filters/split) to create an array of characters in the string, reverse that array, and then use the [`join` filter](/docs/api/liquid/filters/join) to combine them again.\n", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.title | split: '' | reverse | join: '' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Reverses the order of the items in an array.", + "syntax": "array | reverse", + "name": "reverse" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 2.7 | round }}\n{{ 1.3 | round }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Round to a specific number of decimal places", + "description": "You can specify a number of decimal places to round to. If you don't specify a number, then the `round` filter rounds to the nearest integer.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 3.14159 | round: 2 }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Rounds a number to the nearest integer.", + "syntax": "number | round", + "name": "round" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign text = ' Some potions create whitespace. ' -%}\n\n\"{{ text }}\"\n\"{{ text | rstrip }}\"", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Strips all whitespace from the right of a string.", + "syntax": "string | rstrip", + "name": "rstrip" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "The size of a string is the number of characters that the string includes. The size of an array is the number of items\nin the array.", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.title | size }}\n{{ collection.products | size }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Dot notation", + "description": "You can use the `size` filter with dot notation when you need to use it inside a tag or object output.\n", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{% if collection.products.size >= 10 %}\n There are 10 or more products in this collection.\n{% else %}\n There are less than 10 products in this collection.\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Returns the size of a string or array.", + "syntax": "variable | size", + "name": "size" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "By default, the substring has a length of one character, and the array series has one array item. However, you can\nprovide a second parameter to specify the number of characters or array items.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{{ collection.title | slice: 0 }}\n{{ collection.title | slice: 0, 5 }}\n\n{{ collection.all_tags | slice: 1, 2 | join: ', ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Negative index", + "description": "You can supply a negative index which will count from the end of the string.\n", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{{ collection.title | slice: -3, 3 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns a substring or series of array items, starting at a given 0-based index.", + "syntax": "string | slice", + "name": "slice" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{% assign tags = collection.all_tags | sort %}\n\n{% for tag in tags -%}\n {{ tag }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Sort by an array item property", + "description": "You can specify an array item property to sort the array items by. You can sort by any property of the object that you're sorting.\n", + "syntax": "array | sort: string", + "path": "/collections/all", + "raw_liquid": "{% assign products = collection.products | sort: 'price' %}\n\n{% for product in products -%}\n {{ product.title }}\n{%- endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Sorts the items in an array in case-sensitive alphabetical, or numerical, order.", + "syntax": "array | sort", + "name": "sort" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "> Caution:\n> You shouldn't use the `sort_natural` filter to sort numerical values. When comparing items an array, each item is converted to a\n> string, so sorting on numerical values can lead to unexpected results.", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{% assign tags = collection.all_tags | sort_natural %}\n\n{% for tag in tags -%}\n {{ tag }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Sort by an array item property", + "description": "You can specify an array item property to sort the array items by.\n", + "syntax": "array | sort_natural: string", + "path": "/collections/all", + "raw_liquid": "{% assign products = collection.products | sort_natural: 'title' %}\n\n{% for product in products -%}\n {{ product.title }}\n{%- endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Sorts the items in an array in case-insensitive alphabetical order.", + "syntax": "array | sort_natural", + "name": "sort_natural" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{%- assign title_words = product.handle | split: '-' -%}\n\n{% for word in title_words -%}\n {{ word }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Splits a string into an array of substrings based on a given separator.", + "syntax": "string | split: string", + "name": "split" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{%- assign text = ' Some potions create whitespace. ' -%}\n\n\"{{ text }}\"\n\"{{ text | strip }}\"", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Strips all whitespace from the left and right of a string.", + "syntax": "string | strip", + "name": "strip" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "<!-- With HTML -->\n{{ product.description }}\n\n<!-- HTML stripped -->\n{{ product.description | strip_html }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Strips all HTML tags from a string.", + "syntax": "string | strip_html", + "name": "strip_html" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "<!-- With newlines -->\n{{ product.description }}\n\n<!-- Newlines stripped -->\n{{ product.description | strip_newlines }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Strips all newline characters (line breaks) from a string.", + "syntax": "string | strip_newlines", + "name": "strip_newlines" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% assign fibonacci = '0, 1, 1, 2, 3, 5' | split: ', ' %}\n\n{{ fibonacci | sum }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Sum object property values", + "description": "For an array of Liquid objects, you can specify a property to sum.", + "syntax": "array | sum: string", + "path": "/cart", + "raw_liquid": "Total quantity of all items in cart:\n{{ cart.items | sum: 'quantity' }}\n\nSubtotal price for all items in cart:\n{{ cart.items | sum: 'final_line_price' | money }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the sum of all elements in an array.", + "syntax": "array | sum", + "name": "sum" + }, + { + "category": "math", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 2 | times: 2 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Multiplies a number by a given number.", + "syntax": "number | times: number", + "name": "times" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "If the specified number of characters is less than the length of the string, then an ellipsis (`...`) is appended to\nthe truncated string. The ellipsis is included in the character count of the truncated string.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.title | truncate: 15 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Specify a custom ellipsis", + "description": "You can provide a second parameter to specify a custom ellipsis. If you don't want an ellipsis, then you can supply an empty string.\n", + "syntax": "string | truncate: number, string", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.title | truncate: 15, '--' }}\n{{ article.title | truncate: 15, '' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Truncates a string down to a given number of characters.", + "syntax": "string | truncate: number", + "name": "truncate" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "If the specified number of words is less than the number of words in the string, then an ellipsis (`...`) is appended to\nthe truncated string.\n\n> Caution:\n> HTML tags are treated as words, so you should strip any HTML from truncated content. If you don't strip HTML, then\n> closing HTML tags can be removed, which can result in unexpected behavior.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.content | strip_html | truncatewords: 15 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Specify a custom ellipsis", + "description": "You can provide a second parameter to specify a custom ellipsis. If you don't want an ellipsis, then you can supply an empty string.\n", + "syntax": "string | truncatewords: number, string", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.content | strip_html | truncatewords: 15, '--' }}\n\n{{ article.content | strip_html | truncatewords: 15, '' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Truncates a string down to a given number of words.", + "syntax": "string | truncatewords: number", + "name": "truncatewords" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% assign potion_array = 'invisibility, health, love, health, invisibility' | split: ', ' %}\n\n{{ potion_array | uniq | join: ', ' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Removes any duplicate items in an array.", + "syntax": "array | uniq", + "name": "uniq" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.title | upcase }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string to all uppercase characters.", + "syntax": "string | upcase", + "name": "upcase" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'test%40test.com' | url_decode }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Decodes any [percent-encoded](https://developer.mozilla.org/en-US/docs/Glossary/percent-encoding) characters\nin a string.", + "syntax": "string | url_decode", + "name": "url_decode" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Spaces are converted to a `+` character, instead of a percent-encoded character.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'test@test.com' | url_encode }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts any URL-unsafe characters in a string to the\n[percent-encoded](https://developer.mozilla.org/en-US/docs/Glossary/percent-encoding) equivalent.", + "syntax": "string | url_encode", + "name": "url_encode" + }, + { + "category": "array", + "deprecated": false, + "deprecation_reason": "", + "description": "This requires you to provide both the property name and the associated value.", + "parameters": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{% assign polina_products = collection.products | where: 'vendor', \"Polina's Potent Potions\" %}\n\nProducts from Polina's Potent Potions:\n\n{% for product in polina_products -%}\n - {{ product.title }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Filter for boolean properties with a `true` value", + "description": "You can filter for items that have a `true` value for a boolean property. This requires you to provide only the property name.\n", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{% assign available_products = collection.products | where: 'available' %}\n\nAvailable products:\n\n{% for product in available_products -%}\n - {{ product.title }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Filters an array to include only items with a specific property value.", + "syntax": "array | where: string, string", + "name": "where" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "If [alt text is set on the video](https://help.shopify.com/en/manual/products/product-media/add-alt-text), then it's\nincluded in the `title` attribute of the `<iframe>`. If no alt text is set, then the `title` attribute is set to the\nproduct title.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'external_video' %}\n {% if media.host == 'youtube' %}\n {{ media | external_video_url: color: 'white' | external_video_tag }}\n {% elsif media.host == 'vimeo' %}\n {{ media | external_video_url: loop: '1', muted: '1' | external_video_tag }}\n {% endif %}\n {% endif %}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attributes) by adding a parameter that matches the attribute name, and the desired value.\n", + "syntax": "variable | external_video_tag: attribute: string", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'external_video' %}\n {% if media.host == 'youtube' %}\n {{ media | external_video_url: color: 'white' | external_video_tag: class:'youtube-video' }}\n {% endif %}\n {% endif %}\n{% endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Generates an HTML `<iframe>` tag containing the player for a given external video. The input for the `external_video_tag`\nfilter can be either a [`media` object](/docs/api/liquid/objects/media) or [`external_video_url`](/docs/api/liquid/filters/external_video_url).", + "syntax": "variable | external_video_tag", + "name": "external_video_tag" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "You can specify [YouTube](https://developers.google.com/youtube/player_parameters#Parameters) and [Vimeo](https://vimeo.zendesk.com/hc/en-us/articles/360001494447-Using-Player-Parameters) video parameters by adding a parameter that matches the parameter name, and the desired value.\n", + "syntax": "", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'external_video' %}\n {% if media.host == 'youtube' %}\n {{ media | external_video_url: color: 'white' | external_video_tag }}\n {% elsif media.host == 'vimeo' %}\n {{ media | external_video_url: loop: '1', muted: '1' | external_video_tag }}\n {% endif %}\n {% endif %}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Returns the URL for a given external video. Use this filter to specify parameters for the external video player generated\nby the [`external_video_tag` filter](/docs/api/liquid/filters/external_video_tag).", + "syntax": "media | external_video_url: attribute: string", + "name": "external_video_url" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "By default, `width` and `height` attributes are added to the `<img>` tag based on the dimensions and aspect ratio from\nthe image URL. However, you can override these attributes with the [width](/docs/api/liquid/filters/image_tag#image_tag-width) and [height](/docs/api/liquid/filters/image_tag#image_tag-height)\nparameters. If only one parameter is provided, then only that attribute is added.\n\n> Note:\n> This filter automatically applies the `object-position` css style from the focal point value if set. For more\n> information, refer to the [`focal_point` object](/docs/api/liquid/objects/focal_point).", + "parameters": [ + { + "description": "The width of the image.", + "name": "width", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The height of the image.", + "name": "height", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The source sizes for responsiveness.", + "name": "sizes", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The widths to associate with custom `srcset` values.", + "name": "widths", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The `srcset` for responsiveness.", + "name": "srcset", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "Whether the resource should be preloaded.", + "name": "preload", + "required": false, + "types": [ + "boolean" + ] + }, + { + "description": "The image's alt text.", + "name": "alt", + "required": false, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 200 | image_tag }}", + "parameter": false, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "width", + "description": "Specify the `width` attribute of the `<img>` tag. You can set the parameter to `nil` to prevent the attribute from being added.\n", + "syntax": "image_url | image_tag: width: number", + "path": "/products/health-potion", + "raw_liquid": "<!-- With a width -->\n{{ product | image_url: width: 400 | image_tag: width: 300 }}\n\n<!-- With the width set to nil -->\n{{ product | image_url: width: 400 | image_tag: width: nil }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "height", + "description": "Specify the `height` attribute of the `<img>` tag. You can set the parameter to `nil` to prevent the attribute from being added.\n", + "syntax": "image_url | image_tag: height: number", + "path": "/products/health-potion", + "raw_liquid": "<!-- With a height -->\n{{ product | image_url: width: 400 | image_tag: height: 300 }}\n\n<!-- With the height set to nil -->\n{{ product | image_url: width: 400 | image_tag: height: nil }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "sizes", + "description": "Specify source sizes with the [HTML `sizes` attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attr-sizes).\n", + "syntax": "image_url | image_tag: sizes: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 200 | image_tag: sizes: '(min-width:1600px) 960px, (min-width: 750px) calc((100vw - 11.5rem) / 2), calc(100vw - 4rem)' }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "widths", + "description": "By default, Shopify generates a `srcset` with a smart set of default widths up to the maximum defined in the image URL. However, you can create your own set of widths.\n", + "syntax": "image_url | image_tag: widths: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 600 | image_tag: widths: '200, 300, 400' }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "srcset", + "description": "By default, Shopify generates a `srcset`. However, you can create your own `srcset`.\nThe `srcset` parameter takes precedence over the [`width` parameter](/docs/api/liquid/filters/image_tag#image_tag-width).\nYou shouldn't to use the `srcset` parameter unless you want to remove the attribute by setting the parameter to `nil`.\n", + "syntax": "image_url | image_tag: srcset: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 200 | image_tag: srcset: nil }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "preload", + "description": "Specify whether the image should be preloaded.\n\nWhen `preload` is set to `true`, a resource hint is sent as a [Link HTTP header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link)\nwith a `rel` value of [`preload`](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preload).\nThe Link header also includes `imagesrcset` and `imagesizes` that match the `srcset` and `sizes` attribute of the tag,\nwhere present:\n\n```liquid\nLink: <IMAGE_URL>; rel=preload; as=image\nLink: <IMAGE_URL>; rel=preload; as=image; imagesrcset=ADDITIONAL_IMAGE_URL 352w; imagesizes=40vw\n```\n\nThis option doesn't affect the HTML img tag directly.\n\nYou should use the preload parameter sparingly. For example, consider preloading only above-the-fold images.\nTo learn more about resource hints in Shopify themes, refer to [Performance best practices for Shopify themes](/themes/best-practices/performance#preload-key-resources-defer-or-avoid-loading-others).\n", + "syntax": "image_url | image_tag: preload: boolean", + "path": "", + "raw_liquid": "", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "alt", + "description": "By default, the `alt` attribute of the `<img>` tag is set to the [media alt text](https://help.shopify.com/manual/products/product-media/add-alt-text), or the resource title for article, collection, line item, product, and variant images. However, you can override this default, or set the value if there's no default.\n", + "syntax": "image_url | image_tag: alt: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 200 | image_tag: alt: \"My image's alt text\" }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/img#attributes) by adding a parameter that matches the attribute name, and the desired value.\n", + "syntax": "image_url | image_tag: attribute: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 200 | image_tag: class: 'custom-class', loading: 'lazy' }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<img>` tag for a given [`image_url`](/docs/api/liquid/filters/image_url).", + "syntax": "string | image_tag", + "name": "image_tag" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The dimensions of the media's poster image.", + "name": "image_size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {{- media | media_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "image_size", + "description": "Specify the dimensions of the media's poster image in pixels.", + "syntax": "media | media_tag: image_size: string", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {{- media | media_tag: image_size: '400x' }}\n{% endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Generates an appropriate HTML tag for a given media object.", + "syntax": "media | media_tag", + "name": "media_tag" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The dimensions of the model viewer's poster image.", + "name": "image_size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/potion-bottle", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'model' %}\n {{ media | model_viewer_tag }}\n {% endif %}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Model viewer attributes", + "description": "By default, the model viewer component has the following attributes:\n\n| Attribute | Value |\n| --- | --- |\n| `alt` | `[alt-text]` - The media's alt text. |\n| `poster` | `[preview-image-url]` - The media's preview image URL. |\n| `camera-controls` | N/A - Allows for controls via mouse/touch. |\n\nYou can override these attributes, or any [supported model viewer component attributes](https://modelviewer.dev/docs/index.html#stagingandcameras-attributes) by adding a parameter that matches the attribute name, and the desired value.\n", + "syntax": "media | model_viewer_tag: attribute: string", + "path": "/products/potion-bottle", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'model' %}\n {{ media | model_viewer_tag: interaction-policy: 'allow-when-focused' }}\n {% endif %}\n{% endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "image_size", + "description": "Specify the dimensions of the model's poster image in pixels.", + "syntax": "media | model_viewer_tag: image_size: string", + "path": "/products/potion-bottle", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'model' %}\n {{ media | model_viewer_tag: image_size: '400x' }}\n {% endif %}\n{% endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Generates a [Google model viewer component](https://modelviewer.dev/) for a given 3D model.", + "syntax": "media | model_viewer_tag", + "name": "model_viewer_tag" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> When `mp4` videos are uploaded, Shopify generates an `m3u8` file as an additional [`video_source`](/docs/api/liquid/objects/video_source).\n> An `m3u8` file enables video players to leverage [HTTP live streaming (HLS)](https://developer.apple.com/streaming/),\n> resulting in an optimized video experience based on the user's internet connection. If loop is enabled, the HLS source is not used\n> in order to allow progessive download to cache the video.\n>\n> If the `m3u8` source isn't supported, then the player falls back to the `mp4` source.", + "parameters": [ + { + "description": "The dimensions of the video's poster image.", + "name": "image_size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'video' %}\n {{ media | video_tag }}\n {% endif %}\n{% endfor %}", + "parameter": false, + "display_type": "html", + "show_data_tab": false + }, + { + "name": "image_size", + "description": "Specify the dimensions of the video's poster image in pixels.", + "syntax": "media | video_tag: image_size: string", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'video' %}\n {{ media | video_tag: image_size: '400x' }}\n {% endif %}\n{% endfor %}", + "parameter": true, + "display_type": "html", + "show_data_tab": false + }, + { + "name": "Optional supported HTML5 attributes", + "description": "`video_tag` supports all [HTML5 video attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/video#attributes).\nFor example:\n\n| Attribute | Value |\n| --- | --- |\n| `autoplay` | Whether to automatically play the video after it’s loaded. Accepted values:`true`,`false`|\n| `loop` | Whether to loop the video. Accepted values:`true`,`false`|\n| `muted` | Whether to mute the video’s audio. Accepted values:`true`,`false`|\n| `controls` | Whether a user can control the video playback. Accepted values:`true`,`false`|\n", + "syntax": "media | video_tag: attribute: boolean", + "path": "/products/potion-beats", + "raw_liquid": "{% for media in product.media %}\n {% if media.media_type == 'video' %}\n {{ media | video_tag: autoplay: true, loop: true, muted: true, controls: true }}\n {% endif %}\n{% endfor %}", + "parameter": true, + "display_type": "html", + "show_data_tab": false + } + ], + "summary": "Generates an HTML `<video>` tag for a given video.", + "syntax": "media | video_tag", + "name": "video_tag" + }, + { + "category": "metafield", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The `metafield_tag` filter doesn't support list metafields other than `list.single_line_text_field`.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "Basic types", + "description": "Most metafield types return a simple HTML element:\n\n| Type | Element | Attributes |\n| --- | --- | --- |\n| `boolean` | `<span>` | `class=\"metafield-boolean\"` |\n| `collection_reference` | `<a>` | `class=\"metafield-collection_reference\"` |\n| `color` | `<span>` | `class=\"metafield-color\"` |\n| `date` | `<time>` | `datetime=\"<the metafield value>\"`<br><br>`class=\"metafield-date\"`<br><br>Value is localized to the customer |\n| `date_time` | `<time>` | `datetime=\"<the metafield value>\"`<br><br>`class=\"metafield-date\"`<br><br>Value is localized to the customer |\n| `json` | `<script>` | `type=\"application/json\"`<br><br>`class=\"metafield-json\"` |\n| `money` | `<span>` | `class=\"metafield-money\"`<br><br>Value is formatted using the store's [HTML with currency setting](https://help.shopify.com/manual/payments/currency-formatting) |\n| `multi_line_text_field` | `<span>` | `class=\"metafield-multi_line_text_field\"` |\n| `number_decimal` | `<span>` | `class=\"metafield-number_decimal\"` |\n| `number_integer` | `<span>` | `class=\"metafield-number_integer\"` |\n| `page_reference` | `<a>` | `class=\"metafield-page_reference\"` |\n| `product_reference` | `<a>` | `class=\"metafield-page_reference\"` |\n| `rating` | `<span>` | `class=\"metafield-rating\"` | |\n| `single_line_text_field` | `<span>` | `class=\"metafield-single_line_text_field\"` |\n| `url` | `<a>` | `class=\"metafield-url\"` |\n| `variant_reference` | `<a>` | `class=\"metafield-variant_reference\"` |\n| `rich_text_field` | `<div>` | `class=\"metafield-rich_text_field\"` |\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "<!-- boolean -->\n{{ product.metafields.information.seasonal | metafield_tag }}\n\n<!-- collection_reference -->\n{{ product.metafields.information.related_collection | metafield_tag }}\n\n<!-- color -->\n{{ product.metafields.details.potion_color | metafield_tag }}\n\n<!-- date -->\n{{ product.metafields.information.expiry | metafield_tag }}\n\n<!-- date_time -->\n{{ product.metafields.information.brew_date | metafield_tag }}\n\n<!-- json -->\n{{ product.metafields.information.burn_temperature | metafield_tag }}\n\n<!-- money -->\n{{ product.metafields.details.price_per_ml | metafield_tag }}\n\n<!-- multi_line_text_field -->\n{{ product.metafields.information.shipping | metafield_tag }}\n\n<!-- number_decimal -->\n{{ product.metafields.information.salinity | metafield_tag }}\n\n<!-- number_integer -->\n{{ product.metafields.information.doses_per_day | metafield_tag }}\n\n<!-- page_reference -->\n{{ product.metafields.information.dosage | metafield_tag }}\n\n<!-- product_reference -->\n{{ product.metafields.information.related_product | metafield_tag }}\n\n<!-- rating -->\n{{ product.metafields.details.rating | metafield_tag }}\n\n<!-- single_line_text_field -->\n{{ product.metafields.information.directions | metafield_tag }}\n\n<!-- url -->\n{{ product.metafields.information.health | metafield_tag }}\n\n<!-- variant_reference -->\n{{ product.metafields.information.health | metafield_tag }}\n\n<!-- rich_text_field -->\n{{ product.metafields.information.rich_description | metafield_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Complex types", + "description": "\nThe following metafield types return nested elements, or different elements depending on the metafield contents:\n\n- [`dimension`](/docs/api/liquid/filters/metafield_tag#metafield_tag-dimension)\n- [`file_reference`](/docs/api/liquid/filters/metafield_tag#metafield_tag-file_reference)\n- [`list.single_line_text_field`](/docs/api/liquid/filters/metafield_tag#metafield_tag-list.single_line_text_field)\n- [`volume`](/docs/api/liquid/filters/metafield_tag#metafield_tag-volume)\n- [`weight`](/docs/api/liquid/filters/metafield_tag#metafield_tag-weight)\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "dimension", + "description": "Outputs a `<span>` element with the following attribute:\n\n| Attribute | Value |\n| --- | --- |\n| `class` | `metafield-dimension` |\n\nThe `<span>` element contains the following child elements:\n\n| Child element | HTML element | Attributes |\n| --- | --- | --- |\n| The dimension value.<br><br>If it's a decimal with more than two places, then it'll be formatted to have a precision of two with trailing zeros removed. | `<span>` | `class=\"metafield-dimension_value\"` |\n| The dimension unit. | `<span>` | `class=\"metafield-dimension_unit\"` |\n", + "syntax": "", + "path": "/products/komodo-dragon-scale", + "raw_liquid": "{{ product.metafields.details.scale_width | metafield_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "file_reference", + "description": "The output varies depending on the type of file. There are the following categories of file type:\n\n| File type | Description |\n| --- | --- |\n| Image | Images in the format of `jpg`, `png`, `gif`, `heic`, and `webp`. |\n| Video | Videos in the format of `mov`, and `mp4`. |\n| Other | Any other file type. |\n\n##### Image\n\nOutputs an `<img>` element with the following attributes:\n\n| Attribute | Value |\n| --- | --- |\n| `src` | The image's URL. |\n| `alt` | The image's alt text. |\n| `class` | `metafield-file_reference` |\n\n##### Video\n\nOutputs a `<video>` element with the following attributes:\n\n| Attribute | Value |\n| --- | --- |\n| `src` | The video's URL. |\n| `poster` | The video's preview image (poster) URL. |\n| `playsinline` | N/A - Indicates the video will be played \"inline\" within the element's playback area. |\n| `preload` | `metadata` - Only metadata is pre-fetched before the video is played. |\n\nThe `<video>` element contains the following child elements:\n\n| Child element | HTML element | Attributes |\n| --- | --- | --- |\n| The video's multimedia playlist source, for [HTTP live streaming (HLS)](https://developer.apple.com/streaming/) | `<source>` | `src=\"<the video's m3u8 source URL>\"`<br><br>`type=\"application/x-mpegURL\"` |\n| The video's original source | `<source>` | `src=\"<the video's source URL>\"`<br><br>`type=\"<the video's original source MIME type>\"` |\n| The video's preview (poster) image | `<img>` | `src=\"<the video's preview image URL>\"` |\n\n##### Other\n\nOutputs an `<a>` element with a link to the file and the following attribute:\n\n| Attribute | Value |\n| --- | --- |\n| `class` | `metafield-file_reference` |\n\nThe `<a>` element contains an `<img>` element for the file's [preview image](/docs/api/liquid/objects/generic_file#generic_file-preview_image) with the following attributes:\n\n| Attribute | Value |\n| --- | --- |\n| `src` | The file's preview image URL. |\n| `loading` | `lazy` - The image isn't loaded until it's almost in view. |\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "<!-- Image -->\n{{ product.metafields.information.promo_image | metafield_tag }}\n\n<!-- Video -->\n{{ product.metafields.information.promo_video | metafield_tag }}\n\n<!-- Other -->\n{{ product.metafields.information.disclaimers | metafield_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "list.single_line_text_field", + "description": "Outputs a `<ul>` element by default with the following attribute:\n\n| Attribute | Value |\n| --- | --- |\n| `class` | `metafield-single_line_text_field-array` |\n\nThe `<ul>` element contains an `<li>` element for each item in the list with a `class` of `metafield-single_line_text_field`.\n\nTo output an `<ol>` element, pass the `list_format` parameter with a value of `ordered`.\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "<!-- <ul> element -->\n{{ product.metafields.information.pickup_locations | metafield_tag }}\n\n<!-- <ol> element -->\n{{ product.metafields.information.pickup_locations | metafield_tag: list_format: 'ordered' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "volume", + "description": "Outputs a `<span>` element with the following attribute:\n\n| Attribute | Value |\n| --- | --- |\n| `class` | `metafield-volume` |\n\nThe `<span>` element contains the following child elements:\n\n| Child element | HTML element | Attributes |\n| --- | --- | --- |\n| The volume value.<br><br>If it's a decimal with more than two places, then it'll be formatted to have a precision of two with trailing zeros removed. | `<span>` | `class=\"metafield-volume_value\"` |\n| The volume unit. | `<span>` | `class=\"metafield-volume_unit\"` |\n", + "syntax": "", + "path": "/products/dandelion-milk", + "raw_liquid": "{{ product.metafields.details.milk_container_volume | metafield_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "weight", + "description": "Outputs a `<span>` element with the following attribute:\n\n| Attribute | Value |\n| --- | --- |\n| `class` | `metafield-weight` |\n\nThe `<span>` element contains the following child elements:\n\n| Child element | HTML element | Attributes |\n| --- | --- | --- |\n| The weight value.<br><br>If it's a decimal with more than two places, then it'll be formatted to have a precision of two with trailing zeros removed. | `<span>` | `class=\"metafield-weight_value\"` |\n| The weight unit. | `<span>` | `class=\"metafield-weight_unit\"` |\n", + "syntax": "", + "path": "/products/dried-chamomile", + "raw_liquid": "{{ product.metafields.details.chamomile_base_weight | metafield_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Generates an HTML element to host the metafield data. The type of element that's generated differs depending on the\ntype of metafield.", + "syntax": "metafield | metafield_tag", + "name": "metafield_tag" + }, + { + "category": "metafield", + "deprecated": false, + "deprecation_reason": "", + "description": "The following outlines the output for each metafield type:\n\n| Metafield type | Output |\n| --- | --- |\n| `single_line_text_field` | The metafield text. |\n| `multi_line_text_field` | The metafield text. |\n| `page_reference` | The page title. |\n| `product_reference` | The product title. |\n| `collection_reference` | The collection title. |\n| `variant_reference` | The variant title. |\n| `file_reference` | The file URL. |\n| `number_integer` | The number. |\n| `number_decimal` | The number. |\n| `date` | The date. |\n| `date-time` | The date and time. |\n| `url` | The URL. |\n| `json` | The JSON. |\n| `boolean` | The boolean value. |\n| `color` | The color value. |\n| `weight` | The weight value and unit.<br><br>If the value is a decimal with more than two places, then it'll be formatted to have a precision of two with trailing zeros removed. |\n| `volume` | The volume value and unit.<br><br>If the value is a decimal with more than two places, then it'll be formatted to have a precision of two with trailing zeros removed. |\n| `dimension` | The dimension value and unit.<br><br>If the value is a decimal with more than two places, then it'll be formatted to have a precision of two with trailing zeros removed. |\n| `rating` | The rating value. |\n| `list.single_line_text_field` | The metafield values converted to a sentence.<br><br>For example, if you had the values `Toronto`, `Ottawa`, and `Vancouver`, then the output would be:<br><br>`Toronto, Ottawa, and Vancouver` |\n| `money` | The money value, formatted using the store's [**HTML with currency** setting](https://help.shopify.com/manual/payments/currency-formatting). |\n| `rich_text_field` | The rich text value as simple text. |", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.metafields.information.dosage | metafield_text }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "summary": "Generates a text version of the metafield data.", + "syntax": "metafield | metafield_text", + "name": "metafield_text" + }, + { + "category": "money", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.price | money }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Formats a given price based on the store's [**HTML without currency** setting](https://help.shopify.com/manual/payments/currency-formatting).", + "syntax": "number | money", + "name": "money" + }, + { + "category": "money", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.price | money_with_currency }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Formats a given price based on the store's [**HTML with currency** setting](https://help.shopify.com/manual/payments/currency-formatting).", + "syntax": "number | money_with_currency", + "name": "money_with_currency" + }, + { + "category": "money", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.price | money_without_currency }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Formats a given price based on the store's [**HTML without currency** setting](https://help.shopify.com/manual/payments/currency-formatting), without the currency symbol.", + "syntax": "number | money_without_currency", + "name": "money_without_currency" + }, + { + "category": "money", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.price | money_without_trailing_zeros }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Formats a given price based on the store's [**HTML without currency** setting](https://help.shopify.com/manual/payments/currency-formatting), excluding the decimal separator\n(either `.` or `,`) and trailing zeros.\n\nIf the price has a non-zero decimal value, then the output is the same as the [`money` filter](/docs/api/liquid/filters#money).", + "syntax": "number | money_without_trailing_zeros", + "name": "money_without_trailing_zeros" + }, + { + "category": "default", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{% paginate collection.products by 2 %}\n {% for product in collection.products %}\n {{- product.title }}\n {% endfor %}\n\n {{- paginate | default_pagination -}}\n{% endpaginate %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates HTML for a set of links for paginated results. Must be applied to the [`paginate` object](/docs/api/liquid/objects/paginate).", + "syntax": "paginate | default_pagination", + "name": "default_pagination" + }, + { + "category": "customer", + "deprecated": false, + "deprecation_reason": "", + "description": "Configure the storefront for Follow on Shop. [Learn more](https://help.shopify.com/manual/online-store/themes/customizing-themes/follow-on-shop)\n\n> Note:\n> The presence of the [Shop](/docs/api/liquid/objects/shop) object\n> is required for validation purposes only.\n\n> Note:\n> The `action` specified is always `'follow'`. If this parameter is not supplied the button will not render.\n\n```liquid\n{{ shop | login_button: action: 'follow' }}\n```", + "parameters": [ + { + "description": "Specify 'follow' for the follow flow.", + "name": "action", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + + ], + "summary": "Generates an HTML Button that enables a customer to follow the Shop in the Shop App", + "syntax": "shop | login_button: action: 'follow'", + "name": "login_button" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'variable-name' | camelize }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string to CamelCase.", + "syntax": "string | camelize", + "name": "camelize" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The `handleize` filter has an alias of `handle`.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.title | handleize }}\n{{ product.title | handle }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Converts a string into a [handle](/docs/api/liquid/basics#handles).", + "syntax": "string | handleize", + "name": "handleize" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '<p>Health & Love potions</p>' | url_escape }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Escapes any URL-unsafe characters in a string.", + "syntax": "string | url_escape", + "name": "url_escape" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "The `url_param_escape` filter escapes the same characters as [`url_escape`](/docs/api/liquid/filters/url_escape), with the\naddition of `&`.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ '<p>Health & Love potions</p>' | url_param_escape }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Escapes any characters in a string that are unsafe for URL parameters.", + "syntax": "string | url_param_escape", + "name": "url_param_escape" + }, + { + "category": "collection", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions/extra-potent", + "raw_liquid": "{% for tag in collection.all_tags %}\n {{- tag | highlight_active_tag | link_to_tag: tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Wraps a given tag in an HTML `<span>` tag, with a `class` attribute of `active`, if the tag is currently active. Only\napplies to collection tags.", + "syntax": "string | highlight_active_tag", + "name": "highlight_active_tag" + }, + { + "category": "tag", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn more about filtering by tag, refer to [Filter articles by tag](/themes/architecture/templates/blog#filter-articles-by-tag)\n> or [Filter collections by tag](/themes/navigation-search/filtering/tag-filtering).", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{% for tag in collection.all_tags %}\n {%- if current_tags contains tag -%}\n {{ tag }}\n {%- else -%}\n {{ tag | link_to_add_tag: tag }}\n {%- endif -%}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<a>` tag with an `href` attribute linking to the current blog or collection, filtered to show\nonly articles or products that have a given tag, as well as any currently active tags.", + "syntax": "string | link_to_add_tag", + "name": "link_to_add_tag" + }, + { + "category": "tag", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn more about filtering by tag, refer to [Filter articles by tag](/themes/architecture/templates/blog#filter-articles-by-tag)\n> or [Filter collections by tag](/themes/navigation-search/filtering/tag-filtering).", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{% for tag in collection.all_tags %}\n {%- if current_tags contains tag -%}\n {{ tag | link_to_remove_tag: tag }}\n {%- else -%}\n {{ tag | link_to_add_tag: tag }}\n {%- endif -%}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<a>` tag with an `href` attribute linking to the current blog or collection, filtered to show\nonly articles or products that have any currently active tags, except the provided tag.", + "syntax": "string | link_to_remove_tag", + "name": "link_to_remove_tag" + }, + { + "category": "tag", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn more about filtering by tag, refer to [Filter articles by tag](/themes/architecture/templates/blog#filter-articles-by-tag)\n> or [Filter collections by tag](/themes/navigation-search/filtering/tag-filtering).", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{% for tag in collection.all_tags %}\n {{- tag | link_to_tag: tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<a>` tag with an `href` attribute linking to the current blog or collection, filtered to show\nonly articles or products that have a given tag.", + "syntax": "string | link_to_tag", + "name": "link_to_tag" + }, + { + "category": "localization", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ shop.address | format_address }}", + "parameter": false, + "display_type": "html", + "show_data_tab": false + }, + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ customer.default_address | format_address }}", + "parameter": false, + "display_type": "html", + "show_data_tab": false + } + ], + "summary": "Generates an HTML address display, with each address component ordered according to the address's locale.", + "syntax": "address | format_address", + "name": "format_address" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The string that you want to highlight.", + "name": "highlighted_term", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/search?q=love", + "raw_liquid": "{% for item in search.results %}\n {% if item.object_type == 'product' %}\n {{ item.description | highlight: search.terms }}\n {% else %}\n {{ item.content | highlight: search.terms }}\n {% endif %}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Wraps all instances of a specific string, within a given string, with an HTML `<strong>` tag with a `class` attribute\nof `highlight`.", + "syntax": "string | highlight: string", + "name": "highlight" + }, + { + "category": "string", + "deprecated": false, + "deprecation_reason": "", + "description": "> Caution:\n> The `pluralize` filter applies English pluralization rules to determine which string to output. You shouldn't use this\n> filter on non-English strings because it could lead to incorrect pluralizations.", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/cart", + "raw_liquid": "Cart item count: {{ cart.item_count }} {{ cart.item_count | pluralize: 'item', 'items' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Outputs the singular or plural version of a string based on a given number.", + "syntax": "number | pluralize: string, string", + "name": "pluralize" + }, + { + "category": "media", + "deprecated": true, + "deprecation_reason": "The `article_img_url` filter has been replaced by [`image_url`](/docs/api/liquid/filters/image_url).", + "description": "", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.image | article_img_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "size", + "description": "By default, the `article_img_url` filter returns the `small` version of the image (100 x 100 px). However, you can specify a [size](/docs/api/liquid/filters/img_url#img_url-size).\n", + "syntax": "image | article_img_url: string", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{{ article.image | article_img_url: 'large' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for an [article's image](/docs/api/liquid/objects/article#article-image).", + "syntax": "variable | article_img_url", + "name": "article_img_url" + }, + { + "category": "hosted_file", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'red-and-black-bramble-berries.jpg' | asset_img_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "size", + "description": "By default, the `asset_img_url` filter returns the `small` version of the image (100 x 100 px). However, you can specify a [size](/docs/api/liquid/filters/img_url#img_url-size).\n", + "syntax": "image | asset_img_url: string", + "path": "/", + "raw_liquid": "{{ 'red-and-black-bramble-berries.jpg' | asset_img_url: 'large' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for an image in the\n[`assets` directory](/themes/architecture#assets) of a theme.", + "syntax": "string | asset_img_url", + "name": "asset_img_url" + }, + { + "category": "hosted_file", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'cart.js' | asset_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for a file in the\n[`assets` directory](/themes/architecture#assets) of a theme.", + "syntax": "string | asset_url", + "name": "asset_url" + }, + { + "category": "media", + "deprecated": true, + "deprecation_reason": "The `collection_img_url` filter has been replaced by [`image_url`](/docs/api/liquid/filters/image_url).", + "description": "", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.image | collection_img_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "The size parameter", + "description": "By default, the `collection_img_url` filter returns the `small` version of the image (100 x 100 px). However, you can specify a [size](/docs/api/liquid/filters/img_url#img_url-size).\n", + "syntax": "image | collection_img_url: string", + "path": "/collections/sale-potions", + "raw_liquid": "{{ collection.image | collection_img_url: 'large' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for a [collection's image](/docs/api/liquid/objects/collection#collection-image).", + "syntax": "variable | collection_img_url", + "name": "collection_img_url" + }, + { + "category": "hosted_file", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'potions-header.png' | file_img_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "The size parameter", + "description": "By default, the `file_img_url` filter returns the `small` version of the image (100 x 100 px). However, you can specify a [size](/docs/api/liquid/filters/img_url#img_url-size).\n", + "syntax": "image | file_img_url: string", + "path": "/", + "raw_liquid": "{{ 'potions-header.png' | file_img_url: 'large' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for an image from the\n[Files](https://www.shopify.com/admin/settings/files) page of the Shopify admin.", + "syntax": "string | file_img_url", + "name": "file_img_url" + }, + { + "category": "hosted_file", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'disclaimer.pdf' | file_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for a file from the\n[Files](https://www.shopify.com/admin/settings/files) page of the Shopify admin.", + "syntax": "string | file_url", + "name": "file_url" + }, + { + "category": "hosted_file", + "deprecated": false, + "deprecation_reason": "", + "description": "Global assets are kept in a directory on Shopify's server. Using global assets can be faster than loading the resource\ndirectly.\n\nDepending on the resource type, you might need to use an additional filter to load the resource. The following table\noutlines which filter to use for specific resource types.\n\n| Resource type | Additional filter |\n| --- | --- |\n| JavaScript (`.js`) | [`script_tag`](/docs/api/liquid/filters/script_tag) |\n| CSS (`.css`) | [`stylesheet_tag`](/docs/api/liquid/filters/stylesheet_tag) |\n\nThe following table outlines the available global assets:\n\n| Category | Assets |\n| --- | --- |\n| Firebug | - `firebug/firebug.css`<br>- `firebug/firebug.html`<br>- `firebug/firebug.js`<br>- `firebug/firebugx.js`<br>- `firebug/errorIcon.png`<br>- `firebug/infoIcon.png`<br>- `firebug/warningIcon.png` |\n| JavaScript libraries | - `controls.js`<br>- `dragdrop.js`<br>- `effects.js`<br>- `ga.js`<br>- `mootools.js` |\n| Lightbox | - `lightbox.css`<br>- `lightbox.js`<br><br>- `lightbox/v1/lightbox.css`<br>- `lightbox/v1/lightbox.js`<br><br>- `lightbox/v2/lightbox.css`<br>- `lightbox/v2/lightbox.js`<br>- `lightbox/v2/close.gif`<br>- `lightbox/v2/loading.gif`<br>- `lightbox/v2/overlay.png`<br>- `lightbox/v2/zoom-lg.gif`<br><br>- `lightbox/v204/lightbox.css`<br>- `lightbox/v204/lightbox.js`<br>- `lightbox/v204/bullet.gif`<br>- `lightbox/v204/close.gif`<br>- `lightbox/v204/closelabel.gif`<br>- `lightbox/v204/donatebutton.gif`<br>- `lightbox/v204/downloadicon.gif`<br>- `lightbox/v204/loading.gif`<br>- `lightbox/v204/nextlabel.png`<br>- `lightbox/v204/prevlabel.gif` |\n| Prototype | - `prototype.js`<br>- `prototype/1.5/prototype.js`<br>- `prototype/1.6/prototype.js` |\n| script.aculo.us | - `scriptaculous/1.8.2/scriptaculous.js`<br>- `scriptaculous/1.8.2/builder.js`<br>- `scriptaculous/1.8.2/controls.js`<br>- `scriptaculous/1.8.2/dragdrop.js`<br>- `scriptaculous/1.8.2/effects.js`<br>- `scriptaculous/1.8.2/slider.js`<br>- `scriptaculous/1.8.2/sound.js`<br>- `scriptaculous/1.8.2/unittest.js` |\n| Shopify | - `list-collection.css`<br>- `textile.css` |", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'lightbox.js' | global_asset_url | script_tag }}\n\n{{ 'lightbox.css' | global_asset_url | stylesheet_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for a global asset.", + "syntax": "string | global_asset_url", + "name": "global_asset_url" + }, + { + "category": "media", + "deprecated": false, + "deprecation_reason": "", + "description": "You can use the `image_url` filter on the following objects, as well as their `src` property:\n\n- [`article`](/docs/api/liquid/objects/article)\n- [`collection`](/docs/api/liquid/objects/collection)\n- [`image`](/docs/api/liquid/objects/image)\n- [`line_item`](/docs/api/liquid/objects/line_item)\n- [`product`](/docs/api/liquid/objects/product)\n- [`variant`](/docs/api/liquid/objects/variant)\n- [`country`](/docs/api/liquid/objects/country)\n\n> Caution:\n> You need to specify either a [`width`](/docs/api/liquid/filters/image_url#image_url-width) or\n> [`height`](/docs/api/liquid/filters/image_url#image_url-height) parameter. If neither are specified, then an error is returned.\n\n> Note:\n> Regardless of the specified dimensions, an image can never be resized to be larger than its original dimensions.", + "parameters": [ + { + "description": "How the image should be cropped to match the desired dimensions.", + "name": "crop", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The file format for the image.", + "name": "format", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The padding color, if the provided image is smaller than the requested dimensions.", + "name": "pad_color", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The desired image width, in pixels.", + "name": "width", + "required": true, + "types": [ + "number" + ] + }, + { + "description": "The desired image height, in pixels.", + "name": "height", + "required": true, + "types": [ + "number" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 450 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "width", + "description": "Specify the width of the image up to a maximum of `5760px`. If only the width is specified, then the height is automatically calculated based on the image's dimensions.\n", + "syntax": "variable | image_url: width: number", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 450 }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "height", + "description": "Specify the height of the image up to a maximum of `5760px`. If only the height is specified, then the width is automatically calculated based on the image's dimensions.\n", + "syntax": "variable | image_url: height: number", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: height: 450 }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "crop", + "description": "Specify which part of the image to show if the specified dimensions result in an aspect ratio that differs from the original. You can use the following values:\n\n- `top`\n- `center`\n- `bottom`\n- `left`\n- `right`\n- `region`\n\nThe default value is `center`.\n\nWhen using the `region` crop mode, the starting point for the crop is defined by `crop_left` and `crop_top` and extends to the `crop_width` and `crop_height`.\nOptionally, to resize the region extracted by the crop, use the `width` and `height` parameters.\n\n> Note:\n> Country flags are SVG images and can only be cropped if a value for `format`\n> is also provided.\n", + "syntax": "variable | image_url: crop: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 400, height: 400, crop: 'bottom' }}\n\n{{ product | image_url: crop: 'region', crop_left: 32, crop_top: 32, crop_width: 512, crop_height: 512 }}\n\n{{ product | image_url: crop: 'region', width: 100, height: 100, crop_left: 32, crop_top: 32, crop_width: 512, crop_height: 512 }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "format", + "description": "Specify which file format to use for the image. The valid formats are `pjpg` and `jpg`.\n\nIt's not practical to convert a lossy image format, like `jpg`, to a lossless image format, like `png`, so Shopify can do\nonly the following conversions:\n\n- `png` to `jpg`\n- `png` to `pjpg`\n- `jpg` to `pjpg`\n\n> Note:\n> Shopify automatically detects which image formats are supported by the client (e.g. `WebP`, `AVIF`, etc.) and\n> selects a file format for optimal quality and file size. When a format is specified, Shopify takes into account\n> the features (e.g. progressive, alpha channel) of the specified file format when making the final automatic format selection.\n> To learn more, visit https://cdn.shopify.com/.\n", + "syntax": "variable | image_url: format: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 450, format: 'pjpg' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "pad_color", + "description": "Specify a color to pad the image if the specified dimensions result in an aspect ratio that differs from the original. The color must be in hexadecimal format (`hex3` or `hex6`).\n", + "syntax": "variable | image_url: pad_color: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | image_url: width: 400, height: 400, pad_color: '000' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for an image.", + "syntax": "variable | image_url: width: number, height: number", + "name": "image_url" + }, + { + "category": "media", + "deprecated": true, + "deprecation_reason": "The `img_tag` filter has been replaced by [`image_tag`](/docs/api/liquid/filters/image_tag).", + "description": "You can also use the `img_tag` filter on the following objects:\n\n- [`article`](/docs/api/liquid/objects/article)\n- [`collection`](/docs/api/liquid/objects/collection)\n- [`image`](/docs/api/liquid/objects/image)\n- [`line_item`](/docs/api/liquid/objects/line_item)\n- [`product`](/docs/api/liquid/objects/product)\n- [`variant`](/docs/api/liquid/objects/variant)", + "parameters": [ + { + "description": "The image's alt text.", + "name": "alt", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The desired `class` attribute.", + "name": "class", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Optional parameters", + "description": "The `img_tag` filter accepts 3 unnamed parameters, separated by commas, to specify the `alt` and `class` attributes, and the\n[size](/docs/api/liquid/filters/img_url#img_url-size) of the image. Because the parameters are read in that order, you must include a value for each parameter before the last\nparameter you want to specify. If you don't want to include a parameter that precedes one that you do want to include, then\nyou can set the value to an empty string.\n\n> Note:\n> The `size` attribute of the `img_tag` filter can't be used in conjunction with the [`img_url` filter](/docs/api/liquid/filters/img_url).\n> If both are used, then the `img_url` filter will override the `size` parameter of the `img_tag` filter.\n", + "syntax": "variable | img_tag: string, string, string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_tag: 'image alt text', '', '450x450' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<img>` tag for a given image URL.", + "syntax": "string | img_tag", + "name": "img_tag" + }, + { + "category": "media", + "deprecated": true, + "deprecation_reason": "The `img_url` filter has been replaced by [`image_url`](/docs/api/liquid/filters/image_url).", + "description": "You can use the `img_url` filter on the following objects:\n\n- [`article`](/docs/api/liquid/objects/article)\n- [`collection`](/docs/api/liquid/objects/collection)\n- [`image`](/docs/api/liquid/objects/image)\n- [`line_item`](/docs/api/liquid/objects/line_item)\n- [`product`](/docs/api/liquid/objects/product)\n- [`variant`](/docs/api/liquid/objects/variant)", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The part of the image to show if the specified image has an aspect ratio that differs from the original.", + "name": "crop", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "The desired pixel density.", + "name": "scale", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The desired image format.", + "name": "format", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "size", + "description": "The size parameter allows you to specify the dimensions of the image up to a maximum of 5760 x 5760 px. You can specify only the width, only the height, or both, and you can also use the following named sizes:\n\n| Name | Dimensions |\n| --- | --- |\n| `pico` | `16x16 px` |\n| `icon` | `32x32 px` |\n| `thumb` | `50x50 px` |\n| `small` | `100x100 px` |\n| `compact` | `160x160 px` |\n| `medium` | `240x240 px` |\n| `large` |`480x480 px` |\n| `grande` | `600x600 px` |\n| `original`<br>`master` | `1024x1024 px` |\n", + "syntax": "variable | img_url: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_url: '480x' }}\n\n{{ product | img_url: 'x480' }}\n\n{{ product | img_url: '480x480' }}\n\n{{ product | img_url: 'large' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "crop", + "description": "The `crop` parameter allows you to specify which part of the image to show if the specified dimensions result in an aspect ratio that differs from the original. You can use the following values:\n\n- `top`\n- `center`\n- `bottom`\n- `left`\n- `right`\n\nThe default value is `center`.\n", + "syntax": "variable | img_url: crop: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_url: crop: 'bottom' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "format", + "description": "Specify which file format to use for the image. The valid formats are `pjpg` and `jpg`.\n\nIt's not practical to convert a lossy image format, like `jpg`, to a lossless image format, like `png`, so this filter does\nonly the following conversions:\n\n- `png` to `jpg`\n- `png` to `pjpg`\n- `jpg` to `pjpg`\n\n> Note:\n> Shopify automatically detects which image formats are supported by the client (e.g. `WebP`, `AVIF`, etc.) and\n> selects a file format for optimal quality and file size. When a format is specified, Shopify takes into account\n> the features (e.g. progressive, alpha channel) of the specified file format when making the final automatic format selection.\n> To learn more, visit https://cdn.shopify.com/.\n", + "syntax": "variable | img_url: format: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_url: format: 'pjpg' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "scale", + "description": "Specify the pixel density of the image. The valid densities are 2 and 3.", + "syntax": "variable | img_url: scale: number", + "path": "/products/health-potion", + "raw_liquid": "{{ product | img_url: scale: 2 }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for an image.", + "syntax": "variable | img_url", + "name": "img_url" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The URL to link to.", + "name": "url", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'Shopify' | link_to: 'https://www.shopify.com' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/a#attributes) by including a parameter that matches the attribute name, and the desired value.\n", + "syntax": "string | link_to_type: attribute: string", + "path": "/", + "raw_liquid": "{{ 'Shopify' | link_to: 'https://www.shopify.com', class: 'link-class' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<a>` tag.", + "syntax": "string | link_to: string", + "name": "link_to" + }, + { + "category": "payment", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for type in shop.enabled_payment_types %}\n<img src=\"{{ type | payment_type_img_url }}\" width=\"50\" height=\"50\" />\n{% endfor %}", + "parameter": false, + "display_type": "html", + "show_data_tab": true + } + ], + "summary": "Returns the URL for an SVG image of a given [payment type](/docs/api/liquid/objects/shop#shop-enabled_payment_types).", + "syntax": "type | payment_type_img_url", + "name": "payment_type_img_url" + }, + { + "category": "payment", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The desired `class` attribute.", + "name": "class", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for type in shop.enabled_payment_types -%}\n {{ type | payment_type_svg_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "class", + "description": "Specify the `class` attribute of the `<svg>` tag.", + "syntax": "type | payment_type_svg_tag: class: string", + "path": "/", + "raw_liquid": "{% for type in shop.enabled_payment_types -%}\n {{ type | payment_type_svg_tag: class: 'custom-class' }}\n{% endfor %}", + "parameter": false, + "display_type": "html", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<svg>` tag for a given [payment type](/docs/api/liquid/objects/shop#shop-enabled_payment_types).", + "syntax": "type | payment_type_svg_tag", + "name": "payment_type_svg_tag" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "Accepts the following placeholder names:\n\n| Outline illustrations | Color illustrations |\n| --- | --- |\n| <ul><li>`product-1`</li><li>`product-2`</li><li>`product-3`</li><li>`product-4`</li> <li>`product-5`</li><li>`product-6`</li><li>`collection-1`</li><li>`collection-2`</li><li>`collection-3`</li><li>`collection-4`</li><li>`collection-5`</li><li>`collection-6`</li><li>`lifestyle-1`</li><li>`lifestyle-2`</li><li>`image`</li></ul> | <ul><li>`product-apparel-1`</li><li>`product-apparel-2`</li><li>`product-apparel-3`</li><li>`product-apparel-4`</li><li>`collection-apparel-1`</li><li>`collection-apparel-2`</li><li>`collection-apparel-3`</li><li>`collection-apparel-4`</li><li>`hero-apparel-1`</li><li>`hero-apparel-2`</li><li>`hero-apparel-3`</li><li>`blog-apparel-1`</li><li>`blog-apparel-2`</li><li>`blog-apparel-3`</li><li>`detailed-apparel-1`</li></ul> |", + "parameters": [ + { + "description": "The desired `class` attribute.", + "name": "class", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'collection-1' | placeholder_svg_tag }}", + "parameter": false, + "display_type": "html", + "show_data_tab": true + }, + { + "name": "class", + "description": "Specify the `class` attribute for the `<svg>` tag.", + "syntax": "string | placeholder_svg_tag: string", + "path": "/", + "raw_liquid": "{{ 'collection-1' | placeholder_svg_tag: 'custom-class' }}", + "parameter": true, + "display_type": "html", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<svg>` tag for a given placeholder name.", + "syntax": "string | placeholder_svg_tag", + "name": "placeholder_svg_tag" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "You should use this filter sparingly. For example, consider preloading only resources necessary for rendering\nabove-the-fold content. To learn more about preloading resources, refer to\n[Performance best practices for Shopify themes](/themes/best-practices/performance#preload-key-resources-defer-or-avoid-loading-others).\n\n> Tip:\n> If you want to preload a stylesheet, then use [`stylesheet_tag`](/docs/api/liquid/filters/stylesheet_tag). If you want to\n> preload an image, then use [`image_tag`](/docs/api/liquid/filters/image_tag).\n\nThe input to this filter must be a URL from one of the following filters:\n\n- [`asset_url`](/docs/api/liquid/filters/asset_url)\n- [`global_asset_url`](/docs/api/liquid/filters/global_asset_url)\n- [`shopify_asset_url`](/docs/api/liquid/filters/shopify_asset_url)\n\nThe `preload_tag` filter also requires an [`as` parameter](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attr-as)\nbased on the kind of resource being preloaded.", + "parameters": [ + { + "description": "The type of element or resource to preload.", + "name": "as", + "required": true, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'cart.js' | asset_url | preload_tag: as: 'script' }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/link#attributes) by adding a parameter that matches the attribute name, and the desired value.\n", + "syntax": "string | preload_tag: as: string, attribute: string", + "path": "/", + "raw_liquid": "{{ 'cart.js' | asset_url | preload_tag: as: 'script', type: 'text/javascript' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<link>` tag with a `rel` attribute of `preload` to prioritize loading a given Shopify-hosted asset.\nThe asset URL is also added to the [Link header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link)\nwith a `rel` attribute of `preload`.", + "syntax": "string | preload_tag: as: string", + "name": "preload_tag" + }, + { + "category": "media", + "deprecated": true, + "deprecation_reason": "The `product_img_url` filter has been replaced by [`image_url`](/docs/api/liquid/filters/image_url).", + "description": "This can be the product's `featured_image` or any image from the `images` array.", + "parameters": [ + { + "description": "The desired image size.", + "name": "size", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.featured_image | product_img_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "The size parameter", + "description": "By default, the `product_img_url` filter returns the `small` version of the image (100 x 100 px). However, you can specify a [size](/docs/api/liquid/filters/img_url#img_url-size).\n", + "syntax": "image | product_img_url: string", + "path": "/products/health-potion", + "raw_liquid": "{{ product.images[0] | product_img_url: 'large' }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for a [product image](/docs/api/liquid/objects/product).", + "syntax": "variable | product_img_url", + "name": "product_img_url" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'cart.js' | asset_url | script_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<script>` tag for a given resource URL. The tag has a `type` attribute of `text/javascript`.", + "syntax": "string | script_tag", + "name": "script_tag" + }, + { + "category": "hosted_file", + "deprecated": false, + "deprecation_reason": "", + "description": "The following are the globally accessible Shopify assets:\n\n- `option_selection.js`\n- `api.jquery.js`\n- `shopify_common.js`\n- `customer_area.js`\n- `currencies.js`\n- `customer.css`", + "parameters": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'option_selection.js' | shopify_asset_url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Returns the [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for a globally accessible Shopify asset.", + "syntax": "string | shopify_asset_url", + "name": "shopify_asset_url" + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The type of media that the resource applies to.", + "name": "media", + "required": false, + "types": [ + "string" + ] + }, + { + "description": "Whether the resource should be preloaded.", + "name": "preload", + "required": false, + "types": [ + "boolean" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ 'base.css' | asset_url | stylesheet_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "preload", + "description": "Specify whether the stylesheet should be preloaded.\n\nWhen `preload` is set to `true`, a resource hint is sent as a [Link header](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link) with a `rel` value of\n[`preload`](https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preload).\n\n```liquid\nLink: <STYLESHEET_URL>; rel=preload; as=style\n```\n\nThis option doesn't affect the HTML link tag directly.\n\nYou should use the `preload` parameter sparingly. For example, consider preloading only render-blocking stylesheets that\nare needed for initial functionality of the page, such as above-the-fold content. To learn more about resource hints in\nShopify themes, refer to [Performance best practices for Shopify themes](/themes/best-practices/performance#preload-key-resources-defer-or-avoid-loading-others).\n", + "syntax": "stylesheet_url | stylesheet_tag: preload: boolean", + "path": "", + "raw_liquid": "", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates an HTML `<link>` tag for a given resource URL. The tag has the following parameters:\n\n| Attribute | Value |\n| --- | --- |\n| `rel` | `stylesheet` |\n| `type` | `text/css` |\n| `media` | `all` |", + "syntax": "string | stylesheet_tag", + "name": "stylesheet_tag" + }, + { + "category": "format", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + { + "description": "The weight unit to use in place of the default weight unit.", + "name": "weight_unit", + "required": false, + "types": [ + "string" + ] + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/blue-mountain-flower", + "raw_liquid": "{%- assign variant = product.variants.first -%}\n\n{{ variant.weight | weight_with_unit }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Override the default unit", + "description": "You can specify a unit to override the default from the general settings.", + "syntax": "number | weight_with_unit: variable", + "path": "/products/blue-mountain-flower", + "raw_liquid": "{%- assign variant = product.variants.first -%}\n\n{{ variant.weight | weight_with_unit: variant.weight_unit }}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ], + "summary": "Generates a formatted weight for a [`variant` object](/docs/api/liquid/objects/variant#variant-weight). The weight unit is\nset in the [general settings](https://www.shopify.com/admin/settings/general) in the Shopify admin.", + "syntax": "number | weight_with_unit", + "name": "weight_with_unit" + } +] \ No newline at end of file diff --git a/data/platformos_liquid/documentation/latest.json b/data/platformos_liquid/documentation/latest.json new file mode 100644 index 00000000..78e16e00 --- /dev/null +++ b/data/platformos_liquid/documentation/latest.json @@ -0,0 +1,2 @@ +{ "revision": "6f0e7d39d7c65e5054f54aa609e99aaf105bb2c5" } + diff --git a/data/platformos_liquid/documentation/objects.json b/data/platformos_liquid/documentation/objects.json new file mode 100644 index 00000000..17427b0f --- /dev/null +++ b/data/platformos_liquid/documentation/objects.json @@ -0,0 +1,20595 @@ +[ + { + "access": { + "global": false, + "parents": [ + { + "object": "product", + "property": "media" + }, + { + "object": "product", + "property": "featured_media" + }, + { + "object": "variant", + "property": "featured_media" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `media` object can be returned by the [`product.media` array](/docs/api/liquid/objects/product#product-media) or a\n[`file_reference` metafield](/apps/metafields/types).\n\nYou can use [media filters](/docs/api/liquid/filters/media-filters) to generate URLs and media displays. To learn about how\nto use media in your theme, refer to [Support product media](/themes/product-merchandising/media/support-media).\n\n> Note:\n> Each media type has unique properties in addition to the general `media` properties. To learn about these\n> additional properties, refer to the reference for each type.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the media.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the source is a [`file_reference` metafield](/apps/metafields/types), then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The position of the media in the [`product.media` array](/docs/api/liquid/objects/product#product-media).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Filter for media of a specific type", + "description": "You can use the `media_type` property with the [`where` filter](/docs/api/liquid/filters/where) to filter the [`product.media` array](/docs/api/liquid/objects/product#product-media) for all media of a desired type.\n", + "syntax": "", + "path": "/products/snake-venom", + "raw_liquid": "{% assign images = product.media | where: 'media_type', 'image' %}\n\n{% for image in images %}\n {{- image | image_url: width: 300 | image_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "image", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "model", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "video", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "external_video", + "description": "", + "array_value": "" + } + ], + "summary": "The media type.", + "name": "media_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Preview images don't have an ID attribute.", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A preview image of the media.", + "name": "preview_image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alt text of the media.", + "name": "alt" + } + ], + "summary": "An abstract media object that can represent the following object types:\n\n- [`image`](/docs/api/liquid/objects/image)\n- [`model`](/docs/api/liquid/objects/model)\n- [`video`](/docs/api/liquid/objects/video)\n- [`external_video`](/docs/api/liquid/objects/external_video)", + "name": "media", + "examples": [ + + ], + "json_data": { + "path": "/products/dandelion-milk", + "handle": "product.media[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "checkout", + "property": "billing_address" + }, + { + "object": "checkout", + "property": "shipping_address" + }, + { + "object": "customer", + "property": "addresses" + }, + { + "object": "customer", + "property": "default_address" + }, + { + "object": "location", + "property": "address" + }, + { + "object": "order", + "property": "billing_address" + }, + { + "object": "order", + "property": "shipping_address" + }, + { + "object": "shop", + "property": "address" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`format_address` filter](/docs/api/liquid/filters/format_address) to output an address according to its locale.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no company is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The company of the address.", + "name": "company" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no phone number is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The phone number of the address.", + "name": "phone" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first name of the address.", + "name": "first_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last name of the address.", + "name": "last_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A combination of the first and last names of the address.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This only applies to customer addresses.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL for the address.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A summary of the address, including the following properties:\n\n- First and last name\n- First and second lines\n- City\n- Province\n- Country", + "name": "summary" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the address.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first line of the address.", + "name": "address1" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no second line is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The second line of the address.", + "name": "address2" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The city of the address.", + "name": "city" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The zip or postal code of the address.", + "name": "zip" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The country of the address in [ISO 3166-1 (alpha 2) format](https://www.iso.org/glossary-for-iso-3166.html).", + "name": "country_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The value doesn't include the preceding [ISO 3166-1](https://www.iso.org/glossary-for-iso-3166.html) country code.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The province of the address in [ISO 3166-2 (alpha 2) format](https://www.iso.org/glossary-for-iso-3166.html).", + "name": "province_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "country", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The country of the address.", + "name": "country" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A combination of the first and second lines of the address.", + "name": "street" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The province of the address.", + "name": "province" + } + ], + "summary": "An address, such as a customer address or order shipping address.", + "name": "address", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "shop.address", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "All of the [collections](/docs/api/liquid/objects/collection) on a store.", + "name": "collections", + "examples": [ + { + "name": "Iterate over the collections", + "description": "You can iterate over `collections` to build a collection list.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% for collection in collections %}\n {{- collection.title | link_to: collection.url }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Access a specific collection", + "description": "You can use `collections` to access a collection by its [handle](/docs/api/liquid/basics#handles).\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% for product in collections['sale-potions'].products %}\n {{- product.title | link_to: product.url }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "collection" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "All of the [pages](/docs/api/liquid/objects/page) on a store.", + "name": "pages", + "examples": [ + { + "name": "", + "description": "You can access a specific page through the `pages` object using the page's [handle](/docs/api/liquid/basics#handles).\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ pages.contact.title }}\n{{ pages['about-us'].title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Paginate the `pages` object", + "description": "You can [paginate](/docs/api/liquid/tags/paginate) the `pages` object, allowing you to iterate over up to 50 pages at a time.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% paginate pages by 2 -%}\n {% for page in pages -%}\n {{ page.title | link_to: page.url }}\n {%- endfor %}\n\n {{- paginate | default_pagination }}\n{%- endpaginate %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "page" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The `all_products` object has a limit of 20 unique handles per page. If you want more than 20 products,\nthen consider using a collection instead.", + "properties": [ + + ], + "summary": "All of the products on a store.", + "name": "all_products", + "examples": [ + { + "name": "", + "description": "You can use `all_products` to access a product by its [handle](/docs/api/liquid/basics#handles). If the product isn't found, then `empty` is returned.", + "syntax": "", + "path": "/", + "raw_liquid": "{{ all_products['love-potion'].title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "product" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) that are [owned by the app](/apps/metafields/app-owned).", + "name": "metafields" + } + ], + "summary": "An app. This object is usually used to access app-specific information for use with [theme app extensions](/apps/online-store/theme-app-extensions).", + "name": "app", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "cart", + "property": "discounts" + }, + { + "object": "line_item", + "property": "discounts" + }, + { + "object": "order", + "property": "discounts" + }, + { + "object": "checkout", + "property": "discount" + } + ], + "template": [ + + ] + }, + "deprecated": true, + "deprecation_reason": "Deprecated because not all discount types and details are captured.\n\nThe `discount` object has been replaced by the [`discount_allocation`](/docs/api/liquid/objects/discount_allocation) and\n[`discount_application`](/docs/api/liquid/objects/discount_application) objects.", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`discount.total_amount`](/docs/api/liquid/objects/discount#discount-total_amount).\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of the discount in the currency's subunit.", + "name": "amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`discount.amount`](/docs/api/liquid/objects/discount#discount-amount).\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of the discount in the currency's subunit.", + "name": "total_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`discount.title`](/docs/api/liquid/objects/discount#discount-title).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer-facing name of the discount.", + "name": "code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`discount.code`](/docs/api/liquid/objects/discount#discount-code).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer-facing name of the discount.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "FixedAmountDiscount", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "PercentageDiscount", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "ShippingDiscount", + "description": "", + "array_value": "" + } + ], + "summary": "The type of the discount.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`discount.total_savings`](/docs/api/liquid/objects/discount#discount-total_savings).\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of the discount as a negative value, in the currency's subunit.", + "name": "savings" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`discount.savings`](/docs/api/liquid/objects/discount#discount-savings).\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of the discount as a negative value, in the currency's subunit.", + "name": "total_savings" + } + ], + "summary": "A discount applied to a cart, line item, or order.", + "name": "discount", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[2].discounts[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "All of the articles across the blogs in the store.", + "name": "articles", + "examples": [ + { + "name": "", + "description": "You can use `articles` to access an article by its [handle](/docs/api/liquid/basics#handles).\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% assign article = articles['potion-notions/new-potions-for-spring'] %}\n{{ article.title | link_to: article.url }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "article" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "articles", + "property": "" + }, + { + "object": "blog", + "property": "articles" + } + ], + "template": [ + "article" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The featured image for the article.", + "name": "image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The full name of the author of the article.", + "name": "author" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the article.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the article.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the article.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the article.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the article.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name doesn't include the `article.` prefix, or the file extension (`.json` or `.liquid`).\n\n If a custom template isn't assigned to the article, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the [custom template](/themes/architecture/templates#alternate-templates) assigned to the article.", + "name": "template_suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the article was created.", + "name": "created_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the article was published.", + "name": "published_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the article was updated.", + "name": "updated_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the blog that the article belongs to is set to [moderate comments](https://help.shopify.com/manual/online-store/blogs/managing-comments).\nReturns `false` if not.", + "name": "moderated?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Returns an empty array if comments are disabled.\n\n> Tip:\n> Use the [paginate](/docs/api/liquid/tags/paginate) tag to choose how many comments to show at once, up to a limit of 50.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "comment" + } + ], + "summary": "The published comments for the article.", + "name": "comments" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of published comments for the article.", + "name": "comments_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if comments are enabled. Returns `false` if not.", + "name": "comments_enabled?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL where POST requests are sent when creating new comments.", + "name": "comment_post_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The content of the article.", + "name": "content" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The excerpt of the article.", + "name": "excerpt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns the article [excerpt](/docs/api/liquid/objects/article#article-excerpt) if it exists. Returns the article\n[content](/docs/api/liquid/objects/article#article-content) if no excerpt exists.", + "name": "excerpt_or_content" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Show the total tag count", + "description": "When looping through `article.tags`, you can print how many times a tag is used with `tag.total_count`. This number shows visitors how many blog posts have been tagged with a particular tag.\n", + "syntax": "", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{% for tag in article.tags -%}\n {{ tag }} ({{ tag.total_count }})\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The tags applied to the article.", + "name": "tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "user", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The user associated with the author of the article.", + "name": "user" + } + ], + "summary": "An article, or [blog post](https://help.shopify.com/manual/online-store/blogs/writing-blogs), in a blog.", + "name": "article", + "examples": [ + + ], + "json_data": { + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "handle": "article", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "section", + "property": "blocks" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Sections and blocks are reusable modules of content that make up [templates](/themes/architecture/templates).\n\nTo learn more about using blocks, refer to the [Shopify Partners blog](https://www.shopify.com/partners/blog/theme-blocks).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The ID is dynamically generated by Shopify.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the block.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to access settings, refer to [Access settings](/themes/architecture/settings#access-settings). To learn which input settings can be applied to the `type` property within settings, refer to [Input settings](/themes/architecture/settings/input-settings).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [settings](/themes/architecture/sections/section-schema#blocks) of the block.", + "name": "settings" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The type is a free-form string that's defined in the [block's schema](/themes/architecture/sections/section-schema#blocks).\nYou can use the type as an identifier. For example, you might display different markup based on the block type.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The type of the block.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The theme editor's [JavaScript API](/themes/architecture/sections/integrate-sections-with-the-theme-editor#section-and-block-javascript-events)\nuses the data attributes to identify blocks and listen for events. No value for `block.shopify_attributes` is returned\noutside the theme editor.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The data attributes for the block for use in the theme editor.", + "name": "shopify_attributes" + } + ], + "summary": "The content and settings of a [section block](/themes/architecture/sections/section-schema#blocks).", + "name": "block", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"id\":\"column1\",\"settings\":\"array\",\"shopify_attributes\":\"data-shopify-editor-block=\\\"{\\\"id\\\":\\\"column1\\\",\\\"type\\\":\\\"column\\\"}\\\"\",\"type\":\"column\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "All of the blogs in the store.", + "name": "blogs", + "examples": [ + { + "name": "", + "description": "You can use `blogs` to access a blog by its [handle](/docs/api/liquid/basics#handles).\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% for article in blogs.potion-notions.articles %}\n {{- article.title | link_to: article.url }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "blog" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + "blog", + "article" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the blog.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the blog.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the blog.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [paginate](/docs/api/liquid/tags/paginate) tag to choose how many articles to show per page, up to a limit of 50.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "article" + } + ], + "summary": "The articles in the blog.", + "name": "articles" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of articles in the blog. This total doesn't include hidden articles.", + "name": "articles_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "metafield" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the blog.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the blog.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name doesn't include the `blog.` prefix, or the file extension (`.json` or `.liquid`).\n\n If a custom template isn't assigned to the blog, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the [custom template](/themes/architecture/templates#alternate-templates) assigned to the blog.", + "name": "template_suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This includes tags of articles that aren't in the current pagination view.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "All of the tags on the articles in the blog.", + "name": "all_tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "A list of all of the tags on all of the articles in the blog.\n\nUnlike [`blog.all_tags`](/docs/api/liquid/objects/blog#blog-all_tags), this property only returns tags of articles that are in the\nfiltered view.", + "name": "tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if comments are enabled for the blog. Returns `false` if not.", + "name": "comments_enabled?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the blog is set to\n[moderate comments](https://help.shopify.com/manual/online-store/blogs/managing-comments). Returns `false` if not.", + "name": "moderated?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Returns `nil` if there is no next article.\n\nThis property can be used on the [article page](/themes/architecture/templates/article) to output `next` links.", + "examples": [ + + ], + "return_type": [ + { + "type": "article", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The next (older) article in the blog.", + "name": "next_article" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Returns `nil` if there is no previous article.\n\nThis property can be used on the [article page](/themes/architecture/templates/article) to output `previous` links.", + "examples": [ + + ], + "return_type": [ + { + "type": "article", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The previous (newer) article in the blog.", + "name": "previous_article" + } + ], + "summary": "Information about a specific [blog](https://help.shopify.com/manual/online-store/blogs/adding-a-blog) in the store.", + "name": "blog", + "examples": [ + + ], + "json_data": { + "path": "/blogs/potion-notions/new-potions-for-spring", + "handle": "blog", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "shop", + "property": "brand" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The slogan for the brand.", + "name": "slogan" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A short description of the brand.", + "name": "short_description" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The square logo for the brand, resized to 32x32 px.", + "name": "favicon_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The square logo for the brand, resized to 32x32 px.", + "name": "cover_image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The default logo for the brand.", + "name": "logo" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The square logo for the brand.", + "name": "square_logo" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to access brand colors, refer to [`brand_color`](/docs/api/liquid/objects/brand_color).", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "The brand's colors.", + "name": "colors" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Social links are stored in [metafields](/docs/api/liquid/objects/metafield), and can be accessed using the syntax `shop.brand.metafields.social_links.<platform>.value`.\n\n| Platforms |\n| --- |\n| `facebook` |\n| `pinterest` |\n| `instagram` |\n| `tiktok` |\n| `tumblr` |\n| `snapchat` |\n| `vimeo` |", + "examples": [ + { + "name": "Access social links", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ shop.brand.metafields.social_links.twitter.value }}\n{{ shop.brand.metafields.social_links.youtube.value }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + + ], + "summary": "The social links for the brand.", + "name": "metafields" + } + ], + "summary": "The [brand assets](https://help.shopify.com/manual/promoting-marketing/managing-brand-assets) for the store.", + "name": "brand", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "shop.brand", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + "cart" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if any of the products in the cart require shipping. Returns `false` if not.", + "name": "requires_shipping" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn more about capturing cart notes, refer to the [`cart` template](/themes/architecture/templates/cart#support-cart-notes-and-attributes).", + "examples": [ + { + "name": "Capture cart notes", + "description": "To capture a cart note, include an HTML input such as a `<textarea>` with an attribute of `name=\"note\"` within the cart `<form>`.\n\n```liquid\n<label>Gift note:</label>\n<textarea name=\"note\"></textarea>\n```\n\n> Note:\n> There can only be one instance of `{{ cart.note }}` on the cart page. If there are multiple instances,\n> then the one that comes latest in the Document Object Model (DOM) will be submitted with the form.\n", + "syntax": "", + "path": "/cart", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Additional information captured with the cart.", + "name": "note" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of items in the cart.", + "name": "item_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total price of all of the items in the cart in the currency's subunit, after discounts have been applied.", + "name": "total_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount that the customer will be charged at checkout in the currency's subunit.", + "name": "checkout_charge_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total price of all of the items in the cart in the currency's subunit, before discounts have been applied.", + "name": "original_total_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total price of all of the items in the cart in the currency's subunit, after any line item discounts. This\ndoesn't include taxes (unless taxes are included in the prices), cart discounts, or shipping costs.", + "name": "items_subtotal_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount of all discounts (the amount saved) for the cart in the currency's subunit.", + "name": "total_discount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The line items in the cart.", + "name": "items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if there are no items in the cart. Return's `false` if there are.", + "name": "empty?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the store uses multi-currency, then this is the same as the customer's local\n(presentment) currency. Otherwise, it's the same as the store currency.\n\n> Tip:\n> You can output the store's available currencies using [`shop.enabled_currencies`](/docs/api/liquid/objects/shop#shop-enabled_currencies).", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "The currency of the cart.", + "name": "currency" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`weight_with_unit`](/docs/api/liquid/filters/weight_with_unit) filter to format the weight in\n> [the store's format](https://www.shopify.com/admin/settings/general), or override the default unit.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total weight of all of the items in the cart in grams.", + "name": "total_weight" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Display discount applications", + "description": "", + "syntax": "", + "path": "/cart", + "raw_liquid": "{% for discount_application in cart.discount_applications %}\n Discount name: {{ discount_application.title }}\n Savings: -{{ discount_application.total_allocated_amount | money }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The discount applications for the cart.", + "name": "discount_applications" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn more about capturing cart attributes, refer to the [`cart` template](/themes/architecture/templates/cart#support-cart-notes-and-attributes).", + "examples": [ + { + "name": "Capture cart attributes", + "description": "To capture a cart attribute, include an HTML input with an attribute of `name=\"attributes[attribute-name]\"` within the cart `<form>`.\n\n```liquid\n<label>What do you want engraved on your cauldron?</label>\n<input type=\"text\" name=\"attributes[cauldron-engraving]\" value=\"{{ cart.attributes.cauldron-engraving }}\" />\n```\n\n> Tip:\n> You can add a double underscore `__` prefix to an attribute name to make it private. Private attributes behave like other cart attributes, except that they can't be read from Liquid or the Ajax API.\n> You can use them for data that doesn't affect the page rendering, which allows for more effective page caching.\n", + "syntax": "", + "path": "/cart", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Additional attributes entered by the customer with the cart.", + "name": "attributes" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Display cart-level discount applications", + "description": "", + "syntax": "", + "path": "/cart", + "raw_liquid": "{% for discount_application in cart.cart_level_discount_applications %}\n Discount name: {{ discount_application.title }}\n Savings: -{{ discount_application.total_allocated_amount | money }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The cart-specific discount applications for the cart.", + "name": "cart_level_discount_applications" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because not all discount types and details are available.\n\nThe `cart.discounts` property has been replaced by [`cart.discount_applications`](/docs/api/liquid/objects/cart#cart-discount_applications).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount" + } + ], + "summary": "The discounts applied to the cart.", + "name": "discounts" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This can be set in a store’s [tax settings](https://www.shopify.com/admin/settings/taxes).\n\nIf the store includes or exclude tax [based on the customer’s country](https://help.shopify.com/manual/taxes/location#include-or-exclude-tax-based-on-your-customers-country),\nthen the value reflects the tax requirements of the customer’s country.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if taxes are included in the prices of products in the cart. Returns `false` if not.", + "name": "taxes_included" + } + ], + "summary": "A customer’s cart.", + "name": "cart", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "cart", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "collections", + "property": "" + } + ], + "template": [ + "collection" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "metafield" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the collection.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the collection.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the collection.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the collection.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The description of the collection.", + "name": "description" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name doesn't include the `collection.` prefix, or the file extension (`.json` or `.liquid`).\n\n If a custom template isn't assigned to the collection, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the [custom template](/themes/architecture/templates#alternate-templates) assigned to the collection.", + "name": "template_suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can query for products from a certain vendor at the `/collections/vendors` URL\nwith a query parameter in the format of `?q=[vendor]`, where `[vendor]` is your desired product vendor.\n\n> Tip:\n> The query value is case-insensitive, so `apparelco` is equivalent to `ApparelCo` or `APPARELCO`.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The vendor name on a vendor collection page.", + "name": "current_vendor" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can query for products of a certain type at the `/collections/types` URL\nwith a query parameter in the format of `?q=[type]`, where `[type]` is your desired product type.\n\n> Tip:\n> The query value is case-insensitive, so `shirts` is equivalent to `Shirts` or `SHIRTS`.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The product type on a product type collection page.", + "name": "current_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the collection.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the collection was published.", + "name": "published_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This image is added on the collection's page in the Shopify admin.", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The image for the collection.", + "name": "image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the sort options", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{%- assign sort_by = collection.sort_by | default: collection.default_sort_by -%}\n\n<select>\n{%- for option in collection.sort_options %}\n <option\n value=\"{{ option.value }}\"\n {%- if option.value == sort_by %}\n selected=\"selected\"\n {%- endif %}\n >\n {{ option.name }}\n </option>\n{% endfor -%}\n</select>", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "sort_option" + } + ], + "summary": "The available sorting options for the collection.", + "name": "sort_options" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no `sort_by` URL parameter, then the value is `nil`.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The sort order applied to the collection by the `sort_by` URL parameter.", + "name": "sort_by" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This is set on the collection's page in the Shopify admin.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "manual", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "best-selling", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "title-ascending", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "price-ascending", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "price-descending", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "created-ascending", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "created-descending", + "description": "", + "array_value": "" + } + ], + "summary": "The default sort order of the collection.", + "name": "default_sort_by" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property can be used on the [product page](/themes/architecture/templates/product) to output `next` links.", + "examples": [ + + ], + "return_type": [ + { + "type": "product", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The next product in the collection. Returns `nil` if there's no next product.", + "name": "next_product" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property can be used on the [product page](/themes/architecture/templates/product) to output `previous` links.", + "examples": [ + + ], + "return_type": [ + { + "type": "product", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The previous product in the collection. Returns `nil` if there's no previous product.", + "name": "previous_product" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of products in the current view of the collection.", + "name": "products_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [paginate](/docs/api/liquid/tags/paginate) tag to choose how many products to show per page, up to a limit of 50.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "product" + } + ], + "summary": "All of the products in the collection.", + "name": "products" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This includes products that have been filtered out of the current view.\n\n> Tip:\n> To display the number of products in a filtered collection, use [`collection.products_count`](/docs/api/liquid/objects/collection#collection-products_count).", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of products in a collection.", + "name": "all_products_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This includes tags for products that have been filtered out of the current view.\nA maximum of 1,000 tags can be returned.\n\n> Tip:\n> To display the tags that are currently applied, use [`collection.tags`](/docs/api/liquid/objects/collection#collection-tags).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "All of the tags applied to the products in the collection.", + "name": "all_tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This doesn't include tags for products that have been filtered out of the current view.\nReturns `nil` if no tags have been applied, or all products with tags have been filtered out of the current view.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The tags that are currently applied to the collection.", + "name": "tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Create links to product types", + "description": "Use the [`link_to_type`](/docs/api/liquid/filters/link_to_type) filter to create links to the product types in a collection.\n", + "syntax": "", + "path": "/collections/ingredients", + "raw_liquid": "{% for product_type in collection.all_types -%}\n {{- product_type | link_to_type }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "All of the product types in a collection.", + "name": "all_types" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Create links to vendors", + "description": "Use the [`link_to_vendor`](/docs/api/liquid/filters/link_to_vendor) filter to create links to the vendors in a collection.\n", + "syntax": "", + "path": "/collections/ingredients", + "raw_liquid": "{% for product_vendor in collection.all_vendors %}\n {{- product_vendor | link_to_vendor }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "All of the product vendors in a collection.", + "name": "all_vendors" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Only filters relevant to the current collection are returned. Filters will be empty for collections that contain over 5000 products.\n\nTo learn about supporting filters in your theme, refer to [Support storefront filtering](/themes/navigation-search/filtering/storefront-filtering/support-storefront-filtering).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "filter" + } + ], + "summary": "The [storefront filters](https://help.shopify.com/manual/online-store/themes/customizing-themes/storefront-filters) that\nhave been set up on the collection.", + "name": "filters" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The default is the [collection image](/docs/api/liquid/objects/collection#collection-image). If this image isn't available, then\nShopify falls back to the featured image of the first product in the collection. If the first product in the collection\ndoesn't have a featured image, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The featured image for the collection.", + "name": "featured_image" + } + ], + "summary": "A [collection](https://help.shopify.com/manual/products/collections) in a store.", + "name": "collection", + "examples": [ + + ], + "json_data": { + "path": "/collections/ingredients/burning", + "handle": "collection", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "brand", + "property": "colors" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "The colors defined as part of a store's [brand assets](https://help.shopify.com/manual/promoting-marketing/managing-brand-assets).", + "name": "brand_color", + "examples": [ + { + "name": "", + "description": "To access a brand color, specify the following:\n- The brand color group: either `primary` or `secondary`\n- The color role: Whether the color is a `background` or `foreground` (contrasting) color\n- The 0-based index of the color within the group and role\n", + "syntax": "shop.brand.colors.group[index].role", + "path": "/", + "raw_liquid": "{{ shop.brand.colors.primary[0].background }}\n{{ shop.brand.colors.primary[0].foreground }}\n{{ shop.brand.colors.secondary[0].background }}\n{{ shop.brand.colors.secondary[1].background }}\n{{ shop.brand.colors.secondary[0].foreground }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use [color filters](/docs/api/liquid/filters/color-filters) to modify or extract properties of a `color` object.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The red component of the color, which is a number between 0 and 255.", + "name": "red" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The green component of the color, which is a number between 0 and 255.", + "name": "green" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The blue component of the color, which is a number between 0 and 255.", + "name": "blue" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The red, green, and blue values of the color, represented as a space-separated string.", + "name": "rgb" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The red, green, blue, and alpha values of the color, represented as a\nspace-separated string, with a slash before the alpha channel.", + "name": "rgba" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The hue component of the color, which is a number between 0 and 360.", + "name": "hue" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The saturation component of the color, which is a number between 0 and 100.", + "name": "saturation" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The lightness component of the color, which is a number between 0 and 100.", + "name": "lightness" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alpha component of the color, which is a decimal number between 0.0 and 1.0.", + "name": "alpha" + } + ], + "summary": "A color from a [`color` setting](/themes/architecture/settings/input-settings#color).", + "name": "color", + "examples": [ + { + "name": "Referencing color settings directly", + "description": "When a color setting is referenced directly, the hexidecimal color code is returned.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ settings.colors_accent_2 }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/", + "handle": "settings.colors_accent_2", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about color scheme groups in themes, refer to [`color_scheme_group` setting](/themes/architecture/settings/input-settings#color_scheme_group).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the color_scheme", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [settings](https://shopify.dev/docs/themes/architecture/settings/input-settings#color_scheme_group) of the color_scheme.", + "name": "settings" + } + ], + "summary": "A color_scheme from a [`color_scheme` setting](/themes/architecture/settings/input-settings#color_scheme).", + "name": "color_scheme", + "examples": [ + { + "name": "Referencing color_scheme settings directly", + "description": "When a color_scheme setting is referenced directly, the color scheme ID is returned.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ settings.card_color_scheme }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/", + "handle": "settings.card_color_scheme", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about color schemes in themes, refer to [`color_scheme` setting](/themes/architecture/settings/input-settings#color_scheme).", + "properties": [ + + ], + "summary": "A color_scheme_group from a [`color_scheme_group` setting](/themes/architecture/settings/input-settings#color_scheme_group).", + "name": "color_scheme_group", + "examples": [ + { + "name": "Referencing color_scheme_group settings directly", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for scheme in settings.color_schemes %}\n .color-{{ scheme.id }} {\n --color-background: {{ scheme.settings.background }};\n --color-text: {{ scheme.settings.text }};\n }\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/", + "handle": "settings.color_schemes", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "company_location", + "property": "shipping_address" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The attention line of the address.", + "name": "attention" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the address.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first line of the address.", + "name": "address1" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no second line is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The second line of the address.", + "name": "address2" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The city of the address.", + "name": "city" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The zip or postal code of the address.", + "name": "zip" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The country of the address in [ISO 3166-1 (alpha 2) format](https://www.iso.org/glossary-for-iso-3166.html).", + "name": "country_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The value doesn't include the preceding [ISO 3166-1](https://www.iso.org/glossary-for-iso-3166.html) country code.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The province of the address in [ISO 3166-2 (alpha 2) format](https://www.iso.org/glossary-for-iso-3166.html).", + "name": "province_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "country", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The country of the address.", + "name": "country" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A combination of the first and second lines of the address.", + "name": "street" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The province of the address.", + "name": "province" + } + ], + "summary": "The address of a company location.", + "name": "company_address", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.company_available_locations[0].shipping_address", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "company_location", + "property": "company" + }, + { + "object": "customer", + "property": "current_company" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the company.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the company.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "company_location" + } + ], + "summary": "The company locations that the current customer has access to, or can interact with.", + "name": "available_locations" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "metafield" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the company.", + "name": "metafields" + } + ], + "summary": "A company that a [customer](/docs/api/liquid/objects/customer) is purchasing for.", + "name": "company", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.company_available_locations[0].company", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "company", + "property": "available_locations" + }, + { + "object": "customer", + "property": "company_available_locations" + }, + { + "object": "customer", + "property": "current_location" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the location.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the location.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL to set the location as the current location for the customer.", + "name": "url_to_set_as_current" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the location is currently selected. Returns `false` if not.", + "name": "current?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "company", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The company that the location is associated with.", + "name": "company" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "company_address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The address of the location.", + "name": "shipping_address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The tax ID of the location.", + "name": "tax_registration_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "metafield" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the company location.", + "name": "metafields" + } + ], + "summary": "A location of the [company](/docs/api/liquid/objects/company) that a [customer](/docs/api/liquid/objects/customer) is purchasing for.", + "name": "company_location", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.company_available_locations[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Include the `content_for_header` object in your [layout files](/themes/architecture/layouts) between the `<head>` and\n`</head>` HTML tags.\n\nYou shouldn't try to modify or parse the `content_for_header` object because the contents are subject to change, which can\nchange the behaviour of your code.\n\n> Note:\n> The `content_for_header` object is required in `theme.liquid`.", + "properties": [ + + ], + "summary": "Dynamically returns all scripts required by Shopify.", + "name": "content_for_header", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "localization", + "property": "available_countries" + }, + { + "object": "localization", + "property": "country" + }, + { + "object": "address", + "property": "country" + }, + { + "object": "company_address", + "property": "country" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn how to use the `country` object to offer localization options in your theme,\nrefer to [Support multiple currencies and languages](/themes/internationalization/multiple-currencies-languages).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the country.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ISO code of the country in [ISO 3166-1 (alpha 2) format](https://www.iso.org/glossary-for-iso-3166.html).", + "name": "iso_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "imperial", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "metric", + "description": "", + "array_value": "" + } + ], + "summary": "The unit system of the country.", + "name": "unit_system" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "currency", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currency used in the country.", + "name": "currency" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "market", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The market that includes this country.", + "name": "market" + } + ], + "summary": "A country supported by the store's localization options.", + "name": "country", + "examples": [ + { + "name": "Referencing the `country` object directly", + "description": "When the country object is referenced directly, `country.name` is returned.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% for country in localization.available_countries -%}\n {{ country }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Rendering a flag image", + "description": "When the country object is passed to the [`image_url`](/docs/api/liquid/filters#image_url) filter, a [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for that country’s flag is returned. All country’s flags are SVGs, normalized to an aspect ratio of 4:3.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ localization.country | image_url: width: 32 | image_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/", + "handle": "localization.country", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "cart", + "property": "currency" + }, + { + "object": "country", + "property": "currency" + }, + { + "object": "shop", + "property": "enabled_currencies" + }, + { + "object": "money", + "property": "currency" + }, + { + "object": "shop", + "property": "currency" + }, + { + "object": "shop", + "property": "money_format" + }, + { + "object": "shop", + "property": "money_with_currency_format" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [ISO code](https://www.iso.org/iso-4217-currency-codes.html) of the currency.", + "name": "iso_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The symbol of the currency.", + "name": "symbol" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the currency.", + "name": "name" + } + ], + "summary": "Information about a currency, like the ISO code and symbol.", + "name": "currency", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "localization.country.currency", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + { + "object": "checkout", + "property": "customer" + }, + { + "object": "gift_card", + "property": "customer" + }, + { + "object": "order", + "property": "customer" + } + ], + "template": [ + "customers/account", + "customers/addresses", + "customers/order" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `customer` object is directly accessible globally when a customer is logged in to their account. It's also defined in\nthe following contexts:\n\n- The [`customers/account` template](/themes/architecture/templates/customers-account)\n- The [`customers/addresses` template](/themes/architecture/templates/customers-addresses)\n- The [`customers/order` template](/themes/architecture/templates/customers-order)\n- When accessing [`checkout.customer`](/docs/api/liquid/objects/checkout#checkout-customer)\n- When accessing [`gift_card.customer`](/docs/api/liquid/objects/gift_card#gift_card-customer)\n- When accessing [`order.customer`](/docs/api/liquid/objects/order#order-customer)\n\nOutside of the above contexts, if the customer isn't logged into their account, the `customer` object returns `nil`.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first name of the customer.", + "name": "first_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last name of the customer.", + "name": "last_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of orders that the customer has placed.", + "name": "orders_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount that the customer has spent on all orders in the currency's subunit.", + "name": "total_spent" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [paginate](/docs/api/liquid/tags/paginate) tag to choose how many orders to show at once, up to a limit of 20.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "order" + } + ], + "summary": "All of the orders placed by the customer.", + "name": "orders" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "order", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last order placed by the customer, not including test orders.", + "name": "last_order" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The full name of the customer.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email of the customer.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This phone number is only populated if the customer checks out using a phone number during checkout, opts in to SMS\nnotifications, or if the merchant has manually entered it.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The phone number of the customer.", + "name": "phone" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "A customer can complete a checkout without making an account with the store. If the customer\ndoesn't have an account with the store, then `customer.has_account` is `false` at checkout.\n\nDuring the checkout process, if the customer has an account with the store and enters an email associated\nwith an account, then `customer.has_account` is `true`. The email is associated with the account regardless\nof whether the customer has logged into their account.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the email associated with the customer is tied to a\n[customer account](https://help.shopify.com/manual/customers/customer-accounts). Returns `false` if not.", + "name": "has_account" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the customer accepts marketing. Returns `false` if not.", + "name": "accepts_marketing" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the customer.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The tags associated with the customer.", + "name": "tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The default address of the customer.", + "name": "default_address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [paginate](/docs/api/liquid/tags/paginate) tag to choose how many addresses to show at once, up to a limit of 20.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "address" + } + ], + "summary": "All of the addresses associated with the customer.", + "name": "addresses" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of addresses associated with the customer.", + "name": "addresses_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the customer is exempt from taxes. Returns `false` if not.", + "name": "tax_exempt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the customer is a B2B customer. Returns `false` if not.", + "name": "b2b?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "company_location" + } + ], + "summary": "The company locations that the customer has access to, or can interact with.", + "name": "company_available_locations" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "examples": [ + + ], + "return_type": [ + { + "type": "company_location", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected company location.", + "name": "current_location" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about B2B in themes, refer to [Support B2B customers in your theme](/themes/pricing-payments/b2b).", + "examples": [ + + ], + "return_type": [ + { + "type": "company", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The company that the customer is purchasing for.", + "name": "current_company" + } + ], + "summary": "A [customer](https://help.shopify.com/manual/customers) of the store.", + "name": "customer", + "examples": [ + { + "name": "Check whether the `customer` object is defined", + "description": "When using the `customer` object outside of customer-specific templates or objects that specifically return a customer, you should check whether the `customer` object is defined.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% if customer %}\n Hello, {{ customer.first_name }}!\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/", + "handle": "customer", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "discount_allocations" + }, + { + "object": "shipping_method", + "property": "discount_allocations" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to display discounts in your theme, refer to [Discounts](/themes/pricing-payments/discounts).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "discount_application", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The discount application that applies the discount to the item.", + "name": "discount_application" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount that the item is discounted by in the currency's subunit.", + "name": "amount" + } + ], + "summary": "Information about how a discount affects an item.", + "name": "discount_allocation", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[2].line_items[0].discount_allocations[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "cart", + "property": "discount_applications" + }, + { + "object": "order", + "property": "discount_applications" + }, + { + "object": "discount_allocation", + "property": "discount_application" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to display discounts in your theme, refer to [Discounts](/themes/pricing-payments/discounts).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount of the discount in the currency's subunit.", + "name": "total_allocated_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer-facing name of the discount.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "How this value is interpreted depends on the [value type](/docs/api/liquid/objects/discount_application#discount_application-value_type) of the\ndiscount. The following table outlines what the value represents for each value type:\n\n| Value type | Value |\n| --- | --- |\n| `fixed_amount` | The amount of the discount in the currency's subunit. |\n| `percentage` | The percent amount of the discount. |\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the discount.", + "name": "value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Whether the selection method applies to line items or shipping lines depends on the discount's\n> [target type](/docs/api/liquid/objects/discount_application#discount_application-target_type).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "all", + "description": "The discount applies to all line items or shipping lines.", + "array_value": "" + }, + { + "type": "string", + "name": "entitled", + "description": "The discount applies to a specific set of line items or shipping lines based on some criteria.", + "array_value": "" + }, + { + "type": "string", + "name": "explicit", + "description": "The discount applies to a specific line item or shipping line.", + "array_value": "" + } + ], + "summary": "The selection method for line items or shipping lines to be discounted.", + "name": "target_selection" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "automatic", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "discount_code", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "manual", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "script", + "description": "", + "array_value": "" + } + ], + "summary": "The type of the discount.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "fixed_amount", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "percentage", + "description": "", + "array_value": "" + } + ], + "summary": "The value type of the discount.", + "name": "value_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "line_item", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "shipping_line", + "description": "", + "array_value": "" + } + ], + "summary": "The type of item that the discount applies to.", + "name": "target_type" + } + ], + "summary": "Information about the intent of a discount.", + "name": "discount_application", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "cart.discount_applications[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "product", + "property": "media" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`external_video_tag` filter](/docs/api/liquid/filters/external_video_tag) to output the video in an\n> HTML `<iframe>` tag. Use the [`external_video_url` filter](/docs/api/liquid/filters/external_video_url) to specify parameters\n> for the external video player.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the video from its external source.", + "name": "external_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The aspect ratio of the video as a decimal.", + "name": "aspect_ratio" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "youtube", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "vimeo", + "description": "", + "array_value": "" + } + ], + "summary": "The service that hosts the video.", + "name": "host" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alt text of the external video.", + "name": "alt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the external video.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Filter for media of a specific type", + "description": "You can use the `media_type` property with the [`where` filter](/docs/api/liquid/filters/where) to filter the [`product.media` array](/docs/api/liquid/objects/product#product-media) for all media of a desired type.\n", + "syntax": "", + "path": "/products/potion-beats", + "raw_liquid": "{% assign external_videos = product.media | where: 'media_type', 'external_video' %}\n\n{% for external_video in external_videos %}\n {{- external_video | external_video_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The media type of the external video. Always returns `external_video`.", + "name": "media_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The position of the external video in the [`product.media`](/docs/api/liquid/objects/product#product-media) array.", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Preview images don't have an ID attribute.", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A preview image of the media.", + "name": "preview_image" + } + ], + "summary": "Information about an external video from YouTube or Vimeo.", + "name": "external_video", + "examples": [ + + ], + "json_data": { + "path": "/products/potion-beats", + "handle": "product.featured_media", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "collection", + "property": "filters" + }, + { + "object": "search", + "property": "filters" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about supporting filters in your theme, refer to [Support storefront filtering](/themes/navigation-search/filtering/storefront-filtering/support-storefront-filtering).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL parameter for the filter. For example, `filter.v.option.color`.", + "name": "param_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer-facing label for the filter.", + "name": "label" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "boolean", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "list", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "price_range", + "description": "", + "array_value": "" + } + ], + "summary": "The type of the filter.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "filter_value" + } + ], + "summary": "The values of the filter that are currently active.\n\nThe array can have values only for `boolean` and `list` type filters.", + "name": "active_values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The array can have values only for `boolean` and `list` type filters.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "filter_value" + } + ], + "summary": "The values of the filter that are currently inactive.", + "name": "inactive_values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "filter_value" + } + ], + "summary": "The values of the filter.\n\nThe array can have values only for `boolean` and `list` type filters.", + "name": "values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "filter_value", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The `false` filter value.\n\nReturns a value only for `boolean` type filters. Returns `nil` for other types.", + "name": "false_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "filter_value", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The `true` filter value.\n\nReturns a value only for `boolean` type filters. Returns `nil` for other types.", + "name": "true_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "filter_value", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The highest filter value.\n\nReturns a value only for `price_range` type filters. Returns `nil` for other types.", + "name": "max_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "filter_value", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The lowest filter value.\n\nReturns a value only for `price_range` type filters. Returns `nil` for other types.", + "name": "min_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The highest product price within the collection or search results.\n\nReturns a value only for `price_range` type filters. Returns `nil` for other types.", + "name": "range_max" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The current page URL with the URL parameter related to the filter removed.", + "name": "url_to_remove" + } + ], + "summary": "A [storefront filter](https://help.shopify.com/manual/online-store/themes/customizing-themes/storefront-filters).", + "name": "filter", + "examples": [ + + ], + "json_data": { + "path": "/search?q=potion&filter.v.option.strength=Low", + "handle": "search.filters.to_a[3]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "filter", + "property": "" + }, + { + "object": "filter", + "property": "false_value" + }, + { + "object": "filter", + "property": "true_value" + }, + { + "object": "filter", + "property": "max_value" + }, + { + "object": "filter", + "property": "min_value" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about supporting filters in your theme, refer to [Support storefront filtering](/themes/navigation-search/filtering/storefront-filtering/support-storefront-filtering).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "For example, `filter.v.option.color`.\n\nFilters of type `price_range` include an extra component depending on whether the filter value is for the filter's\n`min_value` or `max_value`. The following table outlines the URL parameter for each:\n\n| Value type | URL parameter |\n| --- | --- |\n| `min_value` | `filter.v.price.gte` |\n| `max_value` | `filter.v.price.lte` |", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL parameter for the parent filter of the filter value.", + "name": "param_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value.", + "name": "value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the value is currently active. Returns `false` if not.\n\nCan only return `true` for filters of type `boolean` or `list`.", + "name": "active" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of results related to the filter value.\n\nReturns a value only for `boolean` and `list` type filters. Returns `nil` for `price_range` type filters.", + "name": "count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer-facing label for the filter value. For example, `Red` or `Rouge`.\n\nReturns a value only for `boolean` and `list` type filters. Returns `nil` for `price_range` type filters.", + "name": "label" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The current page URL with the filter value parameter added.", + "name": "url_to_add" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The current page URL with the filter value parameter removed.", + "name": "url_to_remove" + } + ], + "summary": "A specific value of a filter.", + "name": "filter_value", + "examples": [ + + ], + "json_data": { + "path": "/search?q=potion&filter.v.option.strength=Low", + "handle": "search.filters.to_a[3].values[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "image_presentation", + "property": "focal_point" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The focal point will remain visible when the image is cropped by the\ntheme. [Learn more about supporting focal points in your theme](https://shopify.dev/themes/architecture/settings/input-settings#image-focal-points).\n\n> Tip:\n> Use the [`image_tag`](/docs/api/liquid/filters/image_tag) filter to automatically apply focal point settings to an\n> image on the storefront. This applies the focal point using the `object-position` CSS property.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The horizontal position of the focal point, as a percent of the image width. Returns `50` if no focal point is set.", + "name": "x" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The vertical position of the focal point, as a percent of the image height. Returns `50` if no focal point is set.", + "name": "y" + } + ], + "summary": "The focal point for an image.", + "name": "focal_point", + "examples": [ + { + "name": "Referencing the `focal_point` object directly", + "description": "When a `focal_point` object is referenced directly, the coordinates are returned as a string, in the format `X% Y%`.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ images['potions-header.png'].presentation.focal_point }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "You can use the `font` object in Liquid [assets](/themes/architecture#assets) or inside a [`style` tag](/docs/api/liquid/tags/style)\nto apply font setting values to theme CSS.\n\n> Tip:\n> Use [font filters](/docs/api/liquid/filters/font-filters) to modify properties of the `font` object, load the font,\n> or obtain font variants.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The family name of the font.", + "name": "family" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The fallback families of the font.", + "name": "fallback_families" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The baseline ratio of the font as a decimal.", + "name": "baseline_ratio" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The weight of the font.", + "name": "weight" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The style of the font.", + "name": "style" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "font" + } + ], + "summary": "The variants in the family of the font.", + "name": "variants" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> You can use this property to determine whether you need to include a corresponding [font-face](/docs/api/liquid/filters/font_face)\n> declaration for the font.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the font is a system font. Returns `false` if not.", + "name": "system?" + } + ], + "summary": "A font from a [`font_picker` setting](/themes/architecture/settings/input-settings#font_picker).", + "name": "font", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "settings.type_header_font", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there are no errors, then `nil` is returned.\n\n> Tip:\n> You can apply the [`default_errors` filter](/docs/api/liquid/filters/default_errors) to `form.errors` to output default\n> error messages without having to loop through the array.", + "examples": [ + + ], + "return_type": [ + { + "type": "form_errors", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Any errors from the form.", + "name": "errors" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first address line associated with the address.", + "name": "address1" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The second address line associated with the address.", + "name": "address2" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`new_comment` form](/docs/api/liquid/tags/form#form-new_comment).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the author of the article comment.", + "name": "author" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`contact`](/docs/api/liquid/tags/form#form-contact) and [`new_comment`](/docs/api/liquid/tags/form#form-new_comment)\nforms.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The content of the contact submission or article comment.", + "name": "body" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The city associated with the address.", + "name": "city" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The company associated with the address.", + "name": "company" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The country associated with the address.", + "name": "country" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the following forms:\n\n- [`contact`](/docs/api/liquid/tags/form#form-contact)\n- [`create_customer`](/docs/api/liquid/tags/form#form-create_customer)\n- [`customer`](/docs/api/liquid/tags/form#form-customer)\n- [`customer_login`](/docs/api/liquid/tags/form#form-customer_login)\n- [`new_comment`](/docs/api/liquid/tags/form#form-new_comment)\n- [`recover_customer_password`](/docs/api/liquid/tags/form#form-recover_customer_password)\n- [`product`](/docs/api/liquid/tags/form#form-product)", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email associated with the form.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`create_customer`](/docs/api/liquid/tags/form#form-create_customer) and\n[`customer_address`](/docs/api/liquid/tags/form#form-customer_address) forms.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first name associated with the customer or address.", + "name": "first_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the form.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`create_customer`](/docs/api/liquid/tags/form#form-create_customer) and\n[`customer_address`](/docs/api/liquid/tags/form#form-customer_address) forms.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last name associated with the customer or address.", + "name": "last_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_login` form](/docs/api/liquid/tags/form#form-customer_login).", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true`.", + "name": "password_needed" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The phone number associated with the address.", + "name": "phone" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address) always returns `true`.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the form was submitted successfully. Returns `false` if there were errors.", + "name": "posted_successfully?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The province associated with the address.", + "name": "province" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Renders an HTML checkbox that can submit the address as the customer's default address.", + "name": "set_as_default_checkbox" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`product` form](/docs/api/liquid/tags/form#form-product).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The nickname of the gift card recipient.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`product` form](/docs/api/liquid/tags/form#form-product).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The personalized message intended for the recipient.", + "name": "message" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This property is exclusive to the [`customer_address` form](/docs/api/liquid/tags/form#form-customer_address).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The zip or postal code associated with the address.", + "name": "zip" + } + ], + "summary": "Information about a form created by a [`form` tag](/docs/api/liquid/tags/form).", + "name": "form", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"address1\":\"12 Phoenix Feather Alley\",\"address2\":\"1\",\"author\":null,\"body\":null,\"city\":\"Calgary\",\"company\":null,\"country\":\"Canada\",\"email\":null,\"errors\":null,\"first_name\":\"Cornelius\",\"id\":\"new\",\"last_name\":\"Potionmaker\",\"password_needed?\":false,\"phone\":\"44 131 496 0905\",\"posted_successfully?\":true,\"province\":\"Alberta\",\"set_as_default_checkbox\":\"<input type='checkbox' id='address_default_address_new' name='address[default]' value='1'>\",\"zip\":\"T1X 0L4\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "fulfillment" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the fulfillment was created.", + "name": "created_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of items in the fulfillment.", + "name": "item_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The line items in the fulfillment.", + "name": "fulfillment_line_items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the fulfillment service.", + "name": "tracking_company" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "An array of the fulfillment's tracking numbers.", + "name": "tracking_numbers" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no tracking number, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The fulfillment's tracking number.", + "name": "tracking_number" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no tracking number, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the fulfillment's tracking number.", + "name": "tracking_url" + } + ], + "summary": "An order [fulfillment](https://help.shopify.com/manual/orders/fulfillment), which includes information like the line items\nbeing fulfilled and shipment tracking.", + "name": "fulfillment", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[4].line_items[0].fulfillment", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "metafield", + "property": "value" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about metafield types, refer to [Metafield types](/apps/metafields/types).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) for the file.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the file.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The media type of the model. Always returns `generic_file`.", + "name": "media_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A preview image for the file.", + "name": "preview_image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the source is a [`file_reference` metafield](/apps/metafields/types), then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The position of the media in the [`product.media` array](/docs/api/liquid/objects/product#product-media).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alt text of the media.", + "name": "alt" + } + ], + "summary": "A file from a `file_reference` type [metafield](/docs/api/liquid/objects/metafield) that is neither an image or video.", + "name": "generic_file", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.metafields.information.disclaimers.value", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + "gift_card.liquid" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The remaining balance of the gift card in the currency's subunit.", + "name": "balance" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The code used to redeem the gift card.", + "name": "code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [ISO code](https://www.iso.org/iso-4217-currency-codes.html) of the currency that the gift card was issued in.", + "name": "currency" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "customer", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer associated with the gift card.", + "name": "customer" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there is no recipient associated with the gift card, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "recipient", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The recipient associated with the gift card.", + "name": "recipient" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there is no message intended for the recipient, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The personalized message intended for the recipient.", + "name": "message" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the gift card does not have a scheduled date, then `nil` is returned.\n> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the date.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The scheduled date on which the gift card will be sent to the recipient.", + "name": "send_on" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the gift card is enabled. Returns `false` if not.", + "name": "enabled" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the gift card is expired. Returns `false` if not.", + "name": "expired" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the gift card never expires, then `nil` is returned.\n> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the gift card expires.", + "name": "expires_on" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The initial balance of the gift card in the currency's subunit.", + "name": "initial_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> The page at this URL is rendered through the [`gift_card.liquid` template](/themes/architecture/templates/gift-card-liquid)\n> of the theme.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL to view the gift card. This URL is on the `checkout.shopify.com` domain.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name doesn't include the `gift_card.` prefix, or the `.liquid` file extension.\n\n If a custom template isn't assigned to the gift card, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the [custom template](/themes/architecture/templates#alternate-templates) assigned to the gift card.", + "name": "template_suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there aren't any line item properties, then an [`EmptyDrop`](/docs/api/liquid/basics#emptydrop) is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "summary": "The [line item properties](/docs/api/liquid/objects/line_item#line_item-properties) assigned to the gift card.", + "name": "properties" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A string used to generate a QR code for the gift card.", + "name": "qr_identifier" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL to download the gift card as an Apple Wallet Pass.", + "name": "pass_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "product", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The product associated with the gift card.", + "name": "product" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last 4 characters of the code used to redeem the gift card.", + "name": "last_four_characters" + } + ], + "summary": "A [gift card](https://help.shopify.com/manual/products/gift-card-products) that's been issued to a customer or a recipient.", + "name": "gift_card", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"balance\":5000,\"code\":\"WCGX 7X97 K9HJ DFR8\",\"currency\":\"CAD\",\"customer\":{},\"enabled\":true,\"expired\":false,\"expires_on\":null,\"initial_value\":5000,\"last_four_characters\":\"DFR8\",\"message\":null,\"send_on\":null,\"pass_url\":\"https://polinas-potent-potions.myshopify.com/v1/passes/pass.com.shopify.giftcardnext/94af7fbe55d010130df8d8bc4a338d36/\",\"product\":{},\"properties\":{},\"qr_identifier\":\"shopify-giftcard-v1-3TKWJKJBM3X7PBRK\",\"recipient\":null,\"template_suffix\":null,\"url\":\"https://checkout.shopify.com/gift_cards/56174706753/0011c591fc720d0a51b80cdb694f969e\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "article", + "property": "image" + }, + { + "object": "blog", + "property": "image" + }, + { + "object": "collection", + "property": "image" + }, + { + "object": "generic_file", + "property": "preview_image" + }, + { + "object": "line_item", + "property": "image" + }, + { + "object": "media", + "property": "preview_image" + }, + { + "object": "model", + "property": "preview_image" + }, + { + "object": "product", + "property": "featured_image" + }, + { + "object": "product", + "property": "media" + }, + { + "object": "product", + "property": "images" + }, + { + "object": "variant", + "property": "image" + }, + { + "object": "video", + "property": "preview_image" + }, + { + "object": "brand", + "property": "favicon_url" + }, + { + "object": "brand", + "property": "cover_image" + }, + { + "object": "brand", + "property": "logo" + }, + { + "object": "brand", + "property": "square_logo" + }, + { + "object": "collection", + "property": "featured_image" + }, + { + "object": "external_video", + "property": "preview_image" + }, + { + "object": "image", + "property": "preview_image" + }, + { + "object": "variant", + "property": "featured_image" + }, + { + "object": "user", + "property": "image" + }, + { + "object": "page_image", + "property": "" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about the image formats that Shopify supports, visit the [Shopify Help Center](https://help.shopify.com/manual/online-store/images/theme-images#image-formats).\n\n> Tip:\n> Use the [`image_url`](/docs/api/liquid/filters/image_url) and [`image_tag`](/docs/api/liquid/filters/image_tag) filters to display\n> images on the storefront.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image_presentation", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The presentation settings for the image.", + "name": "presentation" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the image.", + "name": "src" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The width of the image in pixels.", + "name": "width" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The height of the image in pixels.", + "name": "height" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The aspect ratio of the image as a decimal.", + "name": "aspect_ratio" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alt text of the image.", + "name": "alt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The `attached_to_variant?` property is only available for images accessed through the following sources:\n\n- [`product.featured_image`](/docs/api/liquid/objects/product#product-featured_image)\n- [`product.images`](/docs/api/liquid/objects/product#product-images)\n\nIf you reference this property on an image from another source, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the image is associated with a variant. Returns `false` if not.", + "name": "attached_to_variant?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If you reference the `id` property for preview images of [`generic_file`](/docs/api/liquid/objects/generic_file) or\n[`media`](/docs/api/liquid/objects/media) objects, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the image.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The `media_type` property is only available for images accessed through the following sources:\n\n- [`product.media`](/docs/api/liquid/objects/product#product-media)\n- [`file_reference` type metafields](/apps/metafields/types#supported-types)\n\nIf you reference this property on an image from another source, then `nil` is returned.", + "examples": [ + { + "name": "Filter for media of a specific type", + "description": "You can use the `media_type` property with the [`where` filter](/docs/api/liquid/filters/where) to filter the [`product.media` array](/docs/api/liquid/objects/product#product-media) for all media of a desired type.\n", + "syntax": "", + "path": "/products/snake-venom", + "raw_liquid": "{% assign images = product.media | where: 'media_type', 'image' %}\n\n{% for image in images %}\n {{- image | image_url: width: 300 | image_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The media type of the image. Always returns `image`.", + "name": "media_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The `position` property is only available for images that are associated with a product. If you reference this property\non an image from another source, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The position of the image in the [`product.images`](/docs/api/liquid/objects/product#product-images) or [`product.media`](/docs/api/liquid/objects/product#product-media)\narray.", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The `preview_image` property is only available for images accessed through the following sources:\n\n- [`product.featured_media`](/docs/api/liquid/objects/product#product-featured_media)\n- [`product.media`](/docs/api/liquid/objects/product#product-media)\n- [`file_reference` type metafields](/apps/metafields/types#supported-types)\n\nIf you reference this property on an image from another source, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A preview image for the image.", + "name": "preview_image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The `product_id` property is only available for images associated with a product. If you reference this property on\nan image from another source, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the product that the image is associated with.", + "name": "product_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The `variants` property is only available for images accessed through the following sources:\n\n- [`product.featured_image`](/docs/api/liquid/objects#product-featured_image)\n- [`product.images`](/docs/api/liquid/objects/product#product-images)\n\nIf you reference this property on an image from another source, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "variant" + } + ], + "summary": "The product variants that the image is associated with.", + "name": "variants" + } + ], + "summary": "An image, such as a product or collection image.", + "name": "image", + "examples": [ + { + "name": "Referencing the `image` object directly", + "description": "When an `image` object is referenced directly, the image's relative URL path is returned.\n", + "syntax": "", + "path": "/products/forest-mushroom", + "raw_liquid": "{{ product.featured_image }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/products/charcoal", + "handle": "product.featured_image", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "image" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "image", + "property": "presentation" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "focal_point", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The focal point for the image.", + "name": "focal_point" + } + ], + "summary": "The presentation settings for an image.", + "name": "image_presentation", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "All of the [images](/docs/api/liquid/objects/image) that have been [uploaded](https://help.shopify.com/manual/online-store/images/theme-images#upload-images)\nto a store.", + "name": "images", + "examples": [ + { + "name": "", + "description": "You can access images from the `images` array by their filename.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{{ images['potions-header.png'] | image_url: width: 300 | image_tag }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "image" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "cart", + "property": "line_items" + }, + { + "object": "checkout", + "property": "line_items" + }, + { + "object": "order", + "property": "line_items" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The ID differs depending on the context. The following table outlines the possible contexts and their associated values:\n\n| Context | Value |\n| --- | --- |\n| [`cart.items`](/docs/api/liquid/objects/cart#cart-items) | The ID of the line item's variant.<br><br>This ID isn't unique, and can be shared by multiple items with the same variant. |\n| [`checkout.line_items`](/docs/api/liquid/objects/checkout#checkout-line_items) | A temporary unique hash generated for the checkout. |\n| [`order.line_items`](/docs/api/liquid/objects/order#order-line_items) | A unique integer ID. |", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the line item.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The quantity of the line item.", + "name": "quantity" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because discounts from automatic discounts and discount codes aren't included.\n\nThe `line_item.price` property has been replaced by [`line_item.final_price`](/docs/api/liquid/objects/line_item#line_item-final_price).", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the line item in the currency's subunit. This includes any discounts from [Shopify Scripts](https://help.shopify.com/manual/checkout-settings/script-editor).", + "name": "price" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because discounts from automatic discounts and discount codes aren't included.\n\nThe `line_item.line_price` property has been replaced by [`line_item.final_line_price`](/docs/api/liquid/objects/line_item#line_item-final_line_price).", + "description": "The value is equal to `line_item.price` multiplied by `line_item.quantity`. It's output in the customer's local\n(presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The combined price, in the currency's subunit, of all of the items in a line item. This includes any discounts from [Shopify Scripts](https://help.shopify.com/manual/checkout-settings/script-editor).", + "name": "line_price" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because discounts from automatic discounts and discount codes aren't included.\n\nThe `line_item.total_discount` property has been replaced by [`line_item.line_level_total_discount`](/docs/api/liquid/objects/line_item#line_item-line_level_total_discount).", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount, in the currency's subunit, of any discounts applied to the line item by [Shopify Scripts](https://help.shopify.com/manual/checkout-settings/script-editor).", + "name": "total_discount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Caution:\n> Not applicable for item component as discounts are applied to the parent line item.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_allocation" + } + ], + "summary": "The discount allocations that apply to the line item.", + "name": "discount_allocations" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the line item in the currency's subunit. This includes any line-level discounts.", + "name": "final_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is equal to `line_item.final_price` multiplied by `line_item.quantity`. It's output in the customer's local\n(presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The combined price, in the currency's subunit, of all of the items in the line item. This includes any line-level discounts.", + "name": "final_line_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [ID](/docs/api/liquid/objects/variant#variant-id) of the line item's variant.", + "name": "variant_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [ID](/docs/api/liquid/objects/product#product-id) of the line item's product.", + "name": "product_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "product", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The product associated with the line item.", + "name": "product" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "variant", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The variant associated with the line item.", + "name": "variant" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "tax_line" + } + ], + "summary": "The tax lines for the line item.", + "name": "tax_lines" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "fulfillment", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The fulfillment of the line item.", + "name": "fulfillment" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of items from the line item that have been successfully fulfilled.", + "name": "successfully_fulfilled_quantity" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [fulfillment service](https://help.shopify.com/manual/shipping/understanding-shipping/dropshipping-and-fulfillment-services)\nfor the vartiant associated with the line item. If there's no fulfillment service, then `manual` is returned.", + "name": "fulfillment_service" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can add, or allow customers to add, custom information to a line item with line item properties.\n\nLine item properties consist of a name and value pair. They can be captured with the following methods:\n\n- [A custom input inside a product form](/themes/architecture/templates/product#line-item-properties)\n- [The AJAX Cart API](/api/ajax/reference/cart#add-line-item-properties)\n\n> Tip:\n> To learn about how to display captured properties, refer to [Display line item properties](/themes/architecture/templates/cart#display-line-item-properties).", + "examples": [ + { + "name": "Capture line item properties in the product form", + "description": "To capture line item properties inside the [product form](/docs/api/liquid/tags/form#form-product), you need to include an input, for each property. Each input needs a unique `name` attribute. Use the following format:\n\n```\nname=\"properties[property-name]\"\n```\n\nThe value of the input is captured as the value of the property.\n\nFor example, you can use the following code to capture custom engraving text for a product:\n\n```liquid\n{% form 'product', product %}\n ...\n <label for=\"engravingText\">Engraving<label>\n <input type=\"text\" id=\"engravingText\" name=\"properties[Engraving]\">\n ...\n{% endform %}\n```\n\n> Tip:\n> You can add an underscore to the beginning of a property name to hide it from customers at checkout. For example,\n> `properties[_hiddenPropertyName]`.\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "summary": "The properties of the line item.", + "name": "properties" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Unit prices are available only to stores located in Germany or France.\n\nTo learn about how to display unit prices in your theme, refer to [Unit pricing](/themes/pricing-payments/unit-pricing).", + "examples": [ + + ], + "return_type": [ + { + "type": "unit_price_measurement", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The unit price measurement of the line item.", + "name": "unit_price_measurement" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The price reflects any discounts that are applied to the line item. The value is output in the customer's local\n(presentment) currency.\n\n> Note:\n> Unit prices are available only to stores located in Germany and France.\n\nTo learn about how to display unit prices in your theme, refer to [Unit pricing](/themes/pricing-payments/unit-pricing).\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [unit price](https://help.shopify.com/manual/intro-to-shopify/initial-setup/sell-in-france/price-per-unit#add-unit-prices-to-your-product)\n of the line item in the currency's subunit.", + "name": "unit_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [sku](/docs/api/liquid/objects/variant#variant-sku) of the variant associated with the line item.", + "name": "sku" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The following table outlines what's returned depending on the number of discounts affecting the line item:\n\n| Number of discounts | Value |\n| --- | --- |\n| 0 | `nil` |\n| 1 | The [title](/docs/api/liquid/objects/discount_application#discount_application-title) of the discount. |\n| More than 1 | A Shopify generated string noting how many discounts have been applied. |", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Information about the discounts that have affected the line item.", + "name": "message" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The vendor of the variant associated with the line item.", + "name": "vendor" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "In most contexts, the line item title appears in the customer's preferred language. However, in the context of an\n[order](/docs/api/liquid/objects/order), the line item title appears in the language that the customer checked out in.\n\n#### Line item title history\n\nWhen referencing line item, product, and variant titles in the context of an order, the following changes might result\nin a different output than you expect:\n\n- A product or variant being deleted\n- A product or variant title being edited\n\nWhen `line_item.title` is referenced for an order, the line item title at the time of the order is returned.\nHowever, when `line_item.product.title` and `line_item.variant.title` are referenced, the current value for\neach title is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the line item. The title is a combination of `line_item.product.title` and `line_item.variant.title`, separated\nby a hyphen.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if taxes should be charged on the line item. Returns `false` if not.", + "name": "taxable" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the line item in the currency's subunit, before discounts have been applied.", + "name": "original_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is equal to `line_item.original_price` multiplied by `line_item.quantity`. It's output in the customer's local\n(presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The combined price of all of the items in a line item in the currency's subunit, before any discounts have been applied.", + "name": "original_line_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount of any discounts applied to the line item in the currency's subunit.", + "name": "line_level_total_discount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Caution:\n> Not applicable for item component as discounts are applied to the parent line item.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_allocation" + } + ], + "summary": "The discount allocations that apply directly to the line item.", + "name": "line_level_discount_allocations" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because not all discount types and details are available.\n\nThe `line_item.discounts` property has been replaced by [`line_item.discount_allocations`](/docs/api/liquid/objects/line_item#line_item-discount_allocations).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount" + } + ], + "summary": "The discounts applied to the line item.", + "name": "discounts" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the product associated with the line item is a gift card. Returns `false` if not.", + "name": "gift_card" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant associated with the line item requires shipping. Returns `false` if not.", + "name": "requires_shipping" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The array is never empty because variants with no options still have a default option. Because of this, you should use\n> `line_item.product.has_only_default_variant` to check whether there's any information to output.", + "examples": [ + { + "name": "Output the option values", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for item in cart.items %}\n<div class=\"cart__item\">\n <p class=\"cart__item-title\">\n {{ item.title }}\n </p>\n\n {%- unless item.product.has_only_default_variant %}\n <ul>\n {% for option in item.options_with_values -%}\n <li>{{ option.name }}: {{ option.value }}</li>\n {%- endfor %}\n </ul>\n {% endunless %}\n</div>\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "untyped" + } + ], + "summary": "The name and value pairs for each option of the variant associated with the line item.", + "name": "options_with_values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Line item keys are unique identifiers that consist of the following components separated by a colon:\n\n- The ID of the variant associated with the line item\n- A hash of the properties of the line item, even if there are no properties", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The key of the line item.", + "name": "key" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use this property with the [`weight_with_unit` filter](/docs/api/liquid/filters/weight_with_unit) to format the weight.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The weight of the line item in the store's [default weight unit](https://help.shopify.com/manual/intro-to-shopify/initial-setup/setup-business-settings#set-or-change-your-stores-default-weight-unit).", + "name": "grams" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the variant associated with the line item.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn more about how to use this property in your theme, refer to [Remove line items from the cart](/themes/architecture/templates/cart#remove-line-items-from-the-cart).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A URL to remove the line item from the cart.", + "name": "url_to_remove" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The image can come from one of the following sources:\n\n- The image of the variant associated with the line item\n- The featured image of the product associated with the line item, if there's no variant image", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The image of the line item.", + "name": "image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "#### Availability of selling plan information\n\nThe following properties aren't available when referencing selling plan information through an\n[order's line items](/docs/api/liquid/objects/order#order-line_items):\n\n- [`selling_plan_allocation.compare_at_price`](/docs/api/liquid/objects/selling_plan_allocation#selling_plan_allocation-compare_at_price)\n- [`selling_plan_allocation.price_adjustments`](/docs/api/liquid/objects/selling_plan_allocation#selling_plan_allocation-price_adjustments)\n- [`selling_plan_allocation.selling_plan.group_id`](/docs/api/liquid/objects/selling_plan#selling_plan-group_id)\n- [`selling_plan_allocation.selling_plan.options`](/docs/api/liquid/objects/selling_plan#selling_plan-options)\n- [`selling_plan_allocation.selling_plan.price_adjustments`](/docs/api/liquid/objects/selling_plan#selling_plan-price_adjustments)\n- [`selling_plan_allocation.selling_plan_group_id`](/docs/api/liquid/objects/selling_plan_allocation#selling_plan_allocation-selling_plan_group_id)\n\n> Tip:\n> If you need to show selling plan information post-purchase, then you should use [`selling_plan.name`](/docs/api/liquid/objects/selling_plan#selling_plan-name).", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan_allocation", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The selling plan allocation of the line item. If the line item doesn't have a selling plan allocation, then `nil` is returned.", + "name": "selling_plan_allocation" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This field is applicable for cart line item only.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The components of a line item.", + "name": "item_components" + } + ], + "summary": "A line in a cart, checkout, or order. Each line item represents a product variant.", + "name": "line_item", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[4].line_items[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "linklist", + "property": "links" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to implement navigation in a theme, refer to [Add navigation to your theme](/themes/navigation-search/navigation).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "A link is considered to be active if the current URL path matches, or contains, the link's [url](/docs/api/liquid/objects/link#link-url).\nFor example, if the current URL path is `/blog/potion-notions/new-potions-for-spring`, then the following link URLs\nwould be considered active:\n\n- `/blog/potion-notions/new-potions-for-spring`\n- `/blog/potion-notions`\n\n> Tip:\n> The `link.active` property is useful for menu designs that highlight when top-level navigation categories are being\n> viewed. For example, if a customer is viewing an article from the \"Potion notions\" blog, then the \"Potion notions\" link\n> is highlighted in the menu.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the link is active. Returns `false` if not.", + "name": "active" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> URL parameters are ignored when determining a match.\n>\n> Product URLs [within the context of a collection](/docs/api/liquid/filters/within) are treated as equal to a standard product\n> URL for the same product.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current URL path matches the [URL](/docs/api/liquid/objects/link#link-url) of the link. Returns `false` if not.", + "name": "current" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "A link is considered to be active if the current URL path matches, or contains, the [URL](/docs/api/liquid/objects/link#link-url) of\nthe link.\n\nFor example, if the current URL path is `/blog/potion-notions/new-potions-for-spring`, then the following link URLs\nwould be considered active:\n\n- `/blog/potion-notions/new-potions-for-spring`\n- `/blog/potion-notions`", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if a link's child link is active. Returns `false` if not.", + "name": "child_active" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> URL parameters are ignored when determining a match.\n>\n> Product URLs [within the context of a collection](/docs/api/liquid/filters/within) and standard product URLs are treated\n> the same.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if current URL path matches a link's child link [URL](/docs/api/liquid/objects/link#link-url). Returns `false` if not.", + "name": "child_current" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the link.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Check the number of links", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for link in linklists.main-menu.links -%}\n {% if link.links.size > 0 -%}\n - {{ link.title }} ({{ link.links.size }} children)<br>\n {%- else -%}\n - {{ link.title }}<br>\n {%- endif %}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "link" + } + ], + "summary": "The child links of the link.", + "name": "links" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The object can be one of the following:\n\n- [`article`](/docs/api/liquid/objects/article)\n- [`blog`](/docs/api/liquid/objects/blog)\n- [`collection`](/docs/api/liquid/objects/collection)\n- [`page`](/docs/api/liquid/objects/page)\n- [`policy`](/docs/api/liquid/objects/policy)\n- [`product`](/docs/api/liquid/objects/product)", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The object associated with the link.", + "name": "object" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the link.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "article_link", + "description": "The link points to an article.", + "array_value": "" + }, + { + "type": "string", + "name": "blog_link", + "description": "The link points to an blog.", + "array_value": "" + }, + { + "type": "string", + "name": "catalog_link", + "description": "The link points to the [catalog page](https://help.shopify.com/manual/online-store/themes/customizing-themes/change-catalog-page).", + "array_value": "" + }, + { + "type": "string", + "name": "collection_link", + "description": "The link points to a collection.", + "array_value": "" + }, + { + "type": "string", + "name": "collections_link", + "description": "The link points to the [collection list page](/themes/architecture/templates/list-collections).", + "array_value": "" + }, + { + "type": "string", + "name": "frontpage_link", + "description": "The link points to the home page.", + "array_value": "" + }, + { + "type": "string", + "name": "http_link", + "description": "The link points to an external web page, or a product type or vendor collection.", + "array_value": "" + }, + { + "type": "string", + "name": "page_link", + "description": "The link points to a [page](https://help.shopify.com/manual/online-store/themes/theme-structure/pages).", + "array_value": "" + }, + { + "type": "string", + "name": "policy_link", + "description": "The link points to a [policy page](https://help.shopify.com/manual/checkout-settings/refund-privacy-tos#add-links-to-your-policies-within-pages-or-on-social-media).", + "array_value": "" + }, + { + "type": "string", + "name": "product_link", + "description": "The link points to a product page.", + "array_value": "" + }, + { + "type": "string", + "name": "search_link", + "description": "The link points to the search page.", + "array_value": "" + } + ], + "summary": "The type of the link.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of nested levels under the link.", + "name": "levels" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL of the link.", + "name": "url" + } + ], + "summary": "A link in a [menu](https://help.shopify.com/manual/online-store/menus-and-links/drop-down-menus).", + "name": "link", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "linklists.to_a[0].links[2]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "All of the [menus](https://help.shopify.com/manual/online-store/menus-and-links/drop-down-menus) in a store.", + "name": "linklists", + "examples": [ + { + "name": "", + "description": "You can access a specific menu through the `linklists` object using the menu's [handle](/docs/api/liquid/basics#handles).\n", + "syntax": "", + "path": "/", + "raw_liquid": "<!-- Main menu -->\n{% for link in linklists.main-menu.links -%}\n {{ link.title | link_to: link.url }}\n{%- endfor %}\n\n<!-- Footer menu -->\n{% for link in linklists['footer'].links -%}\n {{ link.title | link_to: link.url }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "linklist" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "linklists", + "property": "" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to implement navigation in a theme, refer to [Add navigation to your theme](/themes/navigation-search/navigation).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "link" + } + ], + "summary": "The links in the menu.", + "name": "links" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the menu.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> There's a maximum of 3 levels.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of nested levels in the menu.", + "name": "levels" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the menu.", + "name": "title" + } + ], + "summary": "A [menu](https://help.shopify.com/manual/online-store/menus-and-links/drop-down-menus) in a store.", + "name": "linklist", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "linklists.to_a[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "forloop", + "property": "parentloop" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of iterations in the loop.", + "name": "length" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the current `for` loop isn't nested inside another `for` loop, then `nil` is returned.", + "examples": [ + { + "name": "Use the `parentloop` property", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for i in (1..3) -%}\n {% for j in (1..3) -%}\n {{ forloop.parentloop.index }} - {{ forloop.index }}\n {%- endfor %}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "forloop", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The parent `forloop` object.", + "name": "parentloop" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the current iteration.", + "name": "index" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 0-based index of the current iteration.", + "name": "index0" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the current iteration, in reverse order.", + "name": "rindex" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 0-based index of the current iteration, in reverse order.", + "name": "rindex0" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current iteration is the first. Returns `false` if not.", + "name": "first" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current iteration is the last. Returns `false` if not.", + "name": "last" + } + ], + "summary": "Information about a parent [`for` loop](/docs/api/liquid/tags/for).", + "name": "forloop", + "examples": [ + { + "name": "Use the `forloop` object", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for page in pages -%}\n {%- if forloop.length > 0 -%}\n {{ page.title }}{% unless forloop.last %}, {% endunless -%}\n {%- endif -%}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"first\":true,\"index\":1,\"index0\":0,\"last\":false,\"length\":4,\"rindex\":3}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of iterations in the loop.", + "name": "length" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the current column.", + "name": "col" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of current row.", + "name": "row" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the current iteration.", + "name": "index" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 0-based index of the current iteration.", + "name": "index0" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 0-based index of the current column.", + "name": "col0" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the current iteration, in reverse order.", + "name": "rindex" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 0-based index of the current iteration, in reverse order.", + "name": "rindex0" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current iteration is the first. Returns `false` if not.", + "name": "first" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current iteration is the last. Returns `false` if not.", + "name": "last" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current column is the first in the row. Returns `false` if not.", + "name": "col_first" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the current column is the last in the row. Returns `false` if not.", + "name": "col_last" + } + ], + "summary": "Information about a parent [`tablerow` loop](/docs/api/liquid/tags/tablerow).", + "name": "tablerowloop", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"col\":1,\"col0\":0,\"col_first\":true,\"col_last\":false,\"first\":true,\"index\":1,\"index0\":0,\"last\":false,\"length\":5,\"rindex\":5,\"rindex0\":4,\"row\":1}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `localization` object can be used in a [localization form](/docs/api/liquid/tags/form#form-localization).\n\nTo learn about how to offer localization options in your theme, refer to [Support multiple currencies and languages](/themes/internationalization/multiple-currencies-languages).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "country" + } + ], + "summary": "The countries that are available on the store.", + "name": "available_countries" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "shop_locale" + } + ], + "summary": "The languages that are available on the store.", + "name": "available_languages" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "market", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected market on the storefront.", + "name": "market" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "country", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected country on the storefront.", + "name": "country" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "shop_locale", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected language on the storefront.", + "name": "language" + } + ], + "summary": "Information about the countries and languages that are available on a store.", + "name": "localization", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "localization", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "store_availability", + "property": "location" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> The `location` object is defined only if one or more locations has [local pickup](https://help.shopify.com/manual/shipping/setting-up-and-managing-your-shipping/local-methods/local-pickup)\n> enabled.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The location's ID.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The location's name.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The location's address.", + "name": "address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the location's address isn't verified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The latitude of the location's address.", + "name": "latitude" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the location's address isn't verified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The longitude of the location's address.", + "name": "longitude" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the location.", + "name": "metafields" + } + ], + "summary": "A store [location](https://help.shopify.com/manual/locations).", + "name": "location", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?variant=39897499729985", + "handle": "product.selected_variant.store_availabilities[0].location", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "localization", + "property": "market" + }, + { + "object": "country", + "property": "market" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn more about markets, refer to [Shopify Markets](/docs/apps/markets).\nTo make sure that visitors interact with the optimal version of a store using Shopify Markets,\nrefer to [Detect and set a visitor's optimal localization](/docs/themes/markets/localization-discovery).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the market.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the market.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage\n> metafields](/apps/metafields/manage) or visit the [Shopify Help\n> Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "metafield" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the market.", + "name": "metafields" + } + ], + "summary": "A group of one or more regions of the world that a merchant is targeting for sales.", + "name": "market", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "localization.market", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "metafield", + "property": "value" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about metafield types, refer to [Metafield types](/apps/metafields/types).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "dimension", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "volume", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "weight", + "description": "", + "array_value": "" + } + ], + "summary": "The measurement type.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The measurement value.", + "name": "value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The measurement unit.", + "name": "unit" + } + ], + "summary": "A measurement from one of the following metafield types:\n\n- `dimension`\n- `volume`\n- `weight`", + "name": "measurement", + "examples": [ + + ], + "json_data": { + "path": "/products/dandelion-milk", + "handle": "product.metafields.details.milk_container_volume.value", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "app", + "property": "metafields" + }, + { + "object": "article", + "property": "metafields" + }, + { + "object": "blog", + "property": "metafields" + }, + { + "object": "collection", + "property": "metafields" + }, + { + "object": "customer", + "property": "metafields" + }, + { + "object": "location", + "property": "metafields" + }, + { + "object": "order", + "property": "metafields" + }, + { + "object": "page", + "property": "metafields" + }, + { + "object": "product", + "property": "metafields" + }, + { + "object": "shop", + "property": "metafields" + }, + { + "object": "variant", + "property": "metafields" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to access a metafield on a specific object, refer to [Access metafields](/docs/api/liquid/objects/metafield#metafield-access-metafields).\n\nMetafields support [multiple data types](/apps/metafields/types), which determine the kind of information that's stored\nin the metafield. You can also output the metafield content in a type-specific format using\n[metafield filters](/docs/api/liquid/filters/metafield-filters).\n\n> Note:\n> You can't create metafields in Liquid. Metafields can be created in only the following ways:\n>\n> - [In the Shopify admin](https://help.shopify.com/manual/metafields)\n> - [Through an app](https://shopify.dev/apps/metafields)\n\n> Note:\n> Metafields of type `integer`, `json_string`, and `string` are older implementations that don't have the properties\n noted on this page, and aren't compatible with metafield filters. To learn more, refer to [Deprecated metafields](/docs/api/liquid/objects/metafield#metafield-deprecated-metafields).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The following table outlines the value format for each metafield type:\n\n<table>\n <thead>\n <tr>\n <th>Type</th>\n <th>Returned format</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td>\n <code>single_line_text_field</code><br><br>\n <code>multi_line_text_field</code>\n </td>\n <td><a href=\"/docs/api/liquid/basics#string\">A string</a></td>\n </tr>\n <tr>\n <td>\n <code>rich_text_field</code>\n </td>\n <td>A field that supports headings, lists, links, bold, and italics</td>\n </tr>\n <tr>\n <td>\n <code>product_reference</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/product\">A product object</a></td>\n </tr>\n <tr>\n <td>\n <code>collection_reference</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/collection\">A collection object</a></td>\n </tr>\n <tr>\n <td>\n <code>variant_reference</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/variant\">A variant object</a></td>\n </tr>\n <tr>\n <td>\n <code>page_reference</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/page\">A page object</a></td>\n </tr>\n <tr>\n <td>\n <code>file_reference</code>\n </td>\n <td>\n <a href=\"/docs/api/liquid/objects/generic-file\">A generic_file object</a><br><br>\n <a href=\"/docs/api/liquid/objects/media\">A media object (images and videos only)</a>\n </td>\n </tr>\n <tr>\n <td>\n <code>number_integer</code><br><br>\n <code>number_decimal</code>\n </td>\n <td><a href=\"/docs/api/liquid/basics#number\">A number</a></td>\n </tr>\n <tr>\n <td>\n <code>date</code><br><br>\n <code>date_time</code>\n </td>\n <td>A date string. To format the string, use the <a href=\"/docs/api/liquid/filters/date\">date</a> filter.</td>\n </tr>\n <tr>\n <td>\n <code>url_reference</code>\n </td>\n <td><a href=\"/docs/api/liquid/basics#string\">A url string</a></td>\n </tr>\n <tr>\n <td>\n <code>json</code>\n </td>\n <td><a href=\"https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON\">A JSON object</a></td>\n </tr>\n <tr>\n <td>\n <code>boolean</code>\n </td>\n <td><a href=\"/docs/api/liquid/basics#boolean\">A boolean</a></td>\n <tr>\n <td>\n <code>color</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/color\">A color object</a></td>\n </tr>\n <tr>\n <td>\n <code>weight</code><br><br>\n <code>volume</code><br><br>\n <code>dimension</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/measurement\">A measurement object</a></td>\n </tr>\n <tr>\n <td>\n <code>rating</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/rating\">A rating object</a></td>\n </tr>\n <tr>\n <td>\n <code>list</code>\n </td>\n <td><a href=\"/docs/api/liquid/basics#array\">An array of objects, numbers, or strings, depending on the list type</a></td>\n </tr>\n <tr>\n <td>\n <code>money</code>\n </td>\n <td><a href=\"/docs/api/liquid/objects/money\">A money object, displayed in the customer's local (presentment) currency.</a></td>\n </tr>\n </tbody>\n</table>", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the metafield.", + "name": "value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "single_line_text_field", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "multi_line_text_field", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "rich_text_field", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "product_reference", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "collection_reference", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "variant_reference", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "page_reference", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "file_reference", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "number_integer", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "number_decimal", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "date", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "date_time", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "url_reference", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "json", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "boolean", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "color", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "weight", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "volume", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "dimension", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "rating", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "list", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "money", + "description": "", + "array_value": "" + } + ], + "summary": "The [type](/apps/metafields/types) of the metafield.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about metafield types, refer to [Metafield types](/apps/metafields/types).", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the metafield is a list type. Returns `false` if not.", + "name": "list?" + } + ], + "summary": "A [metafield](/apps/metafields) attached to a parent object.", + "name": "metafield", + "examples": [ + { + "name": "Access metafields", + "description": "The access path for metafields consists of two layers:\n\n- namespace - A grouping of metafields to prevent conflicts.\n- key - The metafield name.\n\nGiven this, you can access the metafield object with the following syntax:\n\n```liquid\n{{ resource.metafields.namespace.key }}\n```\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "Type: {{ product.metafields.information.directions.type }}\nValue: {{ product.metafields.information.directions.value }}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Accessing metafields of type `json`", + "description": "The `value` property of metafields of type `json` returns a [JSON object](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON). You can access the properties of this object directly in Liquid, either by name or 0-based index. You can also iterate through the properties.\n", + "syntax": "", + "path": "/products/charcoal", + "raw_liquid": "Temperature: {{ product.metafields.information.burn_temperature.value.temperature }}\nUnit: {{ product.metafields.information.burn_temperature.value['unit'] }}\n\n{% for property in product.metafields.information.burn_temperature.value -%}\n {{ property.first | capitalize }}: {{ property.last }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Accessing metafields of type `list`", + "description": "The `value` property of metafields of type `list` returns an array. You can iterate through the array to access the values.\n", + "syntax": "", + "path": "/products/ground-mandrake-root", + "raw_liquid": "{% for item in product.metafields.information.combine_with.value -%}\n {{ item.product.title }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "", + "description": "<br><br> If the list is of type `single_line_text_field`, then you can access the items in the array directly in Liquid by using a 0-based index.\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "First item in list: {{ product.metafields.information.pickup_locations.value[0] }}\nLast item in list: {{ product.metafields.information.pickup_locations.value.last }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Deprecated metafields", + "description": "Deprecated metafields are older metafield types with limited functionality. The following metafield types are deprecated:\n\n- `integer`\n- `json_string`\n- `string`\n\nThese metafield types don't have the same metafield object properties mentioned in the previous sections. Instead, they return the metafield value directly.\n\nThe following table outlines the value type for each deprecated metafield type:\n\n| Metafield type | Value type |\n| --- | --- |\n| `integer` | [An integer](/docs/api/liquid/basics#number) |\n| `json_string` | [A JSON object](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/JSON) |\n| `string` | [A string](/docs/api/liquid/basics#string) |\n", + "syntax": "", + "path": "/", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.metafields.information.directions", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "One or more corresponding [`metaobject`](/docs/api/liquid/objects#metaobject) objects contain values for\nthe fields specified in the metaobject definition.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "metaobject" + } + ], + "summary": "The [metaobjects](/docs/api/liquid/objects#metaobject) that follow the definition.", + "name": "values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of entries for the metaobject definition.", + "name": "values_count" + } + ], + "summary": "A `metaobject_definition` defines the structure of a metaobject type for the store, which consists of\na merchant-defined set of [field definitions](https://help.shopify.com/en/manual/metafields/metafield-definitions).", + "name": "metaobject_definition", + "examples": [ + { + "name": "Loop over entries of a metaobject definition", + "description": "If a metaobject definition has multiple metaobject entries, then you can loop over them using the `values` property.\nYou can loop over a maximum of 50 entries in a metaobject definition.\nFor example, you can display the field `author` for each metaobject using the following `forloop`:\n\n```liquid\n{% for testimonial in shop.metaobjects.testimonials.values %}\n {{ testimonial.author.value }}\n{% endfor %}\n```\n\n> Note:\n> When the [`publishable` capability](/apps/data-extensions/metaobjects/capabilities) is enabled, loops return only metaobjects with a status of `active`. Metaobjects with a status of `draft` are skipped.\n", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "shop", + "property": "metaobjects" + } + ], + "template": [ + "metaobject" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "metaobject_system", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Basic information about the metaobject. These properties are grouped under the `system` object to avoid collisions between system property names and user-defined metaobject fields.", + "name": "system" + } + ], + "summary": "A metaobject entry, which includes the values for a set of [fields](/docs/api/liquid/objects#metafield).\nThe set is defined by the parent [`metaobject_definition`](/docs/api/liquid/objects#metaobject_definition).", + "name": "metaobject", + "examples": [ + { + "name": "Access metaobjects individually", + "description": "The access path for a metaobject consists of two layers:\n\n- type - The type of the parent metaobject definition.\n- handle - The unique [handle](/docs/api/liquid/basics#handles) of the metaobject.\n\nGiven this, you can access a metaobject with the following syntax:\n\n```liquid\n{{ shop.metaobjects.type.handle }}\n```\n\nYou can also use square bracket notation:\n\n```liquid\n{{ shop.metaobjects['type']['handle'] }}\n```\n\nA metaobjects's field values can be accessed using the key of the desired field:\n\n```liquid\n{{ shop.metaobjects.testimonials.homepage.title }}\n{{ shop.metaobjects['highlights']['washable'].image.value }}\n```\n\n> Note:\n> When the [`publishable` capability](/apps/data-extensions/metaobjects/capabilities) is enabled, a metaobject can only be accessed if its status is `active`. If its status is `draft`, then the return value is `nil`.\n", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "Usage in metaobject templates", + "description": "Within a metaobject template, the `metaobject` Liquid object represents the metaobject drop being rendered by the template. You can access it directly as `{{ metaobject }}`.\n\nHere's a basic example of accessing a field within the associated metaobject template:\n```liquid\n{{ metaobject.title.value }}\n```\n\nIn this example, replace `title` with the key of the field you want to access. This will output the value of that field for the current metaobject.\n", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "metaobject", + "property": "system" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "This is a free-form string that's defined when the metaobject definition is created.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The type of the metaobject definition.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The unique [handle](/api/liquid/basics#handles) of the metaobject.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the metaobject.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Only set for metaobjects that have the `online_store` capability.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the metaobject.", + "name": "url" + } + ], + "summary": "Basic information about a [`metaobject`](/api/liquid/objects#metaobject). These properties are grouped under the `system` object to avoid collisions between system property names and user-defined metaobject fields.", + "name": "metaobject_system", + "examples": [ + { + "name": "Using the `metaobject_system` object", + "description": "You can access the `metaobject_system` object and its properties through the metaobject's `system` property. You can use the following syntax:\n\n```liquid\n{{ shop.metaobjects.testimonials[\"home_page\"].system.id }}\n```\n\nYou can also access `metaobject_system` properties when iterating over a list of metaobjects:\n\n```liquid\n{% for metaobject in product.metafields.custom.mixed_metaobject_list.value %}\n {% if metaobject.system.type == \"testimonial\" %}\n {% render 'testimonial' with metaobject as testimonial %}\n {% else %}\n {{ metaobject.system.handle }}\n {% endif %}\n{% endfor %}\n```\n", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "product", + "property": "media" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`model_viewer_tag` filter](/docs/api/liquid/filters/model_viewer_tag) to output a [Google model viewer component](https://modelviewer.dev)\n> for the model.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "model_source" + } + ], + "summary": "The source files for the model.", + "name": "sources" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alt text of the model.", + "name": "alt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the model.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Filter for media of a specific type", + "description": "You can use the `media_type` property with the [`where` filter](/docs/api/liquid/filters/where) to filter the [`product.media` array](/docs/api/liquid/objects/product#product-media) for all media of a desired type.\n", + "syntax": "", + "path": "/products/potion-bottle", + "raw_liquid": "{% assign models = product.media | where: 'media_type', 'model' %}\n\n{% for model in models %}\n {{- model | model_viewer_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The media type of the model. Always returns `model`.", + "name": "media_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The position of the model in the [`product.media`](/docs/api/liquid/objects/product#product-media) array.", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A preview image for the model.", + "name": "preview_image" + } + ], + "summary": "A 3D model uploaded as product media.", + "name": "model", + "examples": [ + + ], + "json_data": { + "path": "/products/potion-bottle", + "handle": "product.featured_media", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "model", + "property": "" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The format of the model source file.", + "name": "format" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the model source file.", + "name": "mime_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) of the model source file.", + "name": "url" + } + ], + "summary": "A model source file.", + "name": "model_source", + "examples": [ + + ], + "json_data": { + "path": "/products/potion-bottle", + "handle": "product.featured_media.sources[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "metafield", + "property": "value" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "currency", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer's local (presentment) currency.", + "name": "currency" + } + ], + "summary": "A money value, in the the customer's local (presentment) currency.", + "name": "money", + "examples": [ + { + "name": "Referencing money objects directly", + "description": "When a money object is referenced directly, the money value in cents is returned.\n", + "syntax": "", + "path": "/products/dried-chamomile", + "raw_liquid": "{{ product.metafields.details.price_per_100g.value }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "/products/dried-chamomile", + "handle": "product.metafields.details.price_per_100g.value", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "checkout", + "property": "order" + }, + { + "object": "customer", + "property": "last_order" + }, + { + "object": "customer", + "property": "orders" + } + ], + "template": [ + "customers/order" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": true, + "deprecation_reason": "Deprecated because not all discount types and details are captured.\n\nThe `order.discounts` property has been replaced by [`order.discount_applications`](/docs/api/liquid/objects/order#order-discount_applications).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "discount", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The discounts on the order.", + "name": "discounts" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there are no attributes on the order, then `nil` is returned.\n> Tip:\n> Attributes are [collected with the cart](https://shopify.dev/themes/architecture/templates/cart#support-cart-notes-and-attributes).", + "examples": [ + { + "name": "Output the attributes", + "description": "```liquid\n<ul>\n {% for attribute in order.attributes -%}\n <li><strong>{{ attribute.first }}:</strong> {{ attribute.last }}</li>\n {%- endfor %}\n</ul>\n```\n", + "syntax": "", + "path": "/", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The attributes on the order.", + "name": "attributes" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "customer", + "description": "Customer changed/cancelled order", + "array_value": "" + }, + { + "type": "string", + "name": "declined", + "description": "Payment declined", + "array_value": "" + }, + { + "type": "string", + "name": "fraud", + "description": "Fraudulent order", + "array_value": "" + }, + { + "type": "string", + "name": "inventory", + "description": "Items unavailable", + "array_value": "" + }, + { + "type": "string", + "name": "staff", + "description": "Staff error", + "array_value": "" + }, + { + "type": "string", + "name": "other", + "description": "Other", + "array_value": "" + } + ], + "summary": "The reason that the order was cancelled.", + "name": "cancel_reason" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use this property to output the cancellation reason on the storefront.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The localized version of the [cancellation reason](/docs/api/liquid/objects/order#order-cancel_reason) for the order.", + "name": "cancel_reason_label" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the order was cancelled. Returns `false` if not.", + "name": "cancelled" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the order was cancelled.", + "name": "cancelled_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The discount applications that apply at the order level.", + "name": "cart_level_discount_applications" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the order was created.", + "name": "created_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there are no duties, then `nil` is returned. The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The sum of all duties applied to the line items in the order in the currency's subunit.", + "name": "total_duties" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the customer to view the order in their account.", + "name": "customer_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "customer", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer that placed the order.", + "name": "customer" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "All of the discount applications for the order and its line items.", + "name": "discount_applications" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount of all discounts applied to the order in the currency's subunit.", + "name": "total_discounts" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The amount is calculated after refunds are applied, so is equal to `order.total_price` minus `order.total_refunded_amount`.\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The net amount of the order in the currency's subunit.", + "name": "total_net_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount of taxes applied to the order in the currency's subunit.", + "name": "tax_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total amount that's been refunded from the order in the currency's subunit.", + "name": "total_refunded_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no email is associated with the order, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email that's associated with the order.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "authorized", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "expired", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "paid", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "partially_paid", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "partially_refunded", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "pending", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "refunded", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "unpaid", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "voided", + "description": "", + "array_value": "" + } + ], + "summary": "The order's financial status.", + "name": "financial_status" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use this property to output the financial status on the storefront.", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "The localized version of the [financial status](/docs/api/liquid/objects/order#order-financial_status) of the order.", + "name": "financial_status_label" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The fulfillment status of the order.", + "name": "fulfillment_status" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use this property to output the fulfillment status on the storefront.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "complete", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "fulfilled", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "partial", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "restocked", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "unfulfilled", + "description": "", + "array_value": "" + } + ], + "summary": "The localized version of the [fulfillment status](/docs/api/liquid/objects/order#order-fulfillment_status) of the order.", + "name": "fulfillment_status_label" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the order.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the order.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the order.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no note on the order, then `nil` is returned.\n> Tip:\n> Notes are [collected with the cart](https://shopify.dev/themes/architecture/templates/cart#support-cart-notes-and-attributes).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The note on the order.", + "name": "note" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A randomly generated alpha-numeric identifier for the order that may be shown to the customer\ninstead of the sequential order name. For example, \"XPAV284CT\", \"R50KELTJP\" or \"35PKUN0UJ\".\nThis value isn't guaranteed to be unique.", + "name": "confirmation_number" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The integer representation of the order [name](/docs/api/liquid/objects/order#order-name).", + "name": "order_number" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the [order status page](https://help.shopify.com/manual/orders/status-tracking) for the order.", + "name": "order_status_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The new customer accounts includes a list of Buyers Orders and an Order Details View.\nThis liquid function exposes a URL to a specific Orders Details in new customer accounts.\n[Setup process for the new order details page](https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts)\ncan be found in the help center.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the new order details page.", + "name": "customer_order_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The phone number associated with the order.", + "name": "phone" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The shipping address of the order.", + "name": "shipping_address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The billing address of the order.", + "name": "billing_address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The tags are returned in alphabetical order.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The [tags](https://help.shopify.com/manual/shopify-admin/productivity-tools/using-tags) on the order.", + "name": "tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "tax_line" + } + ], + "summary": "The tax lines on the order.", + "name": "tax_lines" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "transaction" + } + ], + "summary": "The transactions of the order.", + "name": "transactions" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The line items in the order.", + "name": "line_items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> These line items are used to calculate the the [subtotal price](/docs/api/liquid/objects/order#order-subtotal_price).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The non-tip line items in the order.", + "name": "subtotal_line_items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of items in the order.", + "name": "item_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "shipping_method" + } + ], + "summary": "The shipping methods for the order.", + "name": "shipping_methods" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The sum of the prices of all of the line items in the order in the currency's subunit, after any line item discounts have\nbeen applied.", + "name": "line_items_subtotal_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The sum of the prices of the [subtotal line items](/docs/api/liquid/objects/order#order-subtotal_line_items) in the currency's subunit, after any line item or\ncart discounts have been applied.", + "name": "subtotal_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The total price is calculated before refunds are applied. Use [`order.total_net_amount`](/docs/api/liquid/objects/order#order-total_net_amount)\n> to output the total minus any refunds.\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total price of the order in the currency's subunit.", + "name": "total_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The shipping price of the order in the currency's subunit.", + "name": "shipping_price" + } + ], + "summary": "An [order](https://help.shopify.com/manual/orders).", + "name": "order", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[4]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "pages", + "property": "" + }, + { + "object": "metafield", + "property": "value" + } + ], + "template": [ + "page" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the page.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The author of the page.", + "name": "author" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the page.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the page.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name doesn't include the `page.` prefix, or the file extension (`.json` or `.liquid`).\n\n If a custom template isn't assigned to the page, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the [custom template](/themes/architecture/templates#alternate-templates) assigned to the page.", + "name": "template_suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The content of the page.", + "name": "content" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the page.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the page.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the page was published.", + "name": "published_at" + } + ], + "summary": "A [page](https://help.shopify.com/manual/online-store/themes/theme-structure/pages) on a store.", + "name": "page", + "examples": [ + + ], + "json_data": { + "path": "/pages/about-us", + "handle": "page", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`default_pagination` filter](/docs/api/liquid/filters/default_pagination) to output pagination links.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of items displayed per page.", + "name": "page_size" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "For example, if you show 5 items per page and are on page 3, then the value of `paginate.current_offset` is 10.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of items on pages previous to the current page.", + "name": "current_offset" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The page number of the current page.", + "name": "current_page" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "For example, if you paginate a collection of 120 products, then the value of `paginate.items` is 120.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of items to be paginated.", + "name": "items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Pagination parts are used to build pagination navigation.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "part" + } + ], + "summary": "The pagination parts.", + "name": "parts" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "part", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The pagination part to go to the next page.", + "name": "next" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "part", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The pagination part to go to the previous page.", + "name": "previous" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total number of pages.", + "name": "pages" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The default value is `page`.\n\nIf you paginate over an array defined in a setting or a metafield list type, then a unique key is appended to page to allow the paginated list to\noperate independently from other lists on the page. For example, a paginated list defined in a setting might use the key\n`page_a9e329dc`.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL parameter denoting the pagination.", + "name": "page_param" + } + ], + "summary": "Information about the pagination inside a set of [`paginate` tags](/docs/api/liquid/tags/paginate).", + "name": "paginate", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"current_offset\":10,\"current_page\":3,\"items\":17,\"next\":{},\"page_param\":\"page\",\"page_size\":5,\"pages\":4,\"parts\":[],\"previous\":{}}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The `predictive_search` object returns results only when rendered in a section using the Predictive Saerch API and the\n[Section Rendering API](/api/section-rendering). To learn about how to include predictive search in your theme,\n> refer to [Add predictive search to your theme](/themes/navigation-search/search/predictive-search).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` when being referenced inside a section that's been rendered using the Predictive Search API and\nthe Section Rendering API. Returns `false` if not.", + "name": "performed" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can check whether any resources of a specific type were returned using the [`size` filter](/docs/api/liquid/filters/size).\n\n```liquid\n{% if predictive_search.resources.articles.size > 0 %}\n {% for article in predictive_search.resources.articles %}\n {{ article.title }}\n {% endfor %}\n{% endif %}\n```", + "examples": [ + + ], + "return_type": [ + { + "type": "predictive_search_resources", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The resources associated with the query.", + "name": "resources" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`highlight` filter](/docs/api/liquid/filters/highlight) to highlight the search terms in search results content.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The entered search terms.", + "name": "terms" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Searches can be performed on the following object types:\n\n- [`article`](/docs/api/liquid/objects/article)\n- [`collection`](/docs/api/liquid/objects/collection)\n- [`page`](/docs/api/liquid/objects/page)\n- [`product`](/docs/api/liquid/objects/product)\n\n> Note:\n> The types are determined by the [`type` query parameter](/api/ajax/reference/predictive-search#query-parameters).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The object types that the search was performed on.", + "name": "types" + } + ], + "summary": "Information about the results from a predictive search query through the\n[Predictive Search API](/api/ajax/reference/predictive-search#get-locale-search-suggest).", + "name": "predictive_search", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"performed\":true,\"resources\":{},\"terms\":\"potion\",\"types\":[]}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "selling_plan_allocation", + "property": "price_adjustments" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of orders that the price adjustment applies to.", + "name": "order_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the price adjustment in the [`selling_plan.price_adjustments` array](/docs/api/liquid/objects/selling_plan#selling_plan-price_adjustments).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "percentage", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "fixed_amount", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "price", + "description": "", + "array_value": "" + } + ], + "summary": "The type of price adjustment.", + "name": "value_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "How this value is interpreted depends on the [value type](/docs/api/liquid/objects/selling_plan_price_adjustment#selling_plan_price_adjustment-value_type) of\nthe price adjustment. The following table outlines what the value represents for each value type:\n\n| Value type | Value |\n| --- | --- |\n| `fixed_amount` | The amount that the original price is being adjusted by, in the currency's subunit. |\n| `percentage` | The percent amount that the original price is being adjusted by. |\n| `price` | The adjusted amount in the currency's subunit. |\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the price adjustment as a decimal.", + "name": "value" + } + ], + "summary": "Information about how a selling plan changes the price of a variant for a given period of time.", + "name": "selling_plan_price_adjustment", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?selling_plan=610435137", + "handle": "product.selected_selling_plan.price_adjustments[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "all_products", + "property": "" + }, + { + "object": "collection", + "property": "products" + }, + { + "object": "line_item", + "property": "product" + }, + { + "object": "link", + "property": "object" + }, + { + "object": "metafield", + "property": "value" + }, + { + "object": "recommendations", + "property": "products" + }, + { + "object": "search", + "property": "results" + }, + { + "object": "variant", + "property": "product" + } + ], + "template": [ + "product" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "variant" + } + ], + "summary": "The variants of the product.", + "name": "variants" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "image" + } + ], + "summary": "The images attached to the product.", + "name": "images" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the product.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "product_option" + } + ], + "summary": "The options on the product.", + "name": "options_with_values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the product.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the product.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the product.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name doesn't include the `product.` prefix, or the file extension (`.json` or `.liquid`).\n\nIf a custom template isn't assigned to the product, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the [custom template](/themes/architecture/templates#alternate-templates) of the product.", + "name": "template_suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The vendor of the product.", + "name": "vendor" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`product.content`](/docs/api/liquid/objects/product#product-content).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The description of the product.", + "name": "description" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`product.description`](/docs/api/liquid/objects/product#product-description).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The description of the product.", + "name": "content" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first (featured) image attached to the product.", + "name": "featured_image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> You can use [media filters](/docs/api/liquid/filters/media-filters) to output media URLs and displays. To learn about how\n> to include media in your theme, refer to [Support product media](/themes/product-merchandising/media/support-media).", + "examples": [ + + ], + "return_type": [ + { + "type": "media", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first (featured) media attached to the product.", + "name": "featured_media" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> You can use [media filters](/docs/api/liquid/filters/media-filters) to output media URLs and displays. To learn about how\n> to include media in your theme, refer to [Support product media](/themes/product-merchandising/media/support-media).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "media" + } + ], + "summary": "The media attached to the product, sorted by the date it was added to the product.", + "name": "media" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`product.price`](/docs/api/liquid/objects/product#product-price).\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The lowest price of any variants of the product in the currency's subunit.", + "name": "price_min" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`product.price_min`](/docs/api/liquid/objects/product#product-price_min).\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The lowest price of any variants of the product in the currency's subunit.", + "name": "price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The highest price of any variants of the product in the currency's subunit.", + "name": "price_max" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the product's variant prices vary. Returns `false` if not.", + "name": "price_varies" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The selected variant is determined by the `variant` URL parameter. The `selected_variant` parameter is available on product pages only.\n\nFor a variant to be available, it needs to meet one of the following criteria:\n\n- The `variant.inventory_quantity` is greater than 0.\n- The `variant.inventory_policy` is set to `continue`.\n- The `variant.inventory_management` is `nil`.", + "examples": [ + + ], + "return_type": [ + { + "type": "variant", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected or first available variant of the product.", + "name": "selected_or_first_available_variant" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Collections that aren't [available](https://help.shopify.com/manual/products/collections/make-collections-available) on\n> the Online Store sales channel aren't included.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "collection" + } + ], + "summary": "The collections that the product belongs to.", + "name": "collections" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no variant is currently selected, then `nil` is returned.\n\n> Note:\n> The selected variant is determined by the `variant` URL parameter. This URL parameter is available on product pages URLs only.", + "examples": [ + + ], + "return_type": [ + { + "type": "variant", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected variant of the product.", + "name": "selected_variant" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "For a variant to be available, it needs to meet one of the following criteria:\n\n- The `variant.inventory_quantity` is greater than 0.\n- The `variant.inventory_policy` is set to `continue`.\n- The `variant.inventory_management` is `nil`.", + "examples": [ + + ], + "return_type": [ + { + "type": "variant", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first available variant of the product.", + "name": "first_available_variant" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "For a variant to be available, it needs to meet one of the following criteria:\n\n- The `variant.inventory_quantity` is greater than 0.\n- The `variant.inventory_policy` is set to `continue`.\n- The `variant.inventory_management` is `nil`.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if at least one of the variants of the product is available. Returns `false` if not.", + "name": "available" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the options", + "description": "You can use the [`size` filter](/docs/api/liquid/filters/size) with dot notation to determine how many options a product has.\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% if product.options.size > 0 -%}\n {% for option in product.options -%}\n - {{ option }}\n {%- endfor %}\n{%- endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The option names of the product.", + "name": "options" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The type of the product.", + "name": "type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The lowest **compare at** price of any variants of the product in the currency's subunit. This is the same as\n`product.compare_at_price`.", + "name": "compare_at_price_min" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The highest **compare at** price of any variants of the product in the currency's subunit.", + "name": "compare_at_price_max" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The lowest **compare at** price of any variants of the product in the currency's subunit.", + "name": "compare_at_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant **compare at** prices of the product vary. Returns `false` if not.", + "name": "compare_at_price_varies" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the product.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The tags are returned in alphabetical order.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The [tags](https://help.shopify.com/manual/shopify-admin/productivity-tools/using-tags) of the product.", + "name": "tags" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the product was published.", + "name": "published_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the product was created.", + "name": "created_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the values for a specific option", + "description": "When accessing a specific option, the name is case-insensitive.", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "<label>\n Strength\n <select>\n {%- for value in product.options_by_name['strength'].values %}\n <option>{{ value }}</option>\n {%- endfor %}\n </select>\n</label>", + "parameter": false, + "display_type": "text", + "show_data_tab": false + } + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Allows you to access a specific [product option](/docs/api/liquid/objects/product_option) by its name.", + "name": "options_by_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the product doesn't have any options. Returns `false` if not.", + "name": "has_only_default_variant" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the product has at least one variant with quantity price breaks in the current customer context.\nReturns `false` if not.", + "name": "quantity_price_breaks_configured?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> A variant requires a selling plan if [`variant.requires_selling_plan`](/docs/api/liquid/objects/variant#variant-requires_selling_plan)\n> is `true`.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if all of the variants of the product require a selling plan. Returns `false` if not.", + "name": "requires_selling_plan" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan_group" + } + ], + "summary": "The selling plan groups that the variants of the product are included in.", + "name": "selling_plan_groups" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no selling plan is selected, then `nil` is returned.\n\n> Note:\n> The selected selling plan is determined by the `selling_plan` URL parameter.", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected selling plan.", + "name": "selected_selling_plan" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no variant and selling plan are selected, then `nil` is returned.\n\n> Note:\n> The selected variant is determined by the `variant` URL parameter, and the selected selling plan is determined by the\n> `selling_plan` URL parameter.", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan_allocation", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected selling plan allocation for the currently selected variant.", + "name": "selected_selling_plan_allocation" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The following logic is used to determine which selling plan allocation is returned:\n\n| Selling plan allocation | Return criteria |\n| --- | --- |\n| The currently selected allocation | Returned if a variant and selling plan are selected.<br><br>The selected variant is determined by the `variant` URL parameter, and the selected selling plan is determined by the `selling_plan` URL parameter. |\n| The first allocation on the first available variant | Returned if no allocation is currently selected. |\n| The first allocation on the first variant | Returned if no allocation is currently selected, and there are no available variants. |\n\nIf the product doesn't have any selling plans, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan_allocation", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected, or first available, selling plan allocation.", + "name": "selected_or_first_available_selling_plan_allocation" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the product is a gift card. Returns `false` if not.", + "name": "gift_card?" + } + ], + "summary": "A [product](https://help.shopify.com/manual/products) in the store.", + "name": "product", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "product", + "property": "options_with_values" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the product option.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the product option in the [`product.options_with_values` array](/docs/api/liquid/objects/product#product-options_with_values).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The possible values for the product option.", + "name": "values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no value is currently selected, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently selected product option value.", + "name": "selected_value" + } + ], + "summary": "A product option, such as size or color.", + "name": "product_option", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.options_with_values[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "variant" + }, + { + "object": "product", + "property": "first_available_variant" + }, + { + "object": "product", + "property": "selected_or_first_available_variant" + }, + { + "object": "product", + "property": "variants" + }, + { + "object": "product", + "property": "selected_variant" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the variant.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "product", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The parent product of the variant.", + "name": "product" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The selected variant is determined by the `variant` URL parameter. This URL parameter is available on product pages URLs only.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant is currently selected. Returns `false` if it's not.", + "name": "selected" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant has been matched by a [storefront filter](https://shopify.dev/themes/navigation-search/filtering/storefront-filtering).\nReturns `false` if it hasn't.", + "name": "matched" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the variant.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "The variant title", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.variants.first.title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A concatenation of each variant option, separated by a `/`.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The default quantity rule is `min=1,max=null,increment=1`.", + "examples": [ + + ], + "return_type": [ + { + "type": "quantity_rule", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns the specified quantity rule for the variant if one exists in the current customer context. Otherwise returns `min=1,max=nil,increment=1` if the variant does not have any quantity rule.", + "name": "quantity_rule" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "quantity_price_break" + } + ], + "summary": "Returns `quantity_price_break` objects for the variant in the current customer context.", + "name": "quantity_price_breaks" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant has any quantity price breaks available in the current customer context.\nReturns `false` if it doesn't.", + "name": "quantity_price_breaks_configured?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the variant in the currency's subunit.", + "name": "price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The **compare at** price of the variant in the currency's subunit.", + "name": "compare_at_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no selling plan is selected, then `nil` is returned.\n\n> Note:\n> The selected selling plan is determined by the `selling_plan` URL parameter.", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan_allocation", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The selected `selling_plan_allocation`.", + "name": "selected_selling_plan_allocation" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan_allocation" + } + ], + "summary": "The `selling_plan_allocation` objects for the variant.", + "name": "selling_plan_allocations" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The SKU of the variant.", + "name": "sku" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The barcode of the variant.", + "name": "barcode" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant is available. Returns `false` if not.", + "name": "available" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the options of each variant", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% for variant in product.variants -%}\n {%- capture options -%}\n {% for option in variant.options -%}\n {{ option }}{%- unless forloop.last -%}/{%- endunless -%}\n {%- endfor %}\n {%- endcapture -%}\n \n {{ variant.id }}: {{ options }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The values of the variant for each [product option](/docs/api/liquid/objects/product_option).", + "name": "options" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no first product option, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the variant for the first product option.", + "name": "option1" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no second product option, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the variant for the second product option.", + "name": "option2" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no third product option, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the variant for the third product option.", + "name": "option3" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Variant URLs use the following structure:\n\n```\n/products/[product-handle]?variant=[variant-id]\n```", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL of the variant.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To output the weight of a variant in this unit, use this property, and the `variant.weight_in_unit` property, with the\n> [`weight_with_unit` filter](/docs/api/liquid/filters/weight_with_unit).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The unit for the weight of the variant.", + "name": "weight_unit" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To output this weight, use this property, and the `variant.weight_unit` property, with the [`weight_with_unit` filter](/docs/api/liquid/filters/weight_with_unit).", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The weight of the variant in the unit specified by `variant.weight_unit`.", + "name": "weight_in_unit" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`weight_with_unit`](/docs/api/liquid/filters/weight_with_unit) filter to format the weight in\n> [the store's format](https://www.shopify.com/admin/settings/general).\n>\n> Use `variant.weight_in_unit` to output the weight in the unit configured on the variant.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The weight of the variant in grams.", + "name": "weight" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Unit prices are available only to stores located in Germany and France.", + "examples": [ + + ], + "return_type": [ + { + "type": "unit_price_measurement", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The unit price measurement of the variant.", + "name": "unit_price_measurement" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The price reflects any discounts that are applied to the line item. The value is output in the customer's local\n(presentment) currency.\n\n> Note:\n> Unit prices are available only to stores located in Germany and France.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [unit price](https://help.shopify.com/manual/intro-to-shopify/initial-setup/sell-in-france/price-per-unit#add-unit-prices-to-your-product)\nof the variant in the currency's subunit.", + "name": "unit_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If inventory isn't tracked, then the number of items sold is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The inventory quantity of the variant.", + "name": "inventory_quantity" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If inventory isn't tracked, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The inventory management service of the variant.", + "name": "inventory_management" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about why merchants might want to continue selling products when they're out of stock, visit the\n> [Shopify Help Center](https://help.shopify.com/manual/products/inventory/getting-started-with-inventory/selling-when-out-of-stock).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "continue", + "description": "Continue selling when the variant is out of stock.", + "array_value": "" + }, + { + "type": "string", + "name": "deny", + "description": "Stop selling when the variant is out of stock.", + "array_value": "" + } + ], + "summary": "Whether the variant should continue to be sold when it's out of stock.", + "name": "inventory_policy" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant requires shipping. Returns `false` if it doesn't.", + "name": "requires_shipping" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if taxes should be charged on the variant. Returns `false` if not.", + "name": "taxable" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`variant.image`](/docs/api/liquid/objects/variant#variant-image).", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The image attached to the variant.", + "name": "featured_image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> This is the same value as [`variant.featured_image`](/docs/api/liquid/objects/variant#variant-featured_image).", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The image attached to the variant.", + "name": "image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "media", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first media object attached to the variant.", + "name": "featured_media" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Incoming inventory information is populated by [inventory transfers](https://help.shopify.com/manual/products/inventory/transfers).", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant has incoming inventory. Returns `false` if not.", + "name": "incoming" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Incoming inventory information is populated by [inventory transfers](https://help.shopify.com/manual/products/inventory/transfers).\n\n> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the date.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The arrival date for the next incoming inventory of the variant.", + "name": "next_incoming_date" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The array is defined in only the following cases:\n\n- `variant.selected` is `true`\n- The variant is the product's first available variant. For example, `product.first_available_variant` or `product.selected_or_first_available_variant`.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "store_availability" + } + ], + "summary": "The store availabilities for the variant.", + "name": "store_availabilities" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant is set to require a `selling_plan` when being added to the cart. Returns `false` if not.", + "name": "requires_selling_plan" + } + ], + "summary": "A [product variant](https://help.shopify.com/manual/products/variants).", + "name": "variant", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.variants[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "variant", + "property": "quantity_price_breaks" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The minimum quantity required to qualify for the price break.", + "name": "minimum_quantity" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is the price in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price for the quantity price break once the minimum quantity is met.", + "name": "price" + } + ], + "summary": "The per-unit price of a variant when purchasing the minimum quantity or more.", + "name": "quantity_price_break", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"minimum_quantity\":\"10\",\"price\":\"20.00\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "metafield", + "property": "value" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about metafield types, refer to [Metafield types](/apps/metafields/types).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The rating value.", + "name": "rating" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The minimum value of the rating scale.", + "name": "scale_min" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The maximum value of the rating scale.", + "name": "scale_max" + } + ], + "summary": "Information for a [`rating` type](/apps/metafields/types) metafield.", + "name": "rating", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.metafields.details.rating.value", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "gift_card", + "property": "recipient" + } + ], + "template": [ + "gift_card.liquid" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The nickname of the recipient.", + "name": "nickname" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email of the recipient.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The full name of the recipient.", + "name": "name" + } + ], + "summary": "A recipient that is associated with a [gift card](https://help.shopify.com/manual/products/gift-card-products).", + "name": "recipient", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"email\":\"cornelius.potionmaker@gmail.com\",\"name\":\"Cornelius Potionmaker\",\"nickname\":\"Cornelius\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Product recommendations become more accurate over time as new orders and product data become available. To learn more about\nhow product recommendations are generated, refer to [Product recommendations](/themes/product-merchandising/recommendations).\n\n> Note:\n> The `recommendations` object returns products only when rendered in a section using the [Product Recommendations API](/api/ajax/reference/product-recommendations)\n> and the [Section Rendering API](/api/section-rendering). To learn about how to include product recommendations in your theme,\n> refer to [Show product recommendations](/themes/product-merchandising/recommendations/show-product-recommendations).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` when being referenced inside a section that's been rendered using the Product Recommendations API and\nthe Section Rendering API. Returns `false` if not.", + "name": "performed?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If `performed?` is `false`, then an [EmptyDrop](/docs/api/liquid/basics#emptydrop) is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "product" + } + ], + "summary": "The recommended products.", + "name": "products" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If `performed?` is `false`, then 0 is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of recommended products.", + "name": "products_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If `performed?` is `false`, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The recommendation intent.", + "name": "intent" + } + ], + "summary": "Product recommendations for a specific product based on sales data, product descriptions, and collection relationships.", + "name": "recommendations", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"products\":[],\"products_count\":4,\"performed?\":true}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can use `request.design_mode` to control theme behavior depending on whether the theme is being viewed in the editor.\nFor example, you can prevent session data from being tracked by tracking scripts in the theme editor.\n\n> Caution:\n> You shouldn't use `request.design_mode` to change customer-facing functionality. The theme editor preview should match\n> what the merchant's customers see on the live store.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the request is being made from within the theme editor. Returns `false` if not.", + "name": "design_mode" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "404", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "article", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "blog", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "captcha", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "cart", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "collection", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "list-collections", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/account", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/activate_account", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/addresses", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/login", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/order", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/register", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/reset_password", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "gift_card", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "index", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "page", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "password", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "policy", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "product", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "search", + "description": "", + "array_value": "" + } + ], + "summary": "The type of page being requested.", + "name": "page_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The domain that the request is hosted on.", + "name": "host" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Create a context-aware absolute URL", + "description": "You can use `request.origin` with any object, object property, or filter that returns a relative URL to build a context-aware absolute URL.\n", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.selected_variant.url | default: product.url | prepend: request.origin }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The protocol and host of the request.", + "name": "origin" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> If the current path is for a page that doesn't exist, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The path of the request.", + "name": "path" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "shop_locale", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The locale of the request.", + "name": "locale" + } + ], + "summary": "Information about the current URL and the associated page.", + "name": "request", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "request", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + "robots.txt.liquid" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> You can [customize the `robots.txt` file](/themes/seo/robots-txt) with the [`robots.txt.liquid` template](/themes/architecture/templates/robots-txt-liquid).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "group" + } + ], + "summary": "The rule groups.", + "name": "default_groups" + } + ], + "summary": "The default rule groups for the `robots.txt` file.", + "name": "robots", + "examples": [ + + ], + "json_data": { + "path": "/robots.txt", + "handle": "robots", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "robots", + "property": "default_groups" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> You can [customize the `robots.txt` file](/themes/seo/robots-txt) with the [`robots.txt.liquid` template](/themes/architecture/templates/robots-txt-liquid).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "user_agent", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The user agent for the group.", + "name": "user_agent" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "rule" + } + ], + "summary": "The rules in the group.", + "name": "rules" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the group doesn't require a sitemap, then `blank` is returned.\n\nThe sitemap can be accessed at `/sitemap.xml`.", + "examples": [ + + ], + "return_type": [ + { + "type": "sitemap", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The sitemap for the group.", + "name": "sitemap" + } + ], + "summary": "A group of rules for the `robots.txt` file.", + "name": "group", + "examples": [ + + ], + "json_data": { + "path": "/robots.txt", + "handle": "robots.default_groups[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "group", + "property": "rules" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "A rule consists of a directive, which can be either `Allow` or `Disallow`, and a value of the associated URL path.\n\nFor example:\n\n```\nDisallow: /policies/\n```\n\nYou can output a rule directly, instead of referencing each of its properties.\n\n> Tip:\n> You can [customize the `robots.txt` file](/themes/seo/robots-txt) with the [`robots.txt.liquid` template](/themes/architecture/templates/robots-txt-liquid).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The directive of the rule.", + "name": "directive" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the rule.", + "name": "value" + } + ], + "summary": "A rule for the `robots.txt` file, which tells crawlers which pages can, or can't, be accessed.", + "name": "rule", + "examples": [ + + ], + "json_data": { + "path": "/robots.txt", + "handle": "robots.default_groups[0].rules[27]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Using the `routes` object instead of hardcoding URLs helps ensure that your theme supports\n[multiple languages](/themes/internationalization/multiple-currencies-languages), as well as any possible changes in URL\nformat.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The index (home page) URL.", + "name": "root_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [account page](https://help.shopify.com/manual/customers/customer-accounts) URL. Redirects to [new customer accounts](https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts) when enabled.", + "name": "account_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [account login page](/themes/architecture/templates/customers-login) URL. Redirects to [new customer accounts](https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts) when enabled.", + "name": "account_login_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL to log a customer out of their account. Redirects to [new customer accounts](https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts) when enabled.", + "name": "account_logout_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [password recovery page](/themes/architecture/templates/customers-reset-password) URL. Redirects to [new customer accounts](https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts) when enabled.", + "name": "account_recover_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [account registration page](/themes/architecture/templates/customers-register) URL.", + "name": "account_register_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [account addresses page](/themes/architecture/templates/customers-addresses) URL. Redirects to [new customer accounts](https://help.shopify.com/en/manual/customers/customer-accounts/new-customer-accounts) when enabled.", + "name": "account_addresses_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [collection list page](/themes/architecture/templates/list-collections) URL.", + "name": "collections_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The all-products collection is automatically generated by Shopify and contains all products in the store.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The all-products collection page URL.", + "name": "all_products_collection_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [search page](/themes/architecture/templates/search) URL.", + "name": "search_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to support predictive search in your theme, refer to [Add predictive search to your theme](/themes/navigation-search/search/predictive-search).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [Predictive Search API](/api/ajax/reference/predictive-search) URL.", + "name": "predictive_search_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [cart page](/themes/architecture/templates/cart) URL.", + "name": "cart_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the [`/cart/add` Cart API endpoint](/api/ajax/reference/cart#post-locale-cart-add-js).", + "name": "cart_add_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the [`/cart/change` Cart API endpoint](/api/ajax/reference/cart#post-locale-cart-change-js).", + "name": "cart_change_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the [`/cart/clear` Cart API endpoint](/api/ajax/reference/cart#post-locale-cart-clear-js).", + "name": "cart_clear_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the [`/cart/update` Cart API endpoint](/api/ajax/reference/cart#post-locale-cart-update-js).", + "name": "cart_update_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [Product Recommendations API](https://shopify.dev/api/ajax/reference/product-recommendations) URL.", + "name": "product_recommendations_url" + } + ], + "summary": "Allows you to generate standard URLs for the storefront.", + "name": "routes", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "routes", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "scripts", + "property": "cart_calculate_line_items" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn more about Shopify Scripts and the Script Editor, visit the [Shopify Help Center](https://help.shopify.com/manual/checkout-settings/script-editor).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the script.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the script.", + "name": "name" + } + ], + "summary": "Information about a Shopify Script.", + "name": "script", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "scripts.cart_calculate_line_items", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + "search" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about storefront search and how to include it in your theme, refer to [Storefront search](/themes/navigation-search/search).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`highlight` filter](/docs/api/liquid/filters/highlight) to highlight the search terms in search result content.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The entered search terms.", + "name": "terms" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Only filters that are relevant to the current search results are returned. If the search results contain more than 1000\nproducts, then the array will be empty.\n\n> Tip:\n> To learn about how to set up filters in the admin, visit the [Shopify Help Center](https://help.shopify.com/manual/online-store/themes/customizing-themes/storefront-filters).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "filter" + } + ], + "summary": "The filters that have been set up on the search page.", + "name": "filters" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if a search was successfully performed. Returns `false` if not.", + "name": "performed" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "An item can be an [`article`](/docs/api/liquid/objects/article), a [`page`](/docs/api/liquid/objects/page), or a\n[`product`](/docs/api/liquid/objects/product).\n\n> Tip:\n> Use the [paginate](/docs/api/liquid/tags/paginate) tag to choose how many results to show per page, up to a limit of 50.", + "examples": [ + { + "name": "Search result `object_type`", + "description": "Search results have an additional `object_type` property that returns the object type of the result.", + "syntax": "", + "path": "/search?q=potion", + "raw_liquid": "{% for item in search.results %}\n<!-- Result {{ forloop.index }}-->\n<h3>\n {{ item.title | link_to: item.url }}\n</h3>\n\n{% if item.object_type == 'article' -%}\n {%- comment -%}\n 'item' is an article\n All article object properties can be accessed.\n {%- endcomment -%}\n\n {% if item.image -%}\n <div class=\"result-image\">\n <a href=\"{{ item.url }}\" title=\"{{ item.title | escape }}\">\n {{ item | image_url: width: 100 | image_tag }}\n </a>\n </div>\n {% endif %}\n{%- elsif item.object_type == 'page' -%}\n {%- comment -%}\n 'item' is a page.\n All page object properties can be accessed.\n {%- endcomment -%}\n{%- else -%}\n {%- comment -%}\n 'item' is a product.\n All product object properties can be accessed.\n {%- endcomment -%}\n\n {%- if item.featured_image -%}\n <div class=\"result-image\">\n <a href=\"{{ item.url }}\" title=\"{{ item.title | escape }}\">\n {{ item.featured_image | image_url: width: 100 | image_tag }}\n </a>\n </div>\n {% endif %}\n{%- endif -%}\n\n<span>{{ item.content | strip_html | truncatewords: 40 | highlight: search.terms }}</span>\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The search result items.", + "name": "results" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of results.", + "name": "results_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the sort options", + "description": "", + "syntax": "", + "path": "/search?q=potion", + "raw_liquid": "{%- assign sort_by = search.sort_by | default: search.default_sort_by -%}\n\n<select>\n{%- for option in search.sort_options %}\n <option\n value=\"{{ option.value }}\"\n {%- if option.value == sort_by %}\n selected=\"selected\"\n {%- endif %}\n >\n {{ option.name }}\n </option>\n{% endfor -%}\n</select>", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "sort_option" + } + ], + "summary": "The available sorting options for the search results.", + "name": "sort_options" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there's no `sort_by` URL parameter, then the value is `nil`.", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "The sort order of the search results. This is determined by the `sort_by` URL parameter.", + "name": "sort_by" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The default sort order of the search results, which is `relevance`.", + "name": "default_sort_by" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "A search can be performed on the following object types:\n\n- [`article`](/docs/api/liquid/objects/article)\n- [`page`](/docs/api/liquid/objects/page)\n- [`product`](/docs/api/liquid/objects/product)\n\n> Note:\n> The types are determined by the [`type` query parameter](/api/ajax/reference/predictive-search#query-parameters).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The object types that the search was performed on.", + "name": "types" + } + ], + "summary": "Information about a storefront search query.", + "name": "search", + "examples": [ + + ], + "json_data": { + "path": "/search?q=potion", + "handle": "search", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about sections and using them in a theme, refer to [Sections](/themes/architecture/sections).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The ID for sections included through [JSON templates](/themes/architecture/templates/json-templates) are dynamically\ngenerated by Shopify.\n\nThe ID for static sections is the section file name without the `.liquid` extension. For example, a `header.liquid`\nsection has an ID of `header`.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the section.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to access settings, refer to [Access settings](/themes/architecture/settings#access-settings).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [settings](https://shopify.dev/themes/architecture/sections/section-schema#settings) of the section.", + "name": "settings" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "block" + } + ], + "summary": "The blocks of the section.", + "name": "blocks" + } + ], + "summary": "The properties and settings of a section.", + "name": "section", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"blocks\":[],\"id\":\"template--14453298921537__cart-items\",\"settings\":{}}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "selling_plan_allocation" + }, + { + "object": "variant", + "property": "selling_plan_allocations" + }, + { + "object": "product", + "property": "selected_selling_plan_allocation" + }, + { + "object": "product", + "property": "selected_or_first_available_selling_plan_allocation" + }, + { + "object": "variant", + "property": "selected_selling_plan_allocation" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the selling plan allocation in the currency's subunit.", + "name": "price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value of the **compare at** price is the line item's price without the selling plan applied. If the price and compare\nat price are equal, then `nil` is returned.\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The **compare at** price of the selling plan allocation in the currency's subunit.", + "name": "compare_at_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The maximum length of the array is two. If the associated selling plan doesn't create any price adjustments, then the\narray is empty.\n\nEach `selling_plan_allocation_price_adjustment` maps to a [`selling_plan_price_adjustment`](/docs/api/liquid/objects/selling_plan_price_adjustment)\nin the [`selling_plan.price_adjustments` array](/docs/api/liquid/objects/selling_plan#selling_plan-price_adjustments). The\n`selling_plan.price_adjustments` array contains the intent of the selling plan, and the\n`selling_plan_allocation.price_adjustments` array contains the resulting money amounts.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan_allocation_price_adjustment" + } + ], + "summary": "The selling plan allocation price adjustments.", + "name": "price_adjustments" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the variant doesn't have a unit price, then `nil` is returned.\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [unit price](/docs/api/liquid/objects/variant#variant-unit_price) of the variant associated with the selling plan, in the currency's subunit.", + "name": "unit_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If a selling plan includes multiple deliveries, then the `per_delivery_price` is the `price` divided by the number of\ndeliveries.\n\nThe value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price for each delivery in the selling plan in the currency's subunit.", + "name": "per_delivery_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The selling plan that created the allocation.", + "name": "selling_plan" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the [`selling_plan_group`](/docs/api/liquid/objects/selling_plan_group) that the selling plan of the allocation belongs to.", + "name": "selling_plan_group_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount that the customer will be charged at checkout in the currency's subunit.", + "name": "checkout_charge_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The remaining amount for the customer to pay, in the currency's subunit.", + "name": "remaining_balance_charge_amount" + } + ], + "summary": "Information about how a specific [selling plan](/apps/subscriptions/selling-plans) affects a line item.", + "name": "selling_plan_allocation", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?variant=39897499828289&selling_plan=610435137", + "handle": "product.selected_selling_plan_allocation", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "selling_plan_allocation", + "property": "price_adjustments" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the price adjustment in the\n[`selling_plan_allocation.price_adjustments` array](/docs/api/liquid/objects/selling_plan_allocation#selling_plan_allocation-price_adjustments).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price that will be charged for the price adjustment's lifetime, in the currency's subunit.", + "name": "price" + } + ], + "summary": "The resulting price from the intent of the associated [`selling_plan_price_adjustment`](/docs/api/liquid/objects/selling_plan_price_adjustment).", + "name": "selling_plan_allocation_price_adjustment", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?variant=39897499828289&selling_plan=610435137", + "handle": "product.selected_selling_plan_allocation.price_adjustments[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "selling_plan_allocation" + }, + { + "object": "variant", + "property": "selling_plan_allocations" + }, + { + "object": "selling_plan", + "property": "checkout_charge" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "percentage", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "price", + "description": "", + "array_value": "" + } + ], + "summary": "The value type of the checkout charge.", + "name": "value_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "How this value is interpreted depends on the [value type](/docs/api/liquid/objects/selling_plan_checkout_charge#selling_plan_checkout_charge-value_type) of\nthe checkout charge. The following table outlines what the value represents for each value type:\n\n| Value type | Value |\n| --- | --- |\n| `percentage` | The percent amount of the original price that the customer needs to pay.<br><br>For example, if the value is 50, then the customer needs to pay 50% of the original price. |\n| `price` | The amount that the customer needs to pay in the currency's subunit. |\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the checkout charge.", + "name": "value" + } + ], + "summary": "Information about how a specific [selling plan](/apps/subscriptions/selling-plans) affects the amount that a\ncustomer needs to pay for a line item at checkout.", + "name": "selling_plan_checkout_charge", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?selling_plan=610435137", + "handle": "product.selected_selling_plan.checkout_charge", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "selling_plan_allocation" + }, + { + "object": "variant", + "property": "selling_plan_allocations" + }, + { + "object": "product", + "property": "selected_selling_plan" + }, + { + "object": "selling_plan_allocation", + "property": "selling_plan" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the selling plan.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The name is shown at checkout with the line item summary.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the selling plan.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The description of the selling plan.", + "name": "description" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The name is shown at checkout with the line item summary.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the [`selling_plan_group`](/docs/api/liquid/objects/selling_plan_group) that the selling plan belongs to.", + "name": "group_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the selling plan includes multiple deliveries. Returns `false` if not.", + "name": "recurring_deliveries" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan_option" + } + ], + "summary": "The selling plan options.", + "name": "options" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The maximum length of the array is two. If the selling plan doesn't create any price adjustments, then the\narray is empty.\n\nEach `selling_plan_price_adjustment` maps to a [`selling_plan_allocation_price_adjustment`](/docs/api/liquid/objects/selling_plan_allocation_price_adjustment)\nin the [`selling_plan_allocation.price_adjustments` array](/docs/api/liquid/objects/selling_plan_allocation#selling_plan_allocation-price_adjustments).\nThe `selling_plan.price_adjustments` array contains the intent of the selling plan, and the\n`selling_plan_allocation.price_adjustments` contains the resulting money amounts.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan_price_adjustment" + } + ], + "summary": "The selling plan price adjustments.", + "name": "price_adjustments" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The selected selling plan is determined by the `selling_plan` URL parameter.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the selling plan is currently selected. Returns `false` if not.", + "name": "selected" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "selling_plan_checkout_charge", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The checkout charge of the selling plan.", + "name": "checkout_charge" + } + ], + "summary": "Information about the intent of how a specific [selling plan](/apps/subscriptions/selling-plans) affects a line item.", + "name": "selling_plan", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?selling_plan=610435137", + "handle": "product.selected_selling_plan", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "product", + "property": "" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Selling plans are grouped based on shared [selling plan option names](/docs/api/liquid/objects/selling_plan_option#selling_plan_option-name).\n\nTo learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan" + } + ], + "summary": "The selling plans in the group.", + "name": "selling_plans" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the selling plan group.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the selling plan group.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If the app doesn't provide a value, then `nil` is returned.\n\n> Tip:\n> You can use this property, with the [`where` filter](/docs/api/liquid/filters/where), to filter the\n> [`product.selling_plan_groups` array](/docs/api/liquid/objects/product#product-selling_plan_groups) for all selling plan groups\n> from a specific app.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "An optional string provided by an app to identify selling plan groups created by that app.", + "name": "app_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "selling_plan_group_option" + } + ], + "summary": "The selling plan group options.", + "name": "options" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The selected selling plan is determined by the `selling_plan` URL parameter.", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the currently selected selling plan is part of the selling plan group. Returns `false` if not.", + "name": "selling_plan_selected" + } + ], + "summary": "Information about a specific group of [selling plans](/apps/subscriptions/selling-plans) that include any of a\nproduct's variants.", + "name": "selling_plan_group", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.selling_plan_groups[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "selling_plan_group", + "property": "" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the option.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the option in the [`selling_plan_group.options` array](/docs/api/liquid/objects/selling_plan_group#selling_plan_group-options).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The values of the option.", + "name": "values" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no selling plan is currently selected, then `nil` is returned.\n\n> Note:\n> The selected selling plan is determined by the `selling_plan` URL parameter.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The option value of the currently selected selling plan.", + "name": "selected_value" + } + ], + "summary": "Information about a specific option in a [selling plan group](/docs/api/liquid/objects/selling_plan_group).", + "name": "selling_plan_group_option", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "product.selling_plan_groups[0].options[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "selling_plan", + "property": "options" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about how to support selling plans in your theme, refer to [Purchase options](/themes/pricing-payments/purchase-options).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the associated `selling_plan_group_option`.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The 1-based index of the selling plan option in the associated [`selling_plan_group.options` array](/docs/api/liquid/objects/selling_plan_group#selling_plan_group-options).", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is one of the [`selling_plan_group_option.values`](/docs/api/liquid/objects/selling_plan_group_option#selling_plan_group_option-values).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the selling plan option.", + "name": "value" + } + ], + "summary": "Information about a selling plan's value for a specific [`selling_plan_group_option`](/docs/api/liquid/objects/selling_plan_group_option).", + "name": "selling_plan_option", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?selling_plan=610435137", + "handle": "product.selected_selling_plan.options[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "checkout", + "property": "shipping_method" + }, + { + "object": "order", + "property": "shipping_method" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "In most contexts, the shipping method title appears in the customer's preferred language. However, in the context of an\n[order](/docs/api/liquid/objects/order), the shipping method title appears in the language that the customer checked out in.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the shipping method.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the shipping method in the currency's subunit, before discounts have been applied.", + "name": "original_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The price of the shipping method in the currency's subunit, after discounts have been applied.", + "name": "price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> The price of the shipping method is appended to handle.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the shipping method.", + "name": "handle" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the shipping method.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "tax_line" + } + ], + "summary": "The tax lines for the shipping method.", + "name": "tax_lines" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_allocation" + } + ], + "summary": "The discount allocations that apply to the shipping method.", + "name": "discount_allocations" + } + ], + "summary": "Information about the shipping method for an order.", + "name": "shipping_method", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[1].shipping_method", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the store.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the store.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [description](https://help.shopify.com/manual/online-store/setting-up/preferences#edit-the-title-and-meta-description)\nof the store.", + "name": "description" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> You can get the store's currency with [`shop.currency`](/docs/api/liquid/objects/shop#shop-currency).", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "currency" + } + ], + "summary": "The currencies that the store accepts.", + "name": "enabled_currencies" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "shop_locale" + } + ], + "summary": "The locales (languages) that are published on the store.", + "name": "published_locales" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because the name didn't make it clear that the returned locales were published.\n\nThe `shop.enabled_locales` property has been replaced by [`shop.published_locales`](/docs/api/liquid/objects/shop#shop-published_locales).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "shop_locale" + }, + { + "type": "array", + "name": "", + "description": "", + "array_value": "shop_locale" + } + ], + "summary": "The locales (languages) that are published on the store.", + "name": "enabled_locales" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because this value is contextual to the request and not a property of the shop resource.\n\nThe `shop.locale` property has been replaced by [request.locale](/docs/api/liquid/objects/request#request-locale).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "shop_locale", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currently active locale (language).", + "name": "locale" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The full URL of the store.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [sender email](https://help.shopify.com/manual/intro-to-shopify/initial-setup/setup-your-email#change-your-sender-email-address)\nof the store.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The full URL of the store, with an `https` protocol.", + "name": "secure_url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The primary domain of the store.", + "name": "domain" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The `.myshopify.com` domain of the store.", + "name": "permanent_domain" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The phone number of the store.", + "name": "phone" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The password page message of the store.", + "name": "password_message" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The address of the store.", + "name": "address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if customer accounts are required to complete checkout. Returns `false` if not.", + "name": "customer_accounts_enabled" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if customer accounts are optional to complete checkout. Returns `false` if not.", + "name": "customer_accounts_optional" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "currency", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The currency of the store.", + "name": "currency" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "currency", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The money format of the store.", + "name": "money_format" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "currency", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The money format of the store with the currency included.", + "name": "money_with_currency_format" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about how to create metafields, refer to [Create and manage metafields](/apps/metafields/manage) or visit\n> the [Shopify Help Center](https://help.shopify.com/manual/metafields).", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "The [metafields](/docs/api/liquid/objects/metafield) applied to the store.", + "name": "metafields" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The payment types are based on the store's enabled [payment providers](https://help.shopify.com/manual/payments) and\nthe customer's current region and currency.\n\n> Tip:\n> You can output an `svg` logo for each payment type with the [`payment_type_svg_tag` filter](/docs/api/liquid/filters/payment_type_svg_tag).\n> Alternatively, you can get the source URL for each `svg` with the [`payment_type_img_url` filter](/docs/api/liquid/filters/payment_type_img_url).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The accepted payment types on the store.", + "name": "enabled_payment_types" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because whether or not prices have taxes included is dependent on the customer's country.\n\nThe `shop.taxes_included` property has been replaced by [cart.taxes_included](/docs/api/liquid/objects/cart#cart-taxes_included).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if prices include taxes. Returns `false` if not.", + "name": "taxes_included" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "policy", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The refund policy for the store.", + "name": "refund_policy" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "policy", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The shipping policy for the store.", + "name": "shipping_policy" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "policy", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The privacy policy for the store.", + "name": "privacy_policy" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "policy", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The terms of service for the store.", + "name": "terms_of_service" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "policy", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The subscription policy for the store.", + "name": "subscription_policy" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The policies are set in the store's [Policies settings](https://www.shopify.com/admin/settings/legal).", + "examples": [ + { + "name": "Output the policies", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "<ul>\n{%- for policy in shop.policies %}\n <li>{{ policy.title }}</li>\n{%- endfor %}\n</ul>", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "policy" + } + ], + "summary": "The policies for the store.", + "name": "policies" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the vendors", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for vendor in shop.vendors %}\n {{- vendor | link_to_vendor }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "All of the product vendors for the store.", + "name": "vendors" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Output the product types", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for type in shop.types %}\n {{- type | link_to_type }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "All of the product types in the store.", + "name": "types" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of products in the store.", + "name": "products_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of collections in the store.", + "name": "collections_count" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the store accepts gift cards. Returns `false` if not.", + "name": "accepts_gift_cards" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "brand", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [brand assets](https://help.shopify.com/manual/promoting-marketing/managing-brand-assets) for the store.", + "name": "brand" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Metaobjects can only be accessed by specifying their type and handle. For more information, refer to [Access metaobjects individually](/docs/api/liquid/objects#metaobject-access-metaobjects-individually).\n\nMetaobjects are created in the [Content](https://www.shopify.com/admin/content) page of the Shopify admin.", + "examples": [ + + ], + "return_type": [ + + ], + "summary": "All of the [metaobjects](/docs/api/liquid/objects/metaobject) of the store.", + "name": "metaobjects" + } + ], + "summary": "Information about the store, such as the store address, the total number of products, and various settings.", + "name": "shop", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "shop", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "localization", + "property": "available_languages" + }, + { + "object": "localization", + "property": "language" + }, + { + "object": "request", + "property": "locale" + }, + { + "object": "shop", + "property": "published_locales" + }, + { + "object": "shop", + "property": "locale" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn how to offer localization options in your theme, refer to [Support multiple currencies and languages](/themes/internationalization/multiple-currencies-languages).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the locale in the store's primary locale.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the locale in the locale itself.", + "name": "endonym_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ISO code of the locale in [IETF language tag format](https://en.wikipedia.org/wiki/IETF_language_tag).", + "name": "iso_code" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the locale is the store's primary locale. Returns `false` if not.", + "name": "primary" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative root URL of the locale.", + "name": "root_url" + } + ], + "summary": "A language in a store.", + "name": "shop_locale", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "shop.published_locales[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "shop", + "property": "policies" + }, + { + "object": "shop", + "property": "refund_policy" + }, + { + "object": "shop", + "property": "shipping_policy" + }, + { + "object": "shop", + "property": "privacy_policy" + }, + { + "object": "shop", + "property": "terms_of_service" + }, + { + "object": "shop", + "property": "subscription_policy" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the policy.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The content of the policy.", + "name": "body" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the policy.", + "name": "url" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the policy.", + "name": "title" + } + ], + "summary": "A [store policy](https://help.shopify.com/manual/checkout-settings/refund-privacy-tos), such as a privacy or return policy.", + "name": "policy", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "shop.policies[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "variant", + "property": "store_availabilities" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "If a location doesn't stock a variant, then there won't be a `store_availability` for that variant and location.\n\n> Note:\n> The `store_availability` object is defined only if one or more locations has [local pickup](https://help.shopify.com/manual/shipping/setting-up-and-managing-your-shipping/local-methods/local-pickup)\n> enabled.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the variant has available inventory at the location. Returns `false` if not.", + "name": "available" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the location has pickup enabled. Returns `false` if not.", + "name": "pick_up_enabled" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> This value can be configured in the Shopify admin. To learn more, visit the [Shopify Help Center](https://help.shopify.com/en/manual/sell-in-person/shopify-pos/order-management/local-pickup-for-online-orders#manage-preferences-for-a-local-pickup-location).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of time that it takes for pickup orders to be ready at the location.", + "name": "pick_up_time" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "location", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The location that the variant is stocked at.", + "name": "location" + } + ], + "summary": "A variant's inventory information for a physical store location.", + "name": "store_availability", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion?variant=39897499729985", + "handle": "product.selected_variant.store_availabilities[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "checkout", + "property": "tax_lines" + }, + { + "object": "order", + "property": "tax_lines" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The title of the tax.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted price.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The tax amount in the currency's subunit.", + "name": "price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The decimal value of the tax rate.", + "name": "rate" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The decimal value of the tax rate, as a percentage.", + "name": "rate_percentage" + } + ], + "summary": "Information about a tax line of a checkout or order.", + "name": "tax_line", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"price\":1901,\"rate\":0.05,\"rate_percentage\":5.0,\"title\":\"GST\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": true, + "deprecation_reason": "Deprecated because the values of this object's properties are subject to change, so can't be relied on within the theme.\n\nIf you want to link to the theme editor for the published theme, then you can use the URL path `/admin/themes/current/editor`.\n\nWhile this object is deprecated in Liquid and shouldn't be used, you can still access it through the [REST Admin API](/api/admin-rest/current/resources/theme).", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the theme.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the theme.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "main", + "description": "The theme is published. Customers see it when they visit the online store.", + "array_value": "" + }, + { + "type": "string", + "name": "unpublished", + "description": "The theme is unpublished. Customers can't see it.", + "array_value": "" + }, + { + "type": "string", + "name": "demo", + "description": "The theme is installed on the store as a demo. The theme can't be published until the merchant buys the full version.", + "array_value": "" + }, + { + "type": "string", + "name": "development", + "description": "The theme is used for development. The theme can't be published, and is temporary.", + "array_value": "" + } + ], + "summary": "The role of the theme.", + "name": "role" + } + ], + "summary": "Information about the current theme.", + "name": "theme", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "theme", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> To learn about the available setting types, refer to [Input settings](/themes/architecture/settings/input-settings).", + "properties": [ + + ], + "summary": "Allows you to access all of the theme's settings from the [`settings_schema.json` file](/themes/architecture/config/settings-schema-json).", + "name": "settings", + "examples": [ + { + "name": "Reference a setting value", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% if settings.favicon != blank %}\n <link rel=\"icon\" type=\"image/png\" href=\"{{ settings.favicon | image_url: width: 32, height: 32 }}\">\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "404", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "article", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "blog", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "cart", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "collection", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "list-collections", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/account", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/activate_account", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/addresses", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/login", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/order", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/register", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "customers/reset_password", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "gift_card", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "index", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "page", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "password", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "product", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "search", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the template's [type](/docs/themes/architecture/templates#template-types).", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Returns `nil` if the default template is being used.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The custom name of an [alternate template](/themes/architecture/templates#alternate-templates).", + "name": "suffix" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Returns `nil` if the template's parent directory is `/templates`.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the template's parent directory.", + "name": "directory" + } + ], + "summary": "Information about the current [template](/docs/themes/architecture/templates).", + "name": "template", + "examples": [ + + ], + "json_data": { + "path": "/products/health-potion", + "handle": "template", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "checkout", + "property": "transactions" + }, + { + "object": "order", + "property": "transactions" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the transaction.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the transaction.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "success", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "pending", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "failure", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "error", + "description": "", + "array_value": "" + } + ], + "summary": "The status of the transaction.", + "name": "status" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp of when the transaction was created.", + "name": "created_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This includes things like whether the payment was a test, or an authorization code if there was one.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Information from the payment provider about the payment receipt.", + "name": "receipt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "authorization", + "description": "The reserving of money that the customer has agreed to pay.", + "array_value": "" + }, + { + "type": "string", + "name": "capture", + "description": "The transfer of the money that was reserved during the `authorization` step.", + "array_value": "" + }, + { + "type": "string", + "name": "sale", + "description": "A combination of `authorization` and `capture` in one step.", + "array_value": "" + }, + { + "type": "string", + "name": "void", + "description": "The cancellation of a pending `authorization` or `capture`.", + "array_value": "" + }, + { + "type": "string", + "name": "refund", + "description": "The partial, or full, refund of captured funds.", + "array_value": "" + } + ], + "summary": "The type of transaction.", + "name": "kind" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [handleized](/docs/api/liquid/basics#modifying-handles) name of the payment provider used for the transaction.", + "name": "gateway" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The status of the transaction, translated based on the current locale.", + "name": "status_label" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "transaction_payment_details", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The transaction payment details.", + "name": "payment_details" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The amount is in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of the transaction in the currency's subunit.", + "name": "amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the payment provider used for the transaction.", + "name": "gateway_display_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Whether the transaction is pending, and whether additional customer info is required to process the payment.", + "name": "show_buyer_pending_payment_instructions?" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A notice that contains instructions for the customer on how to complete their payment.\nThe messages are specific to the payment method used.", + "name": "buyer_pending_payment_notice" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "pending_payment_instruction_input" + } + ], + "summary": "A list of `pending_payment_instruction_input` header-value pairs, with payment method-specific details.\nThe customer can use these details to complete their purchase offline.\n\nIf the payment method doesn’t support pending payment instructions, then an empty array is returned.\n\n| Supported payment method | Expected Values |\n| --- | ----------- |\n| ShopifyPayments - Multibanco | [{header=\"Entity\", value=\"12345\"}, {header=\"Reference\", value=\"999999999\"}] |", + "name": "buyer_pending_payment_instructions" + } + ], + "summary": "A transaction associated with a checkout or order.", + "name": "transaction", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[1].transactions[0]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "line_item", + "property": "unit_price_measurement" + }, + { + "object": "variant", + "property": "unit_price_measurement" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> Unit prices are available only to stores located in Germany and France.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "volume", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "weight", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "dimension", + "description": "", + "array_value": "" + } + ], + "summary": "The type of unit measurement.", + "name": "measured_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The quantity of the unit.", + "name": "quantity_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The unit of measurement used to measure the [`quantity_value`](/docs/api/liquid/objects/unit_price_measurement#unit_price_measurement-quantity_value).", + "name": "quantity_unit" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The quantity of the unit for the base unit price.", + "name": "reference_value" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The unit of measurement used to measure the [`reference_value`](/docs/api/liquid/objects/unit_price_measurement#unit_price_measurement-reference_value).", + "name": "reference_unit" + } + ], + "summary": "Information about how units of a product variant are measured. It's used to calculate\n[unit prices](https://help.shopify.com/manual/intro-to-shopify/initial-setup/sell-in-france/price-per-unit#add-unit-prices-to-your-product).", + "name": "unit_price_measurement", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[1].line_items[0].unit_price_measurement", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "article", + "property": "user" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> The information returned by the `user` object can be edited on the [**Account** page](https://www.shopify.com/admin/settings/account)\n> of the Shopify admin.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the author is the account owner of the store. Returns `false` if not.", + "name": "account_owner" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no bio is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The bio associated with the author's account.", + "name": "bio" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email associated with the author's account.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first name associated with the author's account.", + "name": "first_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no personal website is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL for the personal website associated with the author's account.", + "name": "homepage" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no image is specified, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The image associated with the author's account.", + "name": "image" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last name associated with the author's account.", + "name": "last_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The first and last name associated with the author's account.", + "name": "name" + } + ], + "summary": "The author of a blog article.", + "name": "user", + "examples": [ + + ], + "json_data": { + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "handle": "article.user", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "metafield", + "property": "value" + }, + { + "object": "product", + "property": "media" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`video_tag` filter](/docs/api/liquid/filters/video_tag) to output the video in an HTML `<video>` tag.", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "video_source" + } + ], + "summary": "The source files for the video.", + "name": "sources" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The duration of the video in milliseconds.", + "name": "duration" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The aspect ratio of the video as a decimal.", + "name": "aspect_ratio" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The alt text of the video.", + "name": "alt" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the video.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + { + "name": "Filter for media of a specific type", + "description": "You can use the `media_type` property with the [`where` filter](/docs/api/liquid/filters/where) to filter the [`product.media` array](/docs/api/liquid/objects/product#product-media) for all media of a desired type.\n", + "syntax": "", + "path": "/products/potion-beats", + "raw_liquid": "{% assign videos = product.media | where: 'media_type', 'video' %}\n\n{% for video in videos %}\n {{- video | video_tag }}\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The media type of the model. Always returns `video`.", + "name": "media_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The position of the video in the [`product.media`](/docs/api/liquid/objects/product#product-media) array.", + "name": "position" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A preview image for the video.", + "name": "preview_image" + } + ], + "summary": "Information about a video uploaded as [product media](/docs/api/liquid/objects/product-media) or a [`file_reference` metafield](/apps/metafields/types).", + "name": "video", + "examples": [ + + ], + "json_data": { + "path": "/products/potion-beats", + "handle": "product.media[1]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "video", + "property": "sources" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The width of the video source file.", + "name": "width" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> When mp4 videos are uploaded, Shopify generates an m3u8 file as an additional video source. An m3u8 file enables video\n> players to leverage HTTP live streaming (HLS), resulting in an optimized video experience based on the user's internet\n> connection.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "mov", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "mp4", + "description": "", + "array_value": "" + }, + { + "type": "string", + "name": "m3u8", + "description": "", + "array_value": "" + } + ], + "summary": "The format of the video source file.", + "name": "format" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The height of the video source file.", + "name": "height" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [MIME type](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types) of the video source file.", + "name": "mime_type" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [CDN URL](/themes/best-practices/performance/platform#shopify-cdn) of the video source file.", + "name": "url" + } + ], + "summary": "Information about the source files for a video.", + "name": "video_source", + "examples": [ + + ], + "json_data": { + "path": "/products/potion-beats", + "handle": "product.media[1].sources[1]", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Use `additional_checkout_buttons` to check whether these payment providers exist, and\n[`content_for_additional_checkout_buttons`](/docs/api/liquid/objects/content_for_additional_checkout_buttons)\nto show the associated checkout buttons. To learn more about how to use these objects, refer to\n[Accelerated checkout](/themes/pricing-payments/accelerated-checkout).\n\n```liquid\n{% if additional_checkout_buttons %}\n {{ content_for_additional_checkout_buttons }}\n{% endif %}\n```", + "properties": [ + + ], + "summary": "Returns `true` if a store has any payment providers with offsite checkouts, such as PayPal Express Checkout.", + "name": "additional_checkout_buttons", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "An attribute called `data-provinces` is set for each `<option>`, and contains a JSON-encoded array of the\ncountry or region's subregions. If a country doesn't have any subregions, then an empty array is set for\nits `data-provinces` attribute.\n\n> Tip:\n> To return only the countries and regions included in the store's shipping zones, use the [`country_option_tags` object](/docs/api/liquid/objects/country_option_tags).", + "properties": [ + + ], + "summary": "Creates an `<option>` tag for each country.", + "name": "all_country_option_tags", + "examples": [ + { + "name": "", + "description": "You can wrap the `all_country_option_tags` object in `<select>` tags to build a country option selector.\n\n```liquid\n<select name=\"country\">\n {{ all_country_option_tags }}\n</select>\n```\n", + "syntax": "", + "path": "/", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "To learn about canonical URLs, refer to [Google's documentation](https://support.google.com/webmasters/answer/139066?hl=en).", + "properties": [ + + ], + "summary": "The canonical URL for the current page.", + "name": "canonical_url", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + "checkout" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "> Deprecated:\n> <p>The <code>checkout</code> object will be deprecated for the Information, Shipping, and Payment pages on August 13, 2024. Merchants who have customized these pages using <code>checkout.liquid</code> to <a href=\"https://help.shopify.com/manual/online-store/themes/theme-structure/extend/checkout-migration#migrate-to-checkout-extensibility\">upgrade to checkout extensibility</a> before August 13, 2024.</p>\n> <p>Learn <a href=\"/apps/checkout\">how to build checkout extensions</a> that extend the functionality of Shopify checkout.</p>\n\nYou can access the `checkout` object on the [order status page](https://help.shopify.com/manual/orders/status-tracking/customize-order-status).\n\nShopify Plus merchants can access the `checkout` object in the [`checkout.liquid` layout](/themes/architecture/layouts/checkout-liquid).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "gift_card" + } + ], + "summary": "The gift cards applied to the checkout.", + "name": "applied_gift_cards" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Shopify Plus merchants that have access to `checkout.liquid` can [capture attributes at checkout](/themes/architecture/layouts/checkout-liquid#capture-checkout-attributes).", + "examples": [ + + ], + "return_type": [ + { + "type": "untyped", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Additional attributes entered by the customer with the [cart](/docs/api/liquid/objects/cart#cart-attributes).", + "name": "attributes" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The billing address entered at checkout.", + "name": "billing_address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the customer checks the email marketing subscription checkbox. Returns `false` if not.", + "name": "buyer_accepts_marketing" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because `false` is always returned.", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the checkout has been cancelled. Returns `false` if not.", + "name": "cancelled" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The cart-specific discount applications for the checkout.", + "name": "cart_level_discount_applications" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The [ISO code](https://www.iso.org/iso-4217-currency-codes.html) of the currency of the checkout.", + "name": "currency" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "customer", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer associated with the checkout.\n> Note:\n> The [`customer` object](/docs/api/liquid/objects/customer) is directly accessible globally when a customer is logged in to their account.", + "name": "customer" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because an unsaved discount doesn't exist on the [Order status page](https://help.shopify.com/manual/orders/status-tracking).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "discount", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A discount applied to the checkout without being saved.", + "name": "discount" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because not all discount types and details are captured.\n\nThe `checkout.discounts` property has been replaced by [`checkout.discount_applications`](/docs/api/liquid/objects/checkout#checkout-discount_applications).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount" + } + ], + "summary": "The discounts applied to the checkout.", + "name": "discounts" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The discount applications for the checkout.", + "name": "discount_applications" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The total amount of the discounts applied to the checkout in the currency's subunit.", + "name": "discounts_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "discount_application" + } + ], + "summary": "The total amount of the discounts applied to the checkout in the currency's subunit, as a negative value.", + "name": "discounts_savings" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email associated with the checkout.", + "name": "email" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because `nil` is always returned.", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The financial status of the checkout.", + "name": "financial_status" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because `nil` is always returned.", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for the fulfullment of the checkout.", + "name": "fulfilled_at" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because the array is always empty.", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The fulfilled line items from the checkout.", + "name": "fulfilled_line_items" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because `unfulfilled` is always returned.", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The fulfillment status of the checkout.", + "name": "fulfillment_status" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The amount of the checkout price paid in gift cards.", + "name": "gift_cards_amount" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the checkout.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The line items of the checkout.", + "name": "line_items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The sum of the prices of all of the line items of the checkout in the currency's subunit, after any line item discounts\nhave been applied.", + "name": "line_items_subtotal_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This value is the same as [`checkout.id`](/docs/api/liquid/objects/checkout#checkout-id) with a `#` prepended to it.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the checkout.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Additional information entered by the customer with the [cart](/docs/api/liquid/objects/cart#cart-note).", + "name": "note" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Depending on the payment provider, the order might not have been created when the [Thank You page](https://help.shopify.com/en/manual/orders/status-tracking)\nis first viewed. In this case, `nil` is returned.\n> Note:\n> The `order` object isn't available on the Thank You page.", + "examples": [ + + ], + "return_type": [ + { + "type": "order", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The order created by the checkout.", + "name": "order" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is the same as [`order.id`](/docs/api/liquid/objects/order#order-id).\n\nDepending on the payment provider, the order might not have been created when the [Order status page](https://help.shopify.com/en/manual/orders/status-tracking)\nis first viewed. In this case, `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the order created by the checkout.", + "name": "order_id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is the same as [`order.name`](/docs/api/liquid/objects/order#order-name).\n\nDepending on the payment provider, the order might not have been created when the [Order status page](https://help.shopify.com/en/manual/orders/status-tracking)\nis first viewed. In this case, `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the order created by the checkout.", + "name": "order_name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is the same as [`order.order_number`](/docs/api/liquid/objects/order#order-order_number).\n\nDepending on the payment provider, the order might not have been created when the [Order status page](https://help.shopify.com/en/manual/orders/status-tracking)\nis first viewed. In this case, `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "An integer representation of the name of the order created by the checkout.", + "name": "order_number" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if any of the line items of the checkout require shipping. Returns `false` if not.", + "name": "requires_shipping" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "address", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The shipping address of the checkout.", + "name": "shipping_address" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "shipping_method", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The shipping method of the checkout.", + "name": "shipping_method" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The shipping price of the checkout in the currency's subunit.", + "name": "shipping_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "tax_line" + } + ], + "summary": "The tax lines for the checkout.", + "name": "tax_lines" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total tax amount of the checkout in the currency's subunit.", + "name": "tax_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "The value is output in the customer's local (presentment) currency.\n\n> Tip:\n> Use [money filters](/docs/api/liquid/filters/money-filters) to output a formatted amount.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The total price of the checkout in the currency's subunit.", + "name": "total_price" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "transaction" + } + ], + "summary": "The transactions of the checkout.", + "name": "transactions" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because the array is always empty.", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The unavailable line items of the checkout.", + "name": "unavailable_line_items" + }, + { + "deprecated": true, + "deprecation_reason": "Deprecated because the array is always the same as [`checkout.line_items`](/docs/api/liquid/objects/checkout#checkout-line_items).", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "line_item" + } + ], + "summary": "The unfulfilled line items of the checkout.", + "name": "unfulfilled_line_items" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The number of items in the checkout.", + "name": "item_count" + } + ], + "summary": "A customer's checkout.", + "name": "checkout", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"applied_gift_cards\":[],\"attributes\":{},\"billing_address\":{},\"buyer_accepts_marketing\":false,\"cart_level_discount_applications\":[],\"currency\":\"CAD\",\"customer\":{},\"discount_applications\":[],\"discounts_amount\":4224,\"discounts_savings\":-4224,\"email\":\"cornelius.potionmaker@gmail.com\",\"gift_cards_amount\":0,\"id\":29944051400769,\"line_items\":[],\"line_items_subtotal_price\":42249,\"name\":\"#29944051400769\",\"note\":null,\"order\":null,\"order_id\":null,\"order_name\":\"#29944051400769\",\"order_number\":\"#29944051400769\",\"requires_shipping\":true,\"shipping_address\":{},\"shipping_method\":{},\"shipping_price\":0,\"tax_lines\":[],\"tax_price\":0,\"total_price\":38025,\"transactions\":[]}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "article", + "property": "comments" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The full name of the author of the comment.", + "name": "author" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The content of the comment.", + "name": "content" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the comment was created.", + "name": "created_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The email of he author of the comment.", + "name": "email" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The ID of the comment.", + "name": "id" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "Outside of the Liquid context, the status of a comment can vary based on spam detection and whether blog comments are\nmoderated. However, only comments with a status of `published` are included in the [`article.comments` array](/docs/api/liquid/objects/article#article-comments).\n\n> Tip:\n> To learn more about blog comments, visit the [Shopify Help Center](https://help.shopify.com/manual/online-store/blogs/managing-comments).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The status of the comment. Always returns `published`.", + "name": "status" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Use the [`date` filter](/docs/api/liquid/filters/date) to format the timestamp.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "A timestamp for when the status of the comment was last updated.", + "name": "updated_at" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The relative URL of the article that the comment is associated with, with [`comment.id`](/docs/api/liquid/objects/comment#comment-id)\nappended.", + "name": "url" + } + ], + "summary": "An article comment.", + "name": "comment", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"author\":\"Cornelius\",\"content\":\"Wow, this is going to save me a fortune in invisibility potion!\",\"created_at\":\"2022-06-05 19:33:57 -0400\",\"email\":\"cornelius.potionmaker@gmail.com\",\"id\":129089273921,\"status\":\"published\",\"updated_at\":\"2022-06-05 19:33:57 -0400\",\"url\":\"/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion#129089273921\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Use [`additional_checkout_buttons`](/docs/api/liquid/objects/additional_checkout_buttons)\nto check whether these payment providers exist, and `content_for_additional_checkout_buttons`\nto show the associated checkout buttons. To learn more about how to use these objects, refer to\n[Accelerated checkout](/themes/pricing-payments/accelerated-checkout).\n\n```liquid\n{% if additional_checkout_buttons %}\n {{ content_for_additional_checkout_buttons }}\n{% endif %}\n```", + "properties": [ + + ], + "summary": "Returns checkout buttons for any active payment providers with offsite checkouts.", + "name": "content_for_additional_checkout_buttons", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "If you use a [Liquid index template](/themes/architecture/templates/index-template) (`templates/index.liquid`), then you must include `{{ content_for_index }}` in the template. This object can't be used in JSON index templates.", + "properties": [ + + ], + "summary": "Dynamically returns the content of [sections](/themes/architecture/sections) to be rendered on the home page.", + "name": "content_for_index", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "Include the `content_for_layout` object in your [layout files](/themes/architecture/layouts) between the `<body>` and\n`</body>` HTML tags.\n\n> Note:\n> The `content_for_layout` object is required in `theme.liquid`.", + "properties": [ + + ], + "summary": "Dynamically returns content based on the current [template](/themes/architecture/templates).", + "name": "content_for_layout", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "An attribute called `data-provinces` is set for each `<option>`, and contains a JSON-encoded array of the\ncountry or region's subregions. If a country doesn't have any subregions, then an empty array is set for its\n`data-provinces` attribute.\n\n> Tip:\n> To return all countries and regions included in the store's shipping zones, use [`all_country_option_tags`](/docs/api/liquid/objects/all_country_option_tags).", + "properties": [ + + ], + "summary": "Creates an `<option>` tag for each country and region that's included in a shipping zone on the [Shipping](https://www.shopify.com/admin/settings/shipping) page of the Shopify admin.", + "name": "country_option_tags", + "examples": [ + { + "name": "", + "description": "You can wrap the `country_option_tags` object in `<select>` tags to build a country option selector.", + "syntax": "", + "path": "/", + "raw_liquid": "<select name=\"country\">\n {{ country_option_tags }}\n</select>", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `current_page` object has a value of 1 for non-paginated resources.", + "properties": [ + + ], + "summary": "The current page number.", + "name": "current_page", + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/ingredients?page=2", + "raw_liquid": "{{ page_title }}{% unless current_page == 1 %} - Page {{ current_page }}{% endunless %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + + ], + "template": [ + "blog", + "collection" + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "You can [add tags](https://help.shopify.com/en/manual/shopify-admin/productivity-tools/using-tags) to articles and\nproducts. Article tags can be used to [filter a blog page](/themes/architecture/templates/blog#filter-articles-by-tag)\nto show only articles with specific tags. Similarly, product tags can be used to [filter a collection page](/themes/navigation-search/filtering/tag-filtering)\nto show only products with specific tags.", + "properties": [ + + ], + "summary": "The currently applied tags.", + "name": "current_tags", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "form", + "property": "errors" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The following table outlines the strings that can be returned and the reason that they would be:\n\n| Form property name | Return reason |\n| --- | --- |\n| `author` | There were issues with required name fields. |\n| `body` | There were issues with required text content fields. |\n| `email` | There were issues with required email fields. |\n| `form` | There were general issues with the form. |\n| `password` | There were issues with required password fields. |", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can access a specific message in the array by using a specific error from the `form_errors` array as a key.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The translated error messages for each value in the `form_errors` array.", + "name": "messages" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "You can access a specific field in the array by using a specific error from the `form_errors` array as a key.", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ], + "summary": "The translated names for each value in the `form_errors` array.", + "name": "translated_fields" + } + ], + "summary": "The error category strings for errors from a form created by a [`form` tag](/docs/api/liquid/tags/form).", + "name": "form_errors", + "examples": [ + { + "name": "Output form errors", + "description": "You can output the name of the field related to the error, and the error message, by using the error as a key to access the `translated_fields` and `messages` properties.\n\n```liquid\n<ul>\n {% for error in form.errors %}\n <li>\n {% if error == 'form' %}\n {{ form.errors.messages[error] }}\n {% else %}\n {{ form.errors.translated_fields[error] }} - {{ form.errors.messages[error] }}\n {% endif %}\n </li>\n {% endfor %}\n</ul>\n```\n", + "syntax": "", + "path": "/", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"messages\":{},\"translated_fields\":{}}" + }, + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "string" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `handle` object will return a value only when the following templates are being viewed:\n\n- [article](/themes/architecture/templates/article)\n- [blog](/themes/architecture/templates/blog)\n- [collection](/themes/architecture/templates/collection)\n- [page](/themes/architecture/templates/page)\n- [product](/themes/architecture/templates/product)\n\nIf none of the above templates are being viewed, then `nil` is returned.", + "properties": [ + + ], + "summary": "The [handle](/docs/api/liquid/basics#handles) of the resource associated with the current template.", + "name": "handle", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `page_description` object can be used to provide a brief description of a page for search engine listings and social\nmedia previews.\n\nTo learn about where to edit the meta description for a page, visit the [Shopify Help Center](https://help.shopify.com/manual/promoting-marketing/seo/adding-keywords#edit-the-title-and-meta-description-for-a-page).", + "properties": [ + + ], + "summary": "The meta description of the current page.", + "name": "page_description", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "", + "denied_filters": [ + "escape", + "escape_once", + "url_escape", + "url_param_escape" + ] + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The resource's featured image for product and collection pages, and blog posts, is used. For all other pages, or pages where\nthere's no featured image, the [social sharing image](https://help.shopify.com/manual/online-store/images/showing-social-media-thumbnail-images?#setting-the-social-sharing-image-in-your-admin)\nis used.\n\n### Open Graph fallback tags\n\nThe `page_image` object can be used for creating [Open Graph](https://ogp.me/) `og:image` meta tags.\n\nIf a theme doesn't include `og:image` tags for a page, then Shopify automatically generates the following tags using the\n`page_image` object:\n\n- `og:image`\n- `og:image:secure_url`\n- `og:image:width`\n- `og:image:height`", + "properties": [ + + ], + "summary": "An image to be shown in search engine listings and social media previews for the current page.", + "name": "page_image", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "image", + "name": "", + "description": "", + "array_value": "" + } + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `page_title` object can be used to specify the title of page for search engine listings and social media previews.\n\nTo learn about where to edit the title for a page, visit the [Shopify Help Center](https://help.shopify.com/manual/promoting-marketing/seo/adding-keywords#edit-the-title-and-meta-description-for-a-page).", + "properties": [ + + ], + "summary": "The page title of the current page.", + "name": "page_title", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "", + "denied_filters": [ + "escape", + "escape_once", + "url_escape", + "url_param_escape" + ] + } + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "paginate", + "property": "parts" + }, + { + "object": "paginate", + "property": "next" + }, + { + "object": "paginate", + "property": "previous" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "boolean", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `true` if the part is a link. Returns `false` if not.", + "name": "is_link" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The page number associated with the part.", + "name": "title" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "It consists of the current page URL path with the pagination parameter for the current part appended.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL of the part.", + "name": "url" + } + ], + "summary": "A part in the navigation for pagination.", + "name": "part", + "examples": [ + { + "name": "Create pagination navigation with `part`", + "description": "You can create a pagination navigation by iterating over each `part` of a [`paginate` object](/docs/api/liquid/objects/paginate).\n", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{% paginate collection.products by 5 -%}\n {% for part in paginate.parts -%}\n {% if part.is_link -%}\n {{ part.title | link_to: part.url}}\n {%- else -%}\n <span>{{ part.title }}</span>\n {% endif %}\n {%- endfor %}\n{%- endpaginate %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"is_link\":true,\"title\":\"2\",\"url\":\"/collections/all?page=2\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "transaction", + "property": "buyer_pending_payment_instructions" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The header of the payment instruction.\nThese are payment method-specific. Example: \"Entity\" and \"Reference\" for Multibanco", + "name": "header" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Contains the corresponding values to the headers of the payment instruction.", + "name": "value" + } + ], + "summary": "Header-value pairs that make up the list of payment information specific to the payment method.\nThis information can be be used by the customer to complete the transaction offline.", + "name": "pending_payment_instruction_input", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + + ], + "summary": "Creates an HTML link element that links to a localied version of `shopify.com`, based on the locale of the store.", + "name": "powered_by_link", + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{{ powered_by_link }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "predictive_search", + "property": "resources" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "You can check whether any resources of a specific type were returned using the [`size` filter](/docs/api/liquid/filters/size).\n\n```liquid\n{% if predictive_search.resources.articles.size > 0 %}\n {% for article in predictive_search.resources.articles %}\n {{ article.title }}\n {% endfor %}\n{% endif %}\n```", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "article" + } + ], + "summary": "The articles associated with the query.", + "name": "articles" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "collection" + } + ], + "summary": "The collections associated with the query.", + "name": "collections" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "page" + } + ], + "summary": "The pages associated with the query.", + "name": "pages" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "array", + "name": "", + "description": "", + "array_value": "product" + } + ], + "summary": "The products associated with the query.", + "name": "products" + } + ], + "summary": "Contains arrays of objects for each resource type that can be returned by a [predictive search query](/api/ajax/reference/predictive-search#get-locale-search-suggest).", + "name": "predictive_search_resources", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"articles\":[],\"collections\":[],\"pages\":[],\"products\":[]}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "variant", + "property": "quantity_rule" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Minimum order quantity (default 1)", + "name": "min" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If there is no maximum, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Maximum order quantity", + "name": "max" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "number", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Order quantity increment (default 1)", + "name": "increment" + } + ], + "summary": "A variant order quantity rule (minimum, maximum, and increment). The default order variant quantity rule is `min=1,max=null,increment=1`.", + "name": "quantity_rule", + "examples": [ + { + "name": "The variant order quantity rule", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{{ product.variants.first.quantity_rule }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"min\":\"1\",\"max\":null,\"increment\":\"1\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": true, + "parents": [ + + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "There can be only one active script of each type. Currently, the only type accessible in Liquid is\n`cart_calculate_line_items`.\n\n> Tip:\n> To learn more about Shopify Scripts and the Script Editor, visit the [Shopify Help Center](https://help.shopify.com/manual/checkout-settings/script-editor).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no line item script is currently active, then `nil` is returned.", + "examples": [ + { + "name": "Advertise the currently active line item script", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% if scripts.cart_calculate_line_items %}\n <p>Don't miss our current sale: <strong>{{ scripts.cart_calculate_line_items.name }}</strong></p>\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ], + "return_type": [ + { + "type": "script", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The active line item script.", + "name": "cart_calculate_line_items" + } + ], + "summary": "The active scripts, of each script type, on the store.", + "name": "scripts", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "scripts", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "group", + "property": "sitemap" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The sitemap provides information about the pages and content on a site, and the relationships between them, which helps\ncrawlers crawl a site more efficiently.\n\n> Tip:\n> To learn more about sitemaps, refer to [Google's documentation](https://developers.google.com/search/docs/advanced/sitemaps/overview).\n\nThe `sitemap` object consists of a `Sitemap` directive, and a value of the URL that the sitemap is hosted at. For example:\n\n```\nSitemap: https://your-store.myshopify.com/sitemap.xml\n```\n\n> Tip:\n> You can [customize the `robots.txt` file](/themes/seo/robots-txt) with the [`robots.txt.liquid` template](/themes/architecture/templates/robots-txt-liquid).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `Sitemap`.", + "name": "directive" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The URL that the sitemap is hosted at.", + "name": "value" + } + ], + "summary": "The sitemap for a specific group in the [`robots.txt` file](/themes/architecture/templates/robots-txt-liquid).", + "name": "sitemap", + "examples": [ + + ], + "json_data": { + "path": "/robots.txt", + "handle": "robots.default_groups[0].sitemap", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "collection", + "property": "sort_options" + }, + { + "object": "search", + "property": "sort_options" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "The name can be edited by merchants in the [language editor](https://help.shopify.com/manual/online-store/themes/customizing-themes/language/change-wording).", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The customer-facing name of the sort option.", + "name": "name" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "This value is used when assigning the [`collection.sort_by`](/docs/api/liquid/objects/collection#collection-sort_by) and\n[`search.sort_by`](/docs/api/liquid/objects/search#search-sort_by) parameters.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The value of the sort option.", + "name": "value" + } + ], + "summary": "A sort option for a collection or search results page.", + "name": "sort_option", + "examples": [ + + ], + "json_data": { + "path": "", + "handle": "", + "data_from_file": "{\"name\":\"Alphabetically, A-Z\",\"value\":\"title-ascending\"}" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "transaction", + "property": "payment_details" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the company that issued the credit card used for the transaction.", + "name": "credit_card_company" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The last four digits of the credit card number of the credit card used for the transaction.", + "name": "credit_card_last_four_digits" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "All but the last four digits are redacted.", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The credit card number of the credit card used for the transaction.", + "name": "credit_card_number" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "If no gift card was used, then `nil` is returned.", + "examples": [ + + ], + "return_type": [ + { + "type": "gift_card", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The gift card used for the transaction.", + "name": "gift_card" + } + ], + "summary": "Information about the payment methods used for a transaction.", + "name": "transaction_payment_details", + "examples": [ + + ], + "json_data": { + "path": "/", + "handle": "customer.orders[4].transactions[0].payment_details", + "data_from_file": "" + }, + "return_type": [ + + ] + }, + { + "access": { + "global": false, + "parents": [ + { + "object": "group", + "property": "user_agent" + } + ], + "template": [ + + ] + }, + "deprecated": false, + "deprecation_reason": "", + "description": "The `user_agent` object consists of a `User-agent` directive, and a value of the name of the user-agent. For example:\n\n```\nUser-agent: *\n```\n\n> Tip:\n> You can [customize the `robots.txt` file](/themes/seo/robots-txt) with the [`robots.txt.liquid` template](/themes/architecture/templates/robots-txt-liquid).", + "properties": [ + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "Returns `User-agent`.", + "name": "directive" + }, + { + "deprecated": false, + "deprecation_reason": "", + "description": "", + "examples": [ + + ], + "return_type": [ + { + "type": "string", + "name": "", + "description": "", + "array_value": "" + } + ], + "summary": "The name of the user-agent.", + "name": "value" + } + ], + "summary": "The user-agent, which is the name of the crawler, for a specific group in the [`robots.txt` file](/themes/architecture/templates/robots-txt-liquid).", + "name": "user_agent", + "examples": [ + + ], + "json_data": { + "path": "/robots.txt", + "handle": "robots.default_groups[0].user_agent", + "data_from_file": "" + }, + "return_type": [ + + ] + } +] \ No newline at end of file diff --git a/data/platformos_liquid/documentation/tags.json b/data/platformos_liquid/documentation/tags.json new file mode 100644 index 00000000..115664ad --- /dev/null +++ b/data/platformos_liquid/documentation/tags.json @@ -0,0 +1,1273 @@ +[ + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "Because there are many different form types available in Shopify themes, the `form` tag requires a type. Depending on the\nform type, an additional parameter might be required. You can specify the following form types:\n\n- [`activate_customer_password`](/docs/api/liquid/tags/form#form-activate_customer_password)\n- [`cart`](/docs/api/liquid/tags/form#form-cart)\n- [`contact`](/docs/api/liquid/tags/form#form-contact)\n- [`create_customer`](/docs/api/liquid/tags/form#form-create_customer)\n- [`currency`](/docs/api/liquid/tags/form#form-currency)\n- [`customer`](/docs/api/liquid/tags/form#form-customer)\n- [`customer_address`](/docs/api/liquid/tags/form#form-customer_address)\n- [`customer_login`](/docs/api/liquid/tags/form#form-customer_login)\n- [`guest_login`](/docs/api/liquid/tags/form#form-guest_login)\n- [`localization`](/docs/api/liquid/tags/form#form-localization)\n- [`new_comment`](/docs/api/liquid/tags/form#form-new_comment)\n- [`product`](/docs/api/liquid/tags/form#form-product)\n- [`recover_customer_password`](/docs/api/liquid/tags/form#form-recover_customer_password)\n- [`reset_customer_password`](/docs/api/liquid/tags/form#form-reset_customer_password)\n- [`storefront_password`](/docs/api/liquid/tags/form#form-storefront_password)", + "parameters": [ + { + "description": "The desired URL to redirect to when the form submits.", + "name": "return_to", + "required": false, + "types": [ + "string" + ] + } + ], + "summary": "Generates an HTML `<form>` tag, including any required `<input>` tags to submit the form to a specific endpoint.", + "name": "form", + "syntax": "{% form 'form_type' %}\n content\n{% endform %}", + "syntax_keywords": [ + { + "keyword": "form_type", + "description": "The name of the desired form type" + }, + { + "keyword": "content", + "description": "The form contents" + } + ], + "examples": [ + { + "name": "activate_customer_password", + "description": "Generates a form for activating a customer account.\nTo learn more about using this form, and its contents, refer to the [`customers/activate_account` template](/themes/architecture/templates/customers-activate-account#content).\n", + "syntax": "{% form 'activate_customer_password', article %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'activate_customer_password' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "cart", + "description": "Generates a form for creating a checkout based on the items currently in the cart. The `cart` form requires a [`cart` object](/docs/api/liquid/objects/cart) as a parameter.\nTo learn more about using the cart form in your theme, refer to the [`cart` template](/themes/architecture/templates/cart#proceed-to-checkout).\n", + "syntax": "{% form 'cart', cart %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'cart', cart %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "contact", + "description": "Generates a form for submitting an email to the merchant. To learn more about using this form in your theme, refer to [Add a contact form to your theme](/themes/customer-engagement/add-contact-form).\n\n> Tip:\n> To learn more about the merchant experience of receiving submissions, refer to [the Shopify Help Center](https://help.shopify.com/manual/online-store/themes/customizing-themes/add-contact-page#view-contact-form-submissions).\n", + "syntax": "{% form 'contact' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'contact' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "create_customer", + "description": "Generates a form for creating a new customer account.\nTo learn more about using this form, and its contents, refer to the [`customers/register` template](/themes/architecture/templates/customers-register#content).\n", + "syntax": "{% form 'create_customer' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'create_customer' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "currency", + "description": "> Deprecated:\n> The `currency` form is deprecated and has been replaced by the [`localization` form](/docs/api/liquid/tags/form#form-localization).\n\nGenerates a form for customers to select their preferred currency.\n\n> Tip:\n> Use the [`currency_selector` filter](/docs/api/liquid/filters/currency_selector) to include a currency selector inside the form.\n", + "syntax": "{% form 'currency' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'currency' %}\n {{ form | currency_selector }}\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "customer", + "description": "Generates a form for creating a new customer without registering a new account. This form is useful for collecting customer information when you don't want customers to log in to your store, such as building a list of emails from a newsletter signup.\n\n> Tip:\n> To generate a form that registers a customer account, use the [`create_customer` form](/docs/api/liquid/tags/form#form-create_customer).\n\nTo learn more about using this form, and its contents, refer to [Email consent](/themes/customer-engagement/email-consent#newsletter-sign-up-form).\n", + "syntax": "{% form 'customer' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'customer' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "customer_address", + "description": "Generates a form for creating a new address on a customer account, or editing an existing one. The `customer_address` form requires a specific parameter, depending on whether a new address is being created or an existing one is being edited:\n\n| Parameter value | Use-case |\n| --- | --- |\n| `customer.new_address` | When a new address is being created. |\n| `address` | When an existing address is being edited. |\n\nTo learn more about using this form, and its contents, refer to the [`customers/addresses` template](/themes/architecture/templates/customers-addresses#content).\n", + "syntax": "{% form 'customer_address', address_type %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'customer_address', customer.new_address %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": false + }, + { + "name": "customer_login", + "description": "Generates a form for logging into a customer account.\nTo learn more about using this form, and its contents, refer to the [`customers/login` template](/themes/architecture/templates/customers-login#the-customer-login-form).\n", + "syntax": "{% form 'customer_login' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'customer_login' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "guest_login", + "description": "Generates a form, for use in the [`customers/login` template](/themes/architecture/templates/customers-login), that directs customers back to their checkout session as a guest instead of logging in to an account.\nTo learn more about using this form, and its contents, refer to [Offer guest checkout](/themes/architecture/templates/customers-login#offer-guest-checkout).\n", + "syntax": "{% form 'guest_login' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'guest_login' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "localization", + "description": "Generates a form for customers to select their preferred country so that they're shown the appropriate language and currency. The `localization` form can contain one of two selectors:\n\n- A country selector\n- A language selector\n\n> Note:\n> The `localization` form replaces the deprecated [`currency` form](/docs/api/liquid/tags/form#form-currency).\n\nTo learn more about using this form, and its contents, refer to [Support multiple currencies and languages](/themes/internationalization/multiple-currencies-languages).\n", + "syntax": "{% form 'localization' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'localization' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "new_comment", + "description": "Generates a form for creating a new comment on an article. The `new_comment` form requires an [`article` object](/docs/api/liquid/objects/article) as a parameter.\nTo learn more about using this form, and its contents, refer to the [`article` template](/themes/architecture/templates/article#the-comment-form).\n", + "syntax": "{% form 'new_comment', article %}\n form_content\n{% endform %}\n", + "path": "/blogs/potion-notions/how-to-tell-if-you-have-run-out-of-invisibility-potion", + "raw_liquid": "{% form 'new_comment', article %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "product", + "description": "Generates a form for adding a product variant to the cart. The `product` form requires a [`product` object](/docs/api/liquid/objects/product) as a parameter.\nTo learn more about using this form, and its contents, refer to the [`product` template](/themes/architecture/templates/product#the-product-form).\n", + "syntax": "{% form 'product', product %}\n form_content\n{% endform %}\n", + "path": "/products/health-potion", + "raw_liquid": "{% form 'product', product %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "recover_customer_password", + "description": "Generates a form, for use in the [`customers/login` template](/themes/architecture/templates/customers-login), for a customer to recover a lost or forgotten password.\nTo learn more about using this form, and its contents, refer to [Provide a \"Forgot your password\" option](/themes/architecture/templates/customers-login#provide-a-forgot-your-password-option).\n", + "syntax": "{% form 'recover_customer_password' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'recover_customer_password' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "reset_customer_password", + "description": "Generates a form for a customer to reset their password.\nTo learn more about using this form, and its contents, refer to the [`customers/reset_password` template](/themes/architecture/templates/customers-reset-password#content).\n", + "syntax": "{% form 'reset_customer_password' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'reset_customer_password' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "storefront_password", + "description": "Generates a form for entering a password protected storefront.\nTo learn more about using this form, and its contents, refer to the [`password` template](/themes/architecture/templates/password#the-password-form).\n", + "syntax": "{% form 'storefront_password' %}\n form_content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'storefront_password' %}\n <!-- form content -->\n{% endform %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "return_to", + "description": "By default, each form type redirects customers to a specific page after the form submits. For example, the `product` form redirects to the cart page.\n\nThe `return_to` parameter allows you to specify a URL to redirect to. This can be done with the following values:\n\n| Value | Description |\n| --- | --- |\n| `back` | Redirect back to the same page that the customer was on before submitting the form. |\n| A relative path | A specific URL path. For example `/collections/all`. |\n| A [`routes` attribute](/docs/api/liquid/objects/routes) | For example, `routes.root_url` |\n", + "syntax": "{% form 'form_type', return_to: string %}\n content\n{% endform %}\n", + "path": "/", + "raw_liquid": "{% form 'customer_login', return_to: routes.root_url %}\n <!-- form content -->\n{% endform %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "HTML attributes", + "description": "You can specify [HTML attributes](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/iframe#attributes) by adding a parameter that matches the attribute name with `data-` prepended, and the desired value.\n", + "syntax": "{% form 'form_type', attribute: string %}\n content\n{% endform %}\n", + "path": "/products/health-potion", + "raw_liquid": "{% form \"product\", product, id: 'custom-id', class: 'custom-class', data-example: '100' %}\n <!-- form content -->\n{% endform %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "theme", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Specify which [layout](/themes/architecture/layouts) to use.", + "name": "layout", + "syntax": "{% layout name %}", + "syntax_keywords": [ + { + "keyword": "name", + "description": "The name of the layout file you want to use, wrapped in quotes, or `none` for no layout." + } + ], + "examples": [ + { + "name": "", + "description": "By default, the `theme.liquid` layout is used. The `layout` tag allows you to specify an alternate layout, or use no layout.\n\n```liquid\n{% layout 'full-width' %}\n{% layout none %}\n```\n", + "syntax": "", + "path": "", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "variable", + "deprecated": false, + "deprecation_reason": "", + "description": "You can create variables of any [basic type](/docs/api/liquid/basics#types), [object](/docs/api/liquid/objects), or object property.", + "parameters": [ + + ], + "summary": "Creates a new variable.", + "name": "assign", + "syntax": "{% assign variable_name = value %}", + "syntax_keywords": [ + { + "keyword": "variable_name", + "description": "The name of the variable being created." + }, + { + "keyword": "value", + "description": "The value you want to assign to the variable." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{%- assign product_title = product.title | upcase -%}\n\n{{ product_title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Stops a [`for` loop](/docs/api/liquid/tags/for) from iterating.", + "name": "break", + "syntax": "{% break %}", + "syntax_keywords": [ + + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for i in (1..5) -%}\n {%- if i == 4 -%}\n {% break %}\n {%- else -%}\n {{ i }}\n {%- endif -%}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "variable", + "deprecated": false, + "deprecation_reason": "", + "description": "You can create complex strings with Liquid logic and variables.", + "parameters": [ + + ], + "summary": "Creates a new variable with a string value.", + "name": "capture", + "syntax": "{% capture variable %}\n value\n{% endcapture %}", + "syntax_keywords": [ + { + "keyword": "variable", + "description": "The name of the variable being created." + }, + { + "keyword": "value", + "description": "The value you want to assign to the variable." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{%- assign up_title = product.title | upcase -%}\n{%- assign down_title = product.title | downcase -%}\n{%- assign show_up_title = true -%}\n\n{%- capture title -%}\n {% if show_up_title -%}\n Upcase title: {{ up_title }}\n {%- else -%}\n Downcase title: {{ down_title }}\n {%- endif %}\n{%- endcapture %}\n\n{{ title }}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "conditional", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Renders a specific expression depending on the value of a specific variable.", + "name": "case", + "syntax": "{% case variable %}\n {% when first_value %}\n first_expression\n {% when second_value %}\n second_expression\n {% else %}\n third_expression\n{% endcase %}", + "syntax_keywords": [ + { + "keyword": "variable", + "description": "The name of the variable you want to base your case statement on." + }, + { + "keyword": "first_value", + "description": "A specific value to check for." + }, + { + "keyword": "second_value", + "description": "A specific value to check for." + }, + { + "keyword": "first_expression", + "description": "An expression to be rendered when the variable's value matches `first_value`." + }, + { + "keyword": "second_expression", + "description": "An expression to be rendered when the variable's value matches `second_value`." + }, + { + "keyword": "third_expression", + "description": "An expression to be rendered when the variable's value has no match." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% case product.type %}\n {% when 'Health' %}\n This is a health potion.\n {% when 'Love' %}\n This is a love potion.\n {% else %}\n This is a potion.\n{% endcase %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Multiple values", + "description": "A `when` tag can accept multiple values. When multiple values are provided, the expression is returned when the variable matches any of the values inside of the tag.\nProvide the values as a comma-separated list, or separate them using an `or` operator.\n", + "syntax": "{% case variable %}\n {% when first_value or second_value or third_value %}\n first_expression\n {% when fourth_value, fifth_value, sixth_value %}\n second_expression\n {% else %}\n third_expression\n{% endcase %}\n", + "path": "/products/health-potion", + "raw_liquid": "{% case product.tags %}\n {% when 'Love' or 'Luck' %}\n This is a love or luck potion.\n {% when 'Strength','Health' %}\n This is a strength or health potion.\n {% else %}\n This is a potion.\n{% endcase %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "syntax", + "deprecated": false, + "deprecation_reason": "", + "description": "Any text inside `comment` tags won't be output, and any Liquid code will be parsed, but not executed.", + "parameters": [ + + ], + "summary": "Prevents an expression from being rendered or output.", + "name": "comment", + "syntax": "{% comment %}\n content\n{% endcomment %}", + "syntax_keywords": [ + { + "keyword": "content", + "description": "The content of the comment." + } + ], + "examples": [ + { + "name": "Inline comments", + "description": "Inline comments prevent an expression inside of a tag `{% %}` from being rendered or output.\n\nYou can use inline comment tags to annotate your code, or to temporarily prevent logic in your code from executing.\n\nYou can create multi-line inline comments. However, each line in the tag must begin with a `#`, or a syntax error will occur.\n", + "syntax": "{% # content %}", + "path": "/", + "raw_liquid": "{% # this is a comment %}\n\n{% # for i in (1..3) -%}\n {{ i }}\n{% # endfor %}\n\n{%\n ###############################\n # This is a comment\n # across multiple lines\n ###############################\n%}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Inline comments inside `liquid` tags", + "description": "You can use inline comment tags inside [`liquid` tags](/docs/api/liquid/tags/liquid). The tag must be used for each line that you want to comment.\n", + "syntax": "", + "path": "/", + "raw_liquid": "{% liquid\n # this is a comment\n assign topic = 'Learning about comments!'\n echo topic\n%}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Causes a [`for` loop](/docs/api/liquid/tags/for) to skip to the next iteration.", + "name": "continue", + "syntax": "{% continue %}", + "syntax_keywords": [ + + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for i in (1..5) -%}\n {%- if i == 4 -%}\n {% continue %}\n {%- else -%}\n {{ i }}\n {%- endif -%}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "The `cycle` tag must be used inside a `for` loop.\n\n> Tip:\n> Use the `cycle` tag to output text in a predictable pattern. For example, to apply odd/even classes to rows in a table.", + "parameters": [ + + ], + "summary": "Loops through a group of strings and outputs them one at a time for each iteration of a [`for` loop](/docs/api/liquid/tags/for).", + "name": "cycle", + "syntax": "{% cycle string, string, ... %}", + "syntax_keywords": [ + + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% for i in (1..4) -%}\n {% cycle 'one', 'two', 'three' %}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Create unique cycle groups", + "description": "If you include multiple `cycle` tags with the same parameters, in the same template, then each set of tags is treated as the same group. This means that it's possible for a `cycle` tag to output any of the provided strings, instead of always starting at the first string.\nTo account for this, you can specify a group name for each `cycle` tag.\n", + "syntax": "{% cycle string: string, string, ... %}", + "path": "/", + "raw_liquid": "<!-- Iteration 1 -->\n{% for i in (1..4) -%}\n {% cycle 'one', 'two', 'three' %}\n{%- endfor %}\n\n<!-- Iteration 2 -->\n{% for i in (1..4) -%}\n {% cycle 'one', 'two', 'three' %}\n{%- endfor %}\n\n<!-- Iteration 3 -->\n{% for i in (1..4) -%}\n {% cycle 'group_1': 'one', 'two', 'three' %}\n{%- endfor %}\n\n<!-- Iteration 4 -->\n{% for i in (1..4) -%}\n {% cycle 'group_2': 'one', 'two', 'three' %}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "variable", + "deprecated": false, + "deprecation_reason": "", + "description": "Variables that are declared with `decrement` are unique to the [layout](/themes/architecture/layouts), [template](/themes/architecture/templates),\nor [section](/themes/architecture/sections) file that they're created in. However, the variable is shared across\n[snippets](/themes/architecture#snippets) included in the file.\n\nSimilarly, variables that are created with `decrement` are independent from those created with [`assign`](/docs/api/liquid/tags/assign)\nand [`capture`](/docs/api/liquid/tags/capture). However, `decrement` and [`increment`](/docs/api/liquid/tags/increment) share\nvariables.", + "parameters": [ + + ], + "summary": "Creates a new variable, with a default value of -1, that's decreased by 1 with each subsequent call.", + "name": "decrement", + "syntax": "{% decrement variable_name %}", + "syntax_keywords": [ + { + "keyword": "variable_name", + "description": "The name of the variable being decremented." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% decrement variable %}\n{% decrement variable %}\n{% decrement variable %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "syntax", + "deprecated": false, + "deprecation_reason": "", + "description": "Using the `echo` tag is the same as wrapping an expression in curly brackets (`{{` and `}}`). However, unlike the curly\nbracket method, you can use the `echo` tag inside [`liquid` tags](/docs/api/liquid/tags/liquid).\n\n> Tip:\n> You can use [filters](/docs/api/liquid/filters) on expressions inside `echo` tags.", + "parameters": [ + + ], + "summary": "Outputs an expression.", + "name": "echo", + "syntax": "{% liquid\n echo expression\n%}", + "syntax_keywords": [ + { + "keyword": "expression", + "description": "The expression to be output." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% echo product.title %}\n\n{% liquid\n echo product.price | money\n%}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "You can do a maximum of 50 iterations with a `for` loop. If you need to iterate over more than 50 items, then use the\n[`paginate` tag](/docs/api/liquid/tags/paginate) to split the items over multiple pages.\n\n> Tip:\n> Every `for` loop has an associated [`forloop` object](/docs/api/liquid/objects/forloop) with information about the loop.", + "parameters": [ + { + "description": "The number of iterations to perform.", + "name": "limit", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The 1-based index to start iterating at.", + "name": "offset", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "A custom numeric range to iterate over.", + "name": "range", + "required": false, + "types": [ + "untyped" + ] + }, + { + "description": "Iterate in reverse order.", + "name": "reversed", + "required": false, + "types": [ + "untyped" + ] + } + ], + "summary": "Renders an expression for every item in an array.", + "name": "for", + "syntax": "{% for variable in array %}\n expression\n{% endfor %}", + "syntax_keywords": [ + { + "keyword": "variable", + "description": "The current item in the array." + }, + { + "keyword": "array", + "description": "The array to iterate over." + }, + { + "keyword": "expression", + "description": "The expression to render for each iteration." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "{% for product in collection.products -%}\n {{ product.title }}\n{%- endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "limit", + "description": "You can limit the number of iterations using the `limit` parameter.", + "syntax": "{% for variable in array limit: number %}\n expression\n{% endfor %}\n", + "path": "/collections/sale-potions", + "raw_liquid": "{% for product in collection.products limit: 2 -%}\n {{ product.title }}\n{%- endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "offset", + "description": "You can specify a 1-based index to start iterating at using the `offset` parameter.", + "syntax": "{% for variable in array offset: number %}\n expression\n{% endfor %}\n", + "path": "/collections/sale-potions", + "raw_liquid": "{% for product in collection.products offset: 2 -%}\n {{ product.title }}\n{%- endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "range", + "description": "Instead of iterating over specific items in an array, you can specify a numeric range to iterate over.\n\n> Note:\n> You can define the range using both literal and variable values.\n", + "syntax": "{% for variable in (number..number) %}\n expression\n{% endfor %}\n", + "path": "/collections/all", + "raw_liquid": "{% for i in (1..3) -%}\n {{ i }}\n{%- endfor %}\n\n{%- assign lower_limit = 2 -%}\n{%- assign upper_limit = 4 -%}\n\n{% for i in (lower_limit..upper_limit) -%}\n {{ i }}\n{%- endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "reversed", + "description": "You can iterate in reverse order using the `reversed` parameter.", + "syntax": "{% for variable in array reversed %}\n expression\n{% endfor %}\n", + "path": "/collections/sale-potions", + "raw_liquid": "{% for product in collection.products reversed -%}\n {{ product.title }}\n{%- endfor %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "conditional", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Renders an expression if a specific condition is `true`.", + "name": "if", + "syntax": "{% if condition %}\n expression\n{% endif %}", + "syntax_keywords": [ + { + "keyword": "condition", + "description": "The condition to evaluate." + }, + { + "keyword": "expression", + "description": "The expression to render if the condition is met." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/glacier-ice", + "raw_liquid": "{% if product.compare_at_price > product.price %}\n This product is on sale!\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "elsif", + "description": "You can use the `elsif` tag to check for multiple conditions.", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% if product.type == 'Love' %}\n This is a love potion!\n{% elsif product.type == 'Health' %}\n This is a health potion!\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "theme", + "deprecated": true, + "deprecation_reason": "Deprecated because the way that variables are handled reduces performance and makes code harder to both read and maintain.\n\nThe `include` tag has been replaced by [`render`](/docs/api/liquid/tags/render).", + "description": "Inside the snippet, you can access and alter variables that are [created](/docs/api/liquid/tags/variable-tags) outside of the\nsnippet.", + "parameters": [ + + ], + "summary": "Renders a [snippet](/themes/architecture#snippets).", + "name": "include", + "syntax": "{% include 'filename' %}", + "syntax_keywords": [ + { + "keyword": "filename", + "description": "The name of the snippet to render, without the `.liquid` extension." + } + ], + "examples": [ + + ] + }, + { + "category": "variable", + "deprecated": false, + "deprecation_reason": "", + "description": "Variables that are declared with `increment` are unique to the [layout](/themes/architecture/layouts), [template](/themes/architecture/templates),\nor [section](/themes/architecture/sections) file that they're created in. However, the variable is shared across\n[snippets](/themes/architecture#snippets) included in the file.\n\nSimilarly, variables that are created with `increment` are independent from those created with [`assign`](/docs/api/liquid/tags/assign)\nand [`capture`](/docs/api/liquid/tags/capture). However, `increment` and [`decrement`](/docs/api/liquid/tags/decrement) share\nvariables.", + "parameters": [ + + ], + "summary": "Creates a new variable, with a default value of 0, that's increased by 1 with each subsequent call.", + "name": "increment", + "syntax": "{% increment variable_name %}", + "syntax_keywords": [ + { + "keyword": "variable_name", + "description": "The name of the variable being incremented." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% increment variable %}\n{% increment variable %}\n{% increment variable %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "syntax", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Outputs any Liquid code as text instead of rendering it.", + "name": "raw", + "syntax": "{% raw %}\n expression\n{% endraw %}", + "syntax_keywords": [ + { + "keyword": "expression", + "description": "The expression to be output without being rendered." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% raw %}\n{{ 2 | plus: 2 }} equals 4.\n{% endraw %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "theme", + "deprecated": false, + "deprecation_reason": "", + "description": "Inside snippets and app blocks, you can't directly access variables that are [created](/docs/api/liquid/tags/variable-tags) outside\nof the snippet or app block. However, you can [specify variables as parameters](/docs/api/liquid/tags/render#render-passing-variables-to-a-snippet)\nto pass outside variables to snippets.\n\nWhile you can't directly access created variables, you can access global objects, as well as any objects that are\ndirectly accessible outside the snippet or app block. For example, a snippet or app block inside the [product template](/themes/architecture/templates/product)\ncan access the [`product` object](/docs/api/liquid/objects/product), and a snippet or app block inside a [section](/themes/architecture/sections)\ncan access the [`section` object](/docs/api/liquid/objects/section).\n\nOutside a snippet or app block, you can't access variables created inside the snippet or app block.\n\n> Note:\n> When you render a snippet using the `render` tag, you can't use the [`include` tag](/docs/api/liquid/tags/include)\n> inside the snippet.", + "parameters": [ + + ], + "summary": "Renders a [snippet](/themes/architecture#snippets) or [app block](/themes/architecture/sections/section-schema#render-app-blocks).", + "name": "render", + "syntax": "{% render 'filename' %}", + "syntax_keywords": [ + { + "keyword": "filename", + "description": "The name of the snippet to render, without the `.liquid` extension." + } + ], + "examples": [ + { + "name": "for", + "description": "You can render a snippet for every item in an array using the `for` parameter. You can also supply an optional `as` parameter to be able to reference the current item in the iteration inside the snippet.\nAdditionally, you can access a [`forloop` object](/docs/api/liquid/objects/forloop) for the loop inside the snippet.\n", + "syntax": "{% render 'filename' for array as item %}", + "path": "/", + "raw_liquid": "", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Passing variables to a snippet", + "description": "Variables that have been [created](/docs/api/liquid/tags/variable-tags) outside of a snippet can be passed to a snippet as parameters on the `render` tag.\n\n> Note:\n> Any changes that are made to a passed variable apply only within the snippet.\n", + "syntax": "{% render 'filename', variable: value %}", + "path": "/", + "raw_liquid": "", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "with", + "description": "You can pass a single object to a snippet using the `with` parameter. You can also supply an optional `as` parameter to specify a custom name to reference the object inside the snippet.\n", + "syntax": "{% render 'filename' with object as name %}", + "path": "/", + "raw_liquid": "", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "The `tablerow` tag must be wrapped in HTML `<table>` and `</table>` tags.\n\n> Tip:\n> Every `tablerow` loop has an associated [`tablerowloop` object](/docs/api/liquid/objects/tablerowloop) with information about the loop.", + "parameters": [ + { + "description": "The number of columns that the table should have.", + "name": "cols", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The number of iterations to perform.", + "name": "limit", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "The 1-based index to start iterating at.", + "name": "offset", + "required": false, + "types": [ + "number" + ] + }, + { + "description": "A custom numeric range to iterate over.", + "name": "range", + "required": false, + "types": [ + "untyped" + ] + } + ], + "summary": "Generates HTML table rows for every item in an array.", + "name": "tablerow", + "syntax": "{% tablerow variable in array %}\n expression\n{% endtablerow %}", + "syntax_keywords": [ + { + "keyword": "variable", + "description": "The current item in the array." + }, + { + "keyword": "array", + "description": "The array to iterate over." + }, + { + "keyword": "expression", + "description": "The expression to render." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/sale-potions", + "raw_liquid": "<table>\n {% tablerow product in collection.products %}\n {{ product.title }}\n {% endtablerow %}\n</table>", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "cols", + "description": "You can define how many columns the table should have using the `cols` parameter.", + "syntax": "{% tablerow variable in array cols: number %}\n expression\n{% endtablerow %}\n", + "path": "/collections/sale-potions", + "raw_liquid": "<table>\n {% tablerow product in collection.products cols: 2 %}\n {{ product.title }}\n {% endtablerow %}\n</table>", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "limit", + "description": "You can limit the number of iterations using the `limit` parameter.", + "syntax": "{% tablerow variable in array limit: number %}\n expression\n{% endtablerow %}\n", + "path": "/collections/sale-potions", + "raw_liquid": "<table>\n {% tablerow product in collection.products limit: 2 %}\n {{ product.title }}\n {% endtablerow %}\n</table>", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "offset", + "description": "You can specify a 1-based index to start iterating at using the `offset` parameter.", + "syntax": "{% tablerow variable in array offset: number %}\n expression\n{% endtablerow %}\n", + "path": "/collections/sale-potions", + "raw_liquid": "<table>\n {% tablerow product in collection.products offset: 2 %}\n {{ product.title }}\n {% endtablerow %}\n</table>", + "parameter": true, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "range", + "description": "Instead of iterating over specific items in an array, you can specify a numeric range to iterate over.\n\n> Note:\n> You can define the range using both literal and variable values.\n", + "syntax": "{% tablerow variable in (number..number) %}\n expression\n{% endtablerow %}\n", + "path": "/", + "raw_liquid": "<table>\n {% tablerow i in (1..3) %}\n {{ i }}\n {% endtablerow %}\n</table>\n\n{%- assign lower_limit = 2 -%}\n{%- assign upper_limit = 4 -%}\n\n<table>\n {% tablerow i in (lower_limit..upper_limit) %}\n {{ i }}\n {% endtablerow %}\n</table>", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "conditional", + "deprecated": false, + "deprecation_reason": "", + "description": "> Tip:\n> Similar to the [`if` tag](/docs/api/liquid/tags/if), you can use `elsif` to add more conditions to an `unless` tag.", + "parameters": [ + + ], + "summary": "Renders an expression unless a specific condition is `true`.", + "name": "unless", + "syntax": "{% unless condition %}\n expression\n{% endunless %}", + "syntax_keywords": [ + { + "keyword": "condition", + "description": "The condition to evaluate." + }, + { + "keyword": "expression", + "description": "The expression to render unless the condition is met." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% unless product.has_only_default_variant %}\n // Variant selection functionality\n{% endunless %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "Because [`for` loops](/docs/api/liquid/tags/for) are limited to 50 iterations per page, you need to use the `paginate` tag to\niterate over an array that has more than 50 items. The following arrays can be paginated:\n\n- [`all_products`](/docs/api/liquid/objects/all_products)\n- [`article.comments`](/docs/api/liquid/objects/article#article-comments)\n- [`blog.articles`](/docs/api/liquid/objects/blog#blog-articles)\n- [`collections`](/docs/api/liquid/objects/collections)\n- [`collection.products`](/docs/api/liquid/objects/collection#collection-products)\n- [`customer.addresses`](/docs/api/liquid/objects/customer#customer-addresses)\n- [`customer.orders`](/docs/api/liquid/objects/customer#customer-orders)\n- [`pages`](/docs/api/liquid/objects/pages)\n- [`search.results`](/docs/api/liquid/objects/search#search-results)\n- [`collection_list` settings](/themes/architecture/settings/input-settings#collection_list)\n- [`product_list` settings](/themes/architecture/settings/input-settings#product_list)\n\nWithin the `paginate` tag, you have access to the [`paginate` object](/docs/api/liquid/objects/paginate). You can use this\nobject, or the [`default_pagination` filter](/docs/api/liquid/filters/default_pagination), to build page navigation.", + "parameters": [ + { + "description": "The number of pages to display in the pagination.", + "name": "window_size", + "required": false, + "types": [ + "string" + ] + } + ], + "summary": "Splits an array's items across multiple pages.", + "name": "paginate", + "syntax": "{% paginate array by page_size %}\n {% for item in array %}\n forloop_content\n {% endfor %}\n{% endpaginate %}", + "syntax_keywords": [ + { + "keyword": "array", + "description": "The array to be looped over." + }, + { + "keyword": "page_size", + "description": "The number of array items to include per page, between 1 and 50." + }, + { + "keyword": "item", + "description": "An item in the array being looped." + }, + { + "keyword": "forloop_content", + "description": "Content for each loop iteration." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/all", + "raw_liquid": "{% paginate collection.products by 5 %}\n {% for product in collection.products -%}\n {{ product.title }}\n {%- endfor %}\n\n {{- paginate | default_pagination }}\n{% endpaginate %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "Paginating setting arrays", + "description": "To allow the pagination of `product_list` and `collection_list` settings to operate independently from other paginated lists on a page, these lists use a pagination query parameter with a unique key. The key is automatically assigned by the `paginate` tag, and you don't need to reference the key in your code. However, you can access the key using [`paginate.page_param`](/docs/api/liquid/objects/paginate#paginate-page_param).\n\n> Tip:\n> To paginate two arrays independently without refreshing the entire page, you can use the [Section Rendering API](/api/section-rendering).\n", + "syntax": "", + "path": "/", + "raw_liquid": "", + "parameter": false, + "display_type": "text", + "show_data_tab": true + }, + { + "name": "window_size", + "description": "Set the window size of the pagination. The window size is the number of pages that should be visible in the pagination navigation.\n", + "syntax": "{% paginate collection.products by 3, window_size: 1 %}", + "path": "/collections/all", + "raw_liquid": "{% paginate collection.products by 3, window_size: 1 %}\n {% for product in collection.products -%}\n {{ product.title }}\n {%- endfor %}\n\n {{- paginate | default_pagination }}\n{% endpaginate %}", + "parameter": true, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "theme", + "deprecated": false, + "deprecation_reason": "", + "description": "You need to use these tags only if your section or app block is meant to be installed on multiple themes or stores. Otherwise, you should include the JavaScript that your section needs in your theme's [`assets`](/themes/architecture#assets) directory. Each section or app block can have only one `{% javascript %}` tag.\n\nTo learn more about how section-specific JavaScript is loaded and run, refer to the documentation for [sections](/themes/architecture/sections/section-assets#javascript).\n> Caution:\n> Liquid isn't rendered inside of `{% javascript %}` tags. Including Liquid code can cause syntax errors.", + "parameters": [ + + ], + "summary": "JavaScript code included in a [section](/themes/architecture/sections) file.", + "name": "javascript", + "syntax": "{% javascript %}\n javascript_code\n{% endjavascript %}", + "syntax_keywords": [ + { + "keyword": "javascript_code", + "description": "The JavaScript code for the section." + } + ], + "examples": [ + + ] + }, + { + "category": "theme", + "deprecated": false, + "deprecation_reason": "", + "description": "Rendering a section with the `section` tag renders a section statically. To learn more about sections and how to use\nthem in your theme, refer to [Render a section](/themes/architecture/sections#render-a-section).", + "parameters": [ + + ], + "summary": "Renders a [section](/themes/architecture/sections).", + "name": "section", + "syntax": "{% section 'name' %}", + "syntax_keywords": [ + { + "keyword": "name", + "description": "The name of the section file you want to render." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% section 'header' %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "theme", + "deprecated": false, + "deprecation_reason": "", + "description": "You need to use these tags only if your section or app block is meant to be installed on multiple themes or stores. Otherwise, you should include the CSS styles that your section needs in your theme's [`assets`](/themes/architecture#assets) directory. Each section or app block can have only one `{% stylesheet %}` tag.\n\nTo learn more about how section-specific CSS is loaded and run, refer to the documentation for [sections](/themes/architecture/sections/section-assets#stylesheet).\n> Caution:\n> Liquid isn't rendered inside of `{% stylesheet %}` tags. Including Liquid code can cause syntax errors.", + "parameters": [ + + ], + "summary": "CSS styles included in a [section](/themes/architecture/sections) file.", + "name": "stylesheet", + "syntax": "{% stylesheet %}\n css_styles\n{% endstylesheet %}", + "syntax_keywords": [ + { + "keyword": "css_styles", + "description": "The CSS styles for the section." + } + ], + "examples": [ + + ] + }, + { + "category": "theme", + "deprecated": false, + "deprecation_reason": "", + "description": "Use this tag to render section groups as part of the theme's [layout](/themes/architecture/layouts) content. Place the `sections` tag where you want to render it in the layout.\n\nTo learn more about section groups and how to use them in your theme, refer to [Section groups](/themes/architecture/section-groups#usage).", + "parameters": [ + + ], + "summary": "Renders a [section group](/themes/architecture/section-groups).", + "name": "sections", + "syntax": "{% sections 'name' %}", + "syntax_keywords": [ + { + "keyword": "name", + "description": "The name of the section group file you want to render." + } + ], + "examples": [ + + ] + }, + { + "category": "html", + "deprecated": false, + "deprecation_reason": "", + "description": "> Note:\n> If you reference [color settings](/themes/architecture/settings/input-settings#color) inside `style` tags, then\n> the associated CSS rules will update as the setting is changed in the theme editor, without a page refresh.", + "parameters": [ + + ], + "summary": "Generates an HTML `<style>` tag with an attribute of `data-shopify`.", + "name": "style", + "syntax": "{% style %}\n CSS_rules\n{% endstyle %}", + "syntax_keywords": [ + { + "keyword": "CSS_rules", + "description": "The desired CSS rules for the `<style>` tag." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/", + "raw_liquid": "{% style %}\n .h1 {\n color: {{ settings.colors_accent_1 }};\n }\n{% endstyle %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "conditional", + "deprecated": false, + "deprecation_reason": "", + "description": "You can use the `else` tag with the following tags:\n\n- [`case`](/docs/api/liquid/tags/case)\n- [`if`](/docs/api/liquid/tags/if)\n- [`unless`](/docs/api/liquid/tags/unless)", + "parameters": [ + + ], + "summary": "Allows you to specify a default expression to execute when no other condition is met.", + "name": "else", + "syntax": "{% else %}\n expression", + "syntax_keywords": [ + { + "keyword": "expression", + "description": "The expression to render if no other condition is met." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% if product.available %}\n This product is available!\n{% else %}\n This product is sold out!\n{% endif %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "iteration", + "deprecated": false, + "deprecation_reason": "", + "description": "", + "parameters": [ + + ], + "summary": "Allows you to specify a default expression to execute when a [`for` loop](/docs/api/liquid/tags/for) has zero length.", + "name": "else", + "syntax": "{% for variable in array %}\n first_expression\n{% else %}\n second_expression\n{% endfor %}", + "syntax_keywords": [ + { + "keyword": "variable", + "description": "The current item in the array." + }, + { + "keyword": "array", + "description": "The array to iterate over." + }, + { + "keyword": "first_expression", + "description": "The expression to render for each iteration." + }, + { + "keyword": "second_expression", + "description": "The expression to render if the loop has zero length." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/collections/empty", + "raw_liquid": "{% for product in collection.products %}\n {{ product.title }}<br>\n{% else %}\n There are no products in this collection.\n{% endfor %}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + }, + { + "category": "syntax", + "deprecated": false, + "deprecation_reason": "", + "description": "Because the tags don't have delimeters, each tag needs to be on its own line.\n\n> Tip:\n> Use the [`echo` tag](/docs/api/liquid/tags/echo) to output an expression inside `liquid` tags.", + "parameters": [ + + ], + "summary": "Allows you to have a block of Liquid without delimeters on each tag.", + "name": "liquid", + "syntax": "{% liquid\n expression\n%}", + "syntax_keywords": [ + { + "keyword": "expression", + "description": "The expression to be rendered inside the `liquid` tag." + } + ], + "examples": [ + { + "name": "", + "description": "", + "syntax": "", + "path": "/products/health-potion", + "raw_liquid": "{% liquid\n # Show a message that's customized to the product type\n\n assign product_type = product.type | downcase\n assign message = ''\n\n case product_type\n when 'health'\n assign message = 'This is a health potion!'\n when 'love'\n assign message = 'This is a love potion!'\n else\n assign message = 'This is a potion!'\n endcase\n\n echo message\n%}", + "parameter": false, + "display_type": "text", + "show_data_tab": true + } + ] + } +] \ No newline at end of file diff --git a/dev.yml b/dev.yml index c19cff18..a29bc3e0 100644 --- a/dev.yml +++ b/dev.yml @@ -1,17 +1,17 @@ -name: theme-check +name: platformos-check type: ruby up: - - ruby: "2.7" + - ruby: "3.2.2" - bundler commands: check: - desc: 'Check a theme' + desc: 'Check an pOS app ' syntax: argument: file - run: bundle exec theme-check + run: bundle exec platformos-check test: syntax: argument: file @@ -22,4 +22,4 @@ commands: autocorrect: run: bundle exec rubocop --auto-correct language-server: - run: bundle exec theme-check-language-server + run: bundle exec platformos-check-language-server diff --git a/docs/api/html_check.md b/docs/api/html_check.md index b723a7fe..4b6108fa 100644 --- a/docs/api/html_check.md +++ b/docs/api/html_check.md @@ -8,7 +8,7 @@ The HTML in Liquid files is parsed using the Nokogiri, by consequence you will g ```ruby -module ThemeCheck +module PlatformosCheck class MyCheckName < HtmlCheck category :html, # A check can belong to multiple categories. Valid ones: @@ -18,11 +18,11 @@ module ThemeCheck def on_document(node) # Called with the root node of all theme files node.value # is an instance of Nokogiri::XML::Node - node.theme_file # is the html_file being analyzed, See lib/theme_check/theme_file.rb. + node.theme_file # is the html_file being analyzed, See lib/platformos_check/theme_file.rb. node.parent # is the parent node. node.children # are the children nodes. - # See lib/theme_check/html_node.rb for more helper methods - theme # Gives you access to all the theme files in the theme. See lib/theme_check/theme.rb. + # See lib/platformos_check/html_node.rb for more helper methods + theme # Gives you access to all the theme files in the theme. See lib/platformos_check/theme.rb. end def on_img(node) diff --git a/docs/api/json_check.md b/docs/api/json_check.md index 6900cdd3..b0d59a9b 100644 --- a/docs/api/json_check.md +++ b/docs/api/json_check.md @@ -3,7 +3,7 @@ For checking the content of `.json` files. ```ruby -module ThemeCheck +module PlatformosCheck class MyCheckName < JsonCheck category :json, # A check can belong to multiple categories. Valid ones: @@ -11,7 +11,7 @@ module ThemeCheck severity :suggestion # :error or :style def on_file(file) - file # an instance of `ThemeCheck::JsonFile` + file # an instance of `PlatformosCheck::JsonFile` file.content # the parsed JSON, as a Ruby object, usually a Hash end end diff --git a/docs/api/liquid_check.md b/docs/api/liquid_check.md index f8c23608..b22ab4ff 100644 --- a/docs/api/liquid_check.md +++ b/docs/api/liquid_check.md @@ -8,7 +8,7 @@ Liquid files are parsed using the Liquid parser, by consequence you will get Liq ```ruby -module ThemeCheck +module PlatformosCheck class MyCheckName < LiquidCheck category :liquid, # A check can belong to multiple categories. Valid ones: @@ -18,11 +18,11 @@ module ThemeCheck def on_document(node) # Called with the root node of all liquid_file node.value # is the original Liquid object for this node. See Liquid source code for details. - node.theme_file # is the liquid_file being analyzed, See lib/theme_check/liquid_file.rb. + node.theme_file # is the liquid_file being analyzed, See lib/platformos_check/liquid_file.rb. node.parent # is the parent node. node.children # are the children nodes. - # See lib/theme_check/node.rb for more helper methods - theme # Gives you access to all the theme files in the theme. See lib/theme_check/theme.rb. + # See lib/platformos_check/node.rb for more helper methods + theme # Gives you access to all the theme files in the theme. See lib/platformos_check/theme.rb. end def on_node(node) diff --git a/docs/checks/TEMPLATE.md.erb b/docs/checks/TEMPLATE.md.erb index 507bb5f9..9df134a2 100644 --- a/docs/checks/TEMPLATE.md.erb +++ b/docs/checks/TEMPLATE.md.erb @@ -1,6 +1,6 @@ # Check Title (`<%= class_name %>`) -_Version THEME_CHECK_VERSION+_ +_Version PLATFORMOS_CHECK_VERSION+_ A short description of what the check does. @@ -34,7 +34,7 @@ The following example contains the default configuration for this check: | Parameter | Description | | --- | --- | | enabled | Whether the check is enabled. | -| severity | The [severity](https://shopify.dev/themes/tools/theme-check/configuration#check-severity) of the check. | +| severity | The [severity](https://shopify.dev/themes/tools/platformos-check/configuration#check-severity) of the check. | | other_option | A description of the option. | ## Disabling this check diff --git a/docs/checks/app_block_valid_tags.md b/docs/checks/app_block_valid_tags.md index 0776a9b9..56116f18 100644 --- a/docs/checks/app_block_valid_tags.md +++ b/docs/checks/app_block_valid_tags.md @@ -37,5 +37,5 @@ This check has been introduced in 1.3.0 - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/app_block_valid_tags.rb +[codesource]: /lib/platformos_check/checks/app_block_valid_tags.rb [docsource]: /docs/checks/app_block_valid_tags.md diff --git a/docs/checks/asset_preload.md b/docs/checks/asset_preload.md index 58220a2c..10a0782d 100644 --- a/docs/checks/asset_preload.md +++ b/docs/checks/asset_preload.md @@ -43,7 +43,7 @@ AssetPreload: | Parameter | Description | | --- | --- | | enabled | Whether the check is enabled. | -| severity | The [severity](https://shopify.dev/themes/tools/theme-check/configuration#check-severity) of the check. | +| severity | The [severity](https://shopify.dev/themes/tools/platformos-check/configuration#check-severity) of the check. | ## Disabling this check @@ -55,6 +55,6 @@ to move them to Shopify because they change frequently or are dynamically genera - [Rule source][codesource] - [Documentation source][docsource] -[codesource]: /lib/theme_check/checks/asset_preload.rb +[codesource]: /lib/platformos_check/checks/asset_preload.rb [docsource]: /docs/checks/asset_preload.md [preload_key_resources]: https://shopify.dev/themes/best-practices/performance#use-resource-hints-to-preload-key-resources diff --git a/docs/checks/asset_size_app_block_css.md b/docs/checks/asset_size_app_block_css.md index e7d0cbcd..185421de 100644 --- a/docs/checks/asset_size_app_block_css.md +++ b/docs/checks/asset_size_app_block_css.md @@ -48,5 +48,5 @@ This check has been introduced in 1.1.0 - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/asset_size_app_block_css.rb +[codesource]: /lib/platformos_check/checks/asset_size_app_block_css.rb [docsource]: /docs/checks/asset_size_app_block_css.md diff --git a/docs/checks/asset_size_app_block_javascript.md b/docs/checks/asset_size_app_block_javascript.md index aebc593f..0fb70c19 100644 --- a/docs/checks/asset_size_app_block_javascript.md +++ b/docs/checks/asset_size_app_block_javascript.md @@ -53,5 +53,5 @@ This check has been introduced in 1.1.0 - [Documentation Source][docsource] [ioip]: https://addyosmani.com/blog/import-on-interaction/ -[codesource]: /lib/theme_check/checks/asset_size_app_block_javascript.rb +[codesource]: /lib/platformos_check/checks/asset_size_app_block_javascript.rb [docsource]: /docs/checks/asset_size_app_block_javascript.md diff --git a/docs/checks/asset_size_css.md b/docs/checks/asset_size_css.md index fa772aae..f6692abd 100644 --- a/docs/checks/asset_size_css.md +++ b/docs/checks/asset_size_css.md @@ -48,5 +48,5 @@ This check has been introduced in Theme Check 0.6.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/asset_size_css.rb +[codesource]: /lib/platformos_check/checks/asset_size_css.rb [docsource]: /docs/checks/asset_size_css.md diff --git a/docs/checks/asset_size_css_stylesheet_tag.md b/docs/checks/asset_size_css_stylesheet_tag.md index b81d26d4..c207dbff 100644 --- a/docs/checks/asset_size_css_stylesheet_tag.md +++ b/docs/checks/asset_size_css_stylesheet_tag.md @@ -46,5 +46,5 @@ This check has been introduced in Theme Check 1.0.0 - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/asset_size_css_stylesheet_tag.rb +[codesource]: /lib/platformos_check/checks/asset_size_css_stylesheet_tag.rb [docsource]: /docs/checks/asset_size_css_stylesheet_tag.md diff --git a/docs/checks/asset_size_javascript.md b/docs/checks/asset_size_javascript.md index ffcee239..9ca38a3a 100644 --- a/docs/checks/asset_size_javascript.md +++ b/docs/checks/asset_size_javascript.md @@ -57,9 +57,9 @@ This includes theme and remote scripts. When you can't do anything about it, it is preferable to disable this rule using the comment syntax: ``` -{% # theme-check-disable AssetSizeJavaScript %} +{% # platformos-check-disable AssetSizeJavaScript %} -{% # theme-check-enable AssetSizeJavaScript %} +{% # platformos-check-enable AssetSizeJavaScript %} ``` This makes disabling the rule an explicit affair and shows that the code is smelly. @@ -75,5 +75,5 @@ This check has been introduced in Theme Check 0.5.0. - [Documentation Source][docsource] [ioip]: https://addyosmani.com/blog/import-on-interaction/ -[codesource]: /lib/theme_check/checks/asset_size_javascript.rb +[codesource]: /lib/platformos_check/checks/asset_size_javascript.rb [docsource]: /docs/checks/asset_size_javascript.md diff --git a/docs/checks/asset_url_filters.md b/docs/checks/asset_url_filters.md index 16c66163..6b9cdb63 100644 --- a/docs/checks/asset_url_filters.md +++ b/docs/checks/asset_url_filters.md @@ -49,7 +49,7 @@ This check has been introduced in Theme Check 0.9.1. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/remote_asset_filters.rb +[codesource]: /lib/platformos_check/checks/remote_asset_filters.rb [docsource]: /docs/checks/remote_asset_filters.md [remote_asset]: /docs/checks/remote_asset.md [asset_url]: https://shopify.dev/docs/themes/liquid/reference/filters/url-filters#assert_url diff --git a/docs/checks/cdn_preconnect.md b/docs/checks/cdn_preconnect.md index 46011c50..eaabbbc4 100644 --- a/docs/checks/cdn_preconnect.md +++ b/docs/checks/cdn_preconnect.md @@ -1,6 +1,6 @@ # Check Title (`CdnPreconnect`) -_Version THEME_CHECK_VERSION+_ +_Version PLATFORMOS_CHECK_VERSION+_ The preconnect resource hint is a useful way of making sure connections to external domains are ready as soon as possible. It can improve performance by enabling the browser to start downloading critical assets right after discovering them in the HTML. @@ -39,7 +39,7 @@ CdnPreconnect: | Parameter | Description | | --- | --- | | enabled | Whether the check is enabled. | -| severity | The [severity](https://shopify.dev/themes/tools/theme-check/configuration#check-severity) of the check. | +| severity | The [severity](https://shopify.dev/themes/tools/platformos-check/configuration#check-severity) of the check. | ## Disabling this check @@ -52,5 +52,5 @@ Disabling this check isn't recommended because preconnect to Shopify's CDN is in - [Documentation source][docsource] [resourcehints]: https://performance.shopify.com/blogs/blog/introduction-to-resource-hints -[codesource]: /lib/theme_check/checks/cdn_preconnect.rb +[codesource]: /lib/platformos_check/checks/cdn_preconnect.rb [docsource]: /docs/checks/cdn_preconnect.md diff --git a/docs/checks/content_for_header_modification.md b/docs/checks/content_for_header_modification.md index 1a59b0ac..7a772c01 100644 --- a/docs/checks/content_for_header_modification.md +++ b/docs/checks/content_for_header_modification.md @@ -37,6 +37,6 @@ This check has been introduced in Theme Check 0.9.0. - [Documentation Source][docsource] - [`theme.liquid` template considerations][considerations] -[codesource]: /lib/theme_check/checks/check_class_name.rb +[codesource]: /lib/platformos_check/checks/check_class_name.rb [docsource]: /docs/checks/check_class_name.md [considerations]: https://shopify.dev/docs/themes/theme-templates/theme-liquid#template-considerations diff --git a/docs/checks/convert_include_to_render.md b/docs/checks/convert_include_to_render.md index b9718bb5..2cdf59d3 100644 --- a/docs/checks/convert_include_to_render.md +++ b/docs/checks/convert_include_to_render.md @@ -44,5 +44,5 @@ This check has been introduced in Theme Check 0.1.0. - [Documentation Source][docsource] [deprecated]: https://shopify.dev/docs/themes/liquid/reference/tags/deprecated-tags#include -[codesource]: /lib/theme_check/checks/convert_include_to_render.rb +[codesource]: /lib/platformos_check/checks/convert_include_to_render.rb [docsource]: /docs/checks/convert_include_to_render.md diff --git a/docs/checks/default_locale.md b/docs/checks/default_locale.md index 946fd02d..a6de0275 100644 --- a/docs/checks/default_locale.md +++ b/docs/checks/default_locale.md @@ -42,5 +42,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/default_locale.rb +[codesource]: /lib/platformos_check/checks/default_locale.rb [docsource]: /docs/checks/default_locale.md diff --git a/docs/checks/deprecate_bgsizes.md b/docs/checks/deprecate_bgsizes.md index 49cf46e2..3d8653dd 100644 --- a/docs/checks/deprecate_bgsizes.md +++ b/docs/checks/deprecate_bgsizes.md @@ -62,5 +62,5 @@ This check has been introduced in Theme Check 1.0.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/deprecate_bgsizes.rb +[codesource]: /lib/platformos_check/checks/deprecate_bgsizes.rb [docsource]: /docs/checks/deprecate_bgsizes.md diff --git a/docs/checks/deprecate_lazysizes.md b/docs/checks/deprecate_lazysizes.md index e18f3e2a..990b30aa 100644 --- a/docs/checks/deprecate_lazysizes.md +++ b/docs/checks/deprecate_lazysizes.md @@ -54,5 +54,5 @@ This check has been introduced in Theme Check 1.0.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/deprecate_lazysizes.rb +[codesource]: /lib/platformos_check/checks/deprecate_lazysizes.rb [docsource]: /docs/checks/deprecate_lazysizes.md diff --git a/docs/checks/deprecated_filter.md b/docs/checks/deprecated_filter.md index 297afdee..8c24216d 100644 --- a/docs/checks/deprecated_filter.md +++ b/docs/checks/deprecated_filter.md @@ -42,5 +42,5 @@ This check has been introduced in Theme Check 0.2.0. - [Documentation Source][docsource] [deprecated]: https://shopify.dev/docs/themes/liquid/reference/filters/deprecated-filters -[codesource]: /lib/theme_check/checks/deprecated_filter.rb +[codesource]: /lib/platformos_check/checks/deprecated_filter.rb [docsource]: /docs/checks/deprecated_filter.md diff --git a/docs/checks/deprecated_global_app_block_type.md b/docs/checks/deprecated_global_app_block_type.md index 39890f4c..b42b89a5 100644 --- a/docs/checks/deprecated_global_app_block_type.md +++ b/docs/checks/deprecated_global_app_block_type.md @@ -58,7 +58,7 @@ This check has been introduced in Theme Check 1.5.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/deprecated_global_app_block_type.rb +[codesource]: /lib/platformos_check/checks/deprecated_global_app_block_type.rb [docsource]: /docs/checks/deprecated_global_app_block_type.md [remote_asset]: /docs/checks/deprecated_global_app_block_type.md [support_app_blocks_in_theme_section]: https://shopify.dev/themes/migration#step-8-add-support-for-app-blocks-to-sections diff --git a/docs/checks/html_parsing_error.md b/docs/checks/html_parsing_error.md index e5cb2bff..b54773b1 100644 --- a/docs/checks/html_parsing_error.md +++ b/docs/checks/html_parsing_error.md @@ -46,5 +46,5 @@ This check has been introduced in Theme Check 0.10.2. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/html_parsing_error.rb +[codesource]: /lib/platformos_check/checks/html_parsing_error.rb [docsource]: /docs/checks/html_parsing_error.md diff --git a/docs/checks/img_lazy_loading.md b/docs/checks/img_lazy_loading.md index ec5af075..0ef3bd02 100644 --- a/docs/checks/img_lazy_loading.md +++ b/docs/checks/img_lazy_loading.md @@ -58,6 +58,6 @@ This check has been introduced in Theme Check 0.10.0. - [Documentation Source][docsource] - [MDN - Lazy loading][mdn] -[codesource]: /lib/theme_check/checks/img_lazy_loading.rb +[codesource]: /lib/platformos_check/checks/img_lazy_loading.rb [docsource]: /docs/checks/img_lazy_loading.md [mdn]: https://developer.mozilla.org/en-US/docs/Web/Performance/Lazy_loading diff --git a/docs/checks/img_width_and_height.md b/docs/checks/img_width_and_height.md index fb4be633..40d872f6 100644 --- a/docs/checks/img_width_and_height.md +++ b/docs/checks/img_width_and_height.md @@ -75,5 +75,5 @@ This check has been introduced in Theme Check 0.6.0. [codepenshift]: https://codepen.io/charlespwd/pen/YzpxPEp?editors=1100 [codepenlazy]: https://codepen.io/charlespwd/pen/abZmqXJ?editors=0111 [aspect-ratio]: https://caniuse.com/mdn-css_properties_aspect-ratio -[codesource]: /lib/theme_check/checks/img_aspect_ratio.rb +[codesource]: /lib/platformos_check/checks/img_aspect_ratio.rb [docsource]: /docs/checks/img_aspect_ratio.md diff --git a/docs/checks/liquid_tag.md b/docs/checks/liquid_tag.md index add77ce3..82fb53e9 100644 --- a/docs/checks/liquid_tag.md +++ b/docs/checks/liquid_tag.md @@ -61,5 +61,5 @@ This check has been introduced in Theme Check 0.1.0. - [Documentation Source][docsource] [liquid]: https://shopify.dev/docs/themes/liquid/reference/tags/theme-tags#liquid -[codesource]: /lib/theme_check/checks/liquid_tag.rb +[codesource]: /lib/platformos_check/checks/liquid_tag.rb [docsource]: /docs/checks/liquid_tag.md diff --git a/docs/checks/matching_schema_translations.md b/docs/checks/matching_schema_translations.md index ad157f28..db80c21e 100644 --- a/docs/checks/matching_schema_translations.md +++ b/docs/checks/matching_schema_translations.md @@ -89,5 +89,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/matching_schema_translations.rb +[codesource]: /lib/platformos_check/checks/matching_schema_translations.rb [docsource]: /docs/checks/matching_schema_translations.md diff --git a/docs/checks/matching_translations.md b/docs/checks/matching_translations.md index fa5b3502..d540b825 100644 --- a/docs/checks/matching_translations.md +++ b/docs/checks/matching_translations.md @@ -68,5 +68,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/matching_translations.rb +[codesource]: /lib/platformos_check/checks/matching_translations.rb [docsource]: /docs/checks/matching_translations.md diff --git a/docs/checks/missing_enable_comment.md b/docs/checks/missing_enable_comment.md index 4e393c69..25f5f88d 100644 --- a/docs/checks/missing_enable_comment.md +++ b/docs/checks/missing_enable_comment.md @@ -1,10 +1,10 @@ -# Prevent missing theme-check-enable comments (`MissingEnableComment`) +# Prevent missing platformos-check-enable comments (`MissingEnableComment`) -When `theme-check-disable` is used in the middle of a theme file, the corresponding `theme-check-enable` comment should also be included. +When `platformos-check-disable` is used in the middle of a theme file, the corresponding `platformos-check-enable` comment should also be included. ## Check Details -This check aims at eliminating missing `theme-check-enable` comments. +This check aims at eliminating missing `platformos-check-enable` comments. :-1: Example of **incorrect** code for this check: @@ -12,7 +12,7 @@ This check aims at eliminating missing `theme-check-enable` comments. - {% # theme-check-disable ParserBlockingJavaScript %} + {% # platformos-check-disable ParserBlockingJavaScript %} @@ -27,9 +27,9 @@ This check aims at eliminating missing `theme-check-enable` comments. - {% # theme-check-disable ParserBlockingJavaScript %} + {% # platformos-check-disable ParserBlockingJavaScript %} - {% # theme-check-enable ParserBlockingJavaScript %} + {% # platformos-check-enable ParserBlockingJavaScript %} @@ -46,5 +46,5 @@ This check has been introduced in Theme Check 0.3.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/missing_enable_comment.rb +[codesource]: /lib/platformos_check/checks/missing_enable_comment.rb [docsource]: /docs/checks/missing_enable_comment.md diff --git a/docs/checks/missing_required_template_files.md b/docs/checks/missing_required_template_files.md index 3b61c903..cf2700ee 100644 --- a/docs/checks/missing_required_template_files.md +++ b/docs/checks/missing_required_template_files.md @@ -22,5 +22,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/missing_required_template_files.rb +[codesource]: /lib/platformos_check/checks/missing_required_template_files.rb [docsource]: /docs/checks/missing_required_template_files.md diff --git a/docs/checks/missing_template.md b/docs/checks/missing_template.md index fa007389..2da0cec8 100644 --- a/docs/checks/missing_template.md +++ b/docs/checks/missing_template.md @@ -61,5 +61,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/missing_template.rb +[codesource]: /lib/platformos_check/checks/missing_template.rb [docsource]: /docs/checks/missing_template.md diff --git a/docs/checks/nested_snippet.md b/docs/checks/nested_snippet.md index 50cbf5f8..a44c0d3e 100644 --- a/docs/checks/nested_snippet.md +++ b/docs/checks/nested_snippet.md @@ -65,5 +65,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/nested_snippet.rb +[codesource]: /lib/platformos_check/checks/nested_snippet.rb [docsource]: /docs/checks/nested_snippet.md diff --git a/docs/checks/parser_blocking_javascript.md b/docs/checks/parser_blocking_javascript.md index 7ecca3d1..f9675a9c 100644 --- a/docs/checks/parser_blocking_javascript.md +++ b/docs/checks/parser_blocking_javascript.md @@ -78,7 +78,7 @@ ParserBlockingJavaScript: ## When Not To Use It -This should only be turned off with the `theme-check-disable` comment when there's no better way to accomplish what you're doing than with a parser-blocking script. +This should only be turned off with the `platformos-check-disable` comment when there's no better way to accomplish what you're doing than with a parser-blocking script. It is discouraged to turn this rule off. @@ -93,5 +93,5 @@ This check has been introduced in Theme Check 0.3.0. - [Documentation Source][docsource] [render-blocking]: https://web.dev/render-blocking-resources/ -[codesource]: /lib/theme_check/checks/parser_blocking_javascript.rb +[codesource]: /lib/platformos_check/checks/parser_blocking_javascript.rb [docsource]: /docs/checks/parser_blocking_javascript.md diff --git a/docs/checks/parser_blocking_script_tag.md b/docs/checks/parser_blocking_script_tag.md index edb64e57..0fdd9124 100644 --- a/docs/checks/parser_blocking_script_tag.md +++ b/docs/checks/parser_blocking_script_tag.md @@ -36,7 +36,7 @@ ParserBlockingScriptTag: ## When Not To Use It -This should only be turned off with the `theme-check-disable` comment when there's no better way to accomplish what you're doing than with a parser-blocking script. +This should only be turned off with the `platformos-check-disable` comment when there's no better way to accomplish what you're doing than with a parser-blocking script. It is discouraged to turn this rule off. diff --git a/docs/checks/remote_asset.md b/docs/checks/remote_asset.md index e3374718..465072dc 100644 --- a/docs/checks/remote_asset.md +++ b/docs/checks/remote_asset.md @@ -75,7 +75,7 @@ This check has been introduced in Theme Check 0.7.0. - [Documentation Source][docsource] [googleprivacy]: https://developers.google.com/web/updates/2020/10/http-cache-partitioning#resources -[codesource]: /lib/theme_check/checks/remote_asset.rb +[codesource]: /lib/platformos_check/checks/remote_asset.rb [docsource]: /docs/checks/remote_asset.md [slowstart]: https://en.wikipedia.org/wiki/TCP_congestion_control#Slow_start [url_filters]: https://shopify.dev/docs/themes/liquid/reference/filters/url-filters diff --git a/docs/checks/required_directories.md b/docs/checks/required_directories.md index a864b312..4808e737 100644 --- a/docs/checks/required_directories.md +++ b/docs/checks/required_directories.md @@ -21,5 +21,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/required_directories.rb +[codesource]: /lib/platformos_check/checks/required_directories.rb [docsource]: /docs/checks/required_directories.md diff --git a/docs/checks/required_layout_theme_object.md b/docs/checks/required_layout_theme_object.md index a5218b05..75e36054 100644 --- a/docs/checks/required_layout_theme_object.md +++ b/docs/checks/required_layout_theme_object.md @@ -23,6 +23,6 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/required_layout_theme_object.rb +[codesource]: /lib/platformos_check/checks/required_layout_theme_object.rb [docsource]: /docs/checks/required_layout_theme_object.md [themeliquid]: https://shopify.dev/docs/themes/theme-templates/theme-liquid diff --git a/docs/checks/schema_json_format.md b/docs/checks/schema_json_format.md index 12715264..f25b7e69 100644 --- a/docs/checks/schema_json_format.md +++ b/docs/checks/schema_json_format.md @@ -59,7 +59,7 @@ SchemaJsonFormat: | Parameter | Description | | --- | --- | | enabled | Whether the check is enabled. | -| severity | The [severity](https://shopify.dev/themes/tools/theme-check/configuration#check-severity) of the check. | +| severity | The [severity](https://shopify.dev/themes/tools/platformos-check/configuration#check-severity) of the check. | | start_level | The indentation level. If you prefer an indented schema, set this to 1. | | indent | The character(s) used for indentation levels. | @@ -72,5 +72,5 @@ SchemaJsonFormat: - [Rule source][codesource] - [Documentation source][docsource] -[codesource]: /lib/theme_check/checks/schema_json_format.rb +[codesource]: /lib/platformos_check/checks/schema_json_format.rb [docsource]: /docs/checks/schema_json_format.md diff --git a/docs/checks/space_inside_braces.md b/docs/checks/space_inside_braces.md index 32ff26f3..ff733aaf 100644 --- a/docs/checks/space_inside_braces.md +++ b/docs/checks/space_inside_braces.md @@ -87,5 +87,5 @@ This check has been introduced in Theme Check 0.1.0. - [Documentation Source][docsource] [styleguide]: https://github.com/Shopify/liquid-style-guide -[codesource]: /lib/theme_check/checks/space_inside_braces.rb +[codesource]: /lib/platformos_check/checks/space_inside_braces.rb [docsource]: /docs/checks/space_inside_braces.md diff --git a/docs/checks/syntax_error.md b/docs/checks/syntax_error.md index fadee439..ed93b5e1 100644 --- a/docs/checks/syntax_error.md +++ b/docs/checks/syntax_error.md @@ -45,5 +45,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/syntax_error.rb +[codesource]: /lib/platformos_check/checks/syntax_error.rb [docsource]: /docs/checks/syntax_error.md diff --git a/docs/checks/template_length.md b/docs/checks/template_length.md index b2fc942b..287110ac 100644 --- a/docs/checks/template_length.md +++ b/docs/checks/template_length.md @@ -56,5 +56,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/template_length.rb +[codesource]: /lib/platformos_check/checks/template_length.rb [docsource]: /docs/checks/template_length.md diff --git a/docs/checks/translation_key_exists.md b/docs/checks/translation_key_exists.md index 813dd540..9be6d98a 100644 --- a/docs/checks/translation_key_exists.md +++ b/docs/checks/translation_key_exists.md @@ -59,5 +59,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/translation_key_exists.rb +[codesource]: /lib/platformos_check/checks/translation_key_exists.rb [docsource]: /docs/checks/translation_key_exists.md diff --git a/docs/checks/undefined_object.md b/docs/checks/undefined_object.md index f1b9c35b..97a1d5ae 100644 --- a/docs/checks/undefined_object.md +++ b/docs/checks/undefined_object.md @@ -54,5 +54,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/undefined_object.rb +[codesource]: /lib/platformos_check/checks/undefined_object.rb [docsource]: /docs/checks/undefined_object.md diff --git a/docs/checks/unknown_filter.md b/docs/checks/unknown_filter.md index eff97346..a64f7e18 100644 --- a/docs/checks/unknown_filter.md +++ b/docs/checks/unknown_filter.md @@ -41,5 +41,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/unknown_filter.rb +[codesource]: /lib/platformos_check/checks/unknown_filter.rb [docsource]: /docs/checks/unknown_filter.md diff --git a/docs/checks/unused_assign.md b/docs/checks/unused_assign.md index cc7a029c..0fcd1fe5 100644 --- a/docs/checks/unused_assign.md +++ b/docs/checks/unused_assign.md @@ -43,5 +43,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/unused_assign.rb +[codesource]: /lib/platformos_check/checks/unused_assign.rb [docsource]: /docs/checks/unused_assign.md diff --git a/docs/checks/unused_snippet.md b/docs/checks/unused_snippet.md index 00948b45..f53f9ca3 100644 --- a/docs/checks/unused_snippet.md +++ b/docs/checks/unused_snippet.md @@ -28,5 +28,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/unused_snippet.rb +[codesource]: /lib/platformos_check/checks/unused_snippet.rb [docsource]: /docs/checks/unused_snippet.md diff --git a/docs/checks/valid_html_translation.md b/docs/checks/valid_html_translation.md index 5b56c131..f9dd34c0 100644 --- a/docs/checks/valid_html_translation.md +++ b/docs/checks/valid_html_translation.md @@ -49,5 +49,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/valid_html_translation.rb +[codesource]: /lib/platformos_check/checks/valid_html_translation.rb [docsource]: /docs/checks/valid_html_translation.md diff --git a/docs/checks/valid_json.md b/docs/checks/valid_json.md index 00f1c538..fd200774 100644 --- a/docs/checks/valid_json.md +++ b/docs/checks/valid_json.md @@ -56,5 +56,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/valid_json.rb +[codesource]: /lib/platformos_check/checks/valid_json.rb [docsource]: /docs/checks/valid_json.md diff --git a/docs/checks/valid_schema.md b/docs/checks/valid_schema.md index 7dc5b850..8dc12795 100644 --- a/docs/checks/valid_schema.md +++ b/docs/checks/valid_schema.md @@ -46,5 +46,5 @@ This check has been introduced in Theme Check 0.1.0. - [Rule Source][codesource] - [Documentation Source][docsource] -[codesource]: /lib/theme_check/checks/valid_schema.rb +[codesource]: /lib/platformos_check/checks/valid_schema.rb [docsource]: /docs/checks/valid_schema.md diff --git a/docs/flamegraph.svg b/docs/flamegraph.svg index 2a6b8262..20fb6f46 100644 --- a/docs/flamegraph.svg +++ b/docs/flamegraph.svg @@ -418,45 +418,45 @@ Reset Zoom Search ic - - - -ThemeCheck::HtmlNode#name (273) (0 ms, 0.00%) - - - +ext id="matched" x="1640.00" y="1077" > + id="frames"> + > +itle>PlatformosCheck::HtmlNode#name (273) (0 ms, 0.00%) +ext x="100.96" y="655.5" > +g> + > Liquid::Parser#variable_lookups (33) (0 ms, 0.00%) - - - -ThemeCheck::ValidHTMLTranslation#html_key? (6072) (6 ms, 0.16%) - - - +ext x="237.29" y="383.5" > +g> + > +itle>PlatformosCheck::ValidHTMLTranslation#html_key? (6072) (6 ms, 0.16%) +ext x="1694.95" y="703.5" > +g> + > Liquid::Case#parse (10) (62 ms, 1.65%) Li.. Hash#each (3169) (21 ms, 0.56%) - - - -ThemeCheck::Node#children (88) (1 ms, 0.03%) - - - +ext x="1684.80" y="703.5" > +g> + > +itle>PlatformosCheck::Node#children (88) (1 ms, 0.03%) +ext x="1290.68" y="687.5" > +g> + > <Object::Object>#[] (347) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_context (11) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_string (1195) (4 ms, 0.11%) - - - +ext x="233.63" y="431.5" > +g> + > +itle>PlatformosCheck::LiquidTag#on_string (1195) (4 ms, 0.11%) +ext x="996.86" y="639.5" > +g> + > Liquid::BlockBody#parse_for_document (3) (7 ms, 0.19%) @@ -466,13 +466,13 @@ String#index (2267) (5 ms, 0.13%) - - - -ThemeCheck::Node#type_name (763) (4 ms, 0.11%) - - - +ext x="1551.80" y="703.5" > +g> + > +itle>PlatformosCheck::Node#type_name (763) (4 ms, 0.11%) +ext x="469.30" y="479.5" > +g> + > Array#each (559) (178 ms, 4.74%) Array#eac.. @@ -482,17 +482,17 @@ Liquid::Parser#initialize (21) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#literal? (553) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#ignore? (165) (1 ms, 0.03%) - - - +ext x="284.68" y="575.5" > +g> + > +itle>PlatformosCheck::HtmlNode#literal? (553) (0 ms, 0.00%) +ext x="77.92" y="671.5" > +g> + > +itle>PlatformosCheck::UndefinedObject#ignore? (165) (1 ms, 0.03%) +ext x="581.24" y="463.5" > +g> + > Kernel#respond_to? (1116) (0 ms, 0.00%) @@ -506,89 +506,89 @@ Nokogiri::XML::Node#children (266) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (70) (0 ms, 0.00%) - - - +ext x="66.56" y="559.5" > +g> + > +itle>PlatformosCheck::Position#can_find_needle? (70) (0 ms, 0.00%) +ext x="580.50" y="399.5" > +g> + > Array#each (34) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#replace_placeholders (106) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (70) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#attributes (180) (2 ms, 0.05%) - - - +ext x="359.23" y="191.5" > +g> + > +itle>PlatformosCheck::HtmlNode#replace_placeholders (106) (0 ms, 0.00%) +ext x="136.02" y="735.5" > +g> + > +itle>PlatformosCheck::Position#start_index (70) (2 ms, 0.05%) +ext x="577.06" y="431.5" > +g> + > +itle>PlatformosCheck::HtmlNode#attributes (180) (2 ms, 0.05%) +ext x="136.59" y="783.5" > +g> + > Liquid::If#strict_parse (152) (12 ms, 0.32%) - - - -ThemeCheck::StringHelpers#demodulize (1917) (3 ms, 0.08%) - - - -ThemeCheck::Position#compute_start_offset (39) (3 ms, 0.08%) - - - -ThemeCheck::Node#tag_markup (224) (11 ms, 0.29%) - - - +ext x="218.31" y="575.5" > +g> + > +itle>PlatformosCheck::StringHelpers#demodulize (1917) (3 ms, 0.08%) +ext x="914.75" y="687.5" > +g> + > +itle>PlatformosCheck::Position#compute_start_offset (39) (3 ms, 0.08%) +ext x="625.11" y="431.5" > +g> + > +itle>PlatformosCheck::Node#tag_markup (224) (11 ms, 0.29%) +ext x="713.03" y="511.5" > +g> + > Psych::Parser#parse (1) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_tag (8) (2 ms, 0.05%) - - - +ext x="1719.21" y="815.5" > +g> + > +itle>PlatformosCheck::LiquidTag#on_tag (8) (2 ms, 0.05%) +ext x="407.43" y="319.5" > +g> + > Liquid::Parser#expression (59) (1 ms, 0.03%) Pathname#sub_ext (155) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag_markup (61) (3 ms, 0.08%) - - - +ext x="1292.10" y="671.5" > +g> + > +itle>PlatformosCheck::Node#tag_markup (61) (3 ms, 0.08%) +ext x="794.64" y="543.5" > +g> + > Psych::Visitors::Visitor#accept (151) (1 ms, 0.03%) Pathname#sub_ext (197) (0 ms, 0.00%) - - - -ThemeCheck::Node#block_tag? (1195) (1 ms, 0.03%) - - - +ext x="636.40" y="479.5" > +g> + > +itle>PlatformosCheck::Node#block_tag? (1195) (1 ms, 0.03%) +ext x="998.01" y="607.5" > +g> + > String#count (373) (1 ms, 0.03%) - - - -ThemeCheck::RequiredLayoutThemeObject#on_variable (196) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_tag (24) (4 ms, 0.11%) - - - +ext x="1556.76" y="655.5" > +g> + > +itle>PlatformosCheck::RequiredLayoutThemeObject#on_variable (196) (0 ms, 0.00%) +ext x="711.17" y="543.5" > +g> + > +itle>PlatformosCheck::LiquidTag#on_tag (24) (4 ms, 0.11%) +ext x="431.09" y="351.5" > +g> + > Liquid::Variable#strict_parse (4) (0 ms, 0.00%) @@ -598,25 +598,25 @@ Liquid::ParserSwitching#strict_parse_with_error_context (26) (2 ms, 0.05%) - - - -ThemeCheck::SpaceInsideBraces#on_node (2351) (44 ms, 1.17%) - - - -ThemeCheck::HtmlVisitor#visit_template (91) (278 ms, 7.40%) -ThemeCheck::Html.. - - -Liquid::ParserSwitching#strict_parse_with_error_context (7) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (721) (0 ms, 0.00%) - - - +ext x="240.55" y="511.5" > +g> + > +itle>PlatformosCheck::SpaceInsideBraces#on_node (2351) (44 ms, 1.17%) +ext x="1262.71" y="703.5" > +g> + > +itle>PlatformosCheck::HtmlVisitor#visit_template (91) (278 ms, 7.40%) +ext x="13.16" y="927.5" >PlatformosCheck::Html.. +g> + > +itle>Liquid::ParserSwitching#strict_parse_with_error_context (7) (0 ms, 0.00%) +ext x="178.48" y="431.5" > +g> + > +itle>PlatformosCheck::Position#contents (721) (0 ms, 0.00%) +ext x="880.70" y="511.5" > +g> + > Array#each (91) (16 ms, 0.43%) @@ -626,13 +626,13 @@ Pathname#chop_basename (1852) (3 ms, 0.08%) - - - -<Module::ThemeCheck::Tags>#register_tags! (91) (0 ms, 0.00%) - - - +ext x="1725.84" y="895.5" > +g> + > +itle><Module::PlatformosCheck::Tags>#register_tags! (91) (0 ms, 0.00%) +ext x="293.31" y="863.5" > +g> + > Kernel#is_a? (1820) (0 ms, 0.00%) @@ -646,13 +646,13 @@ Regexp#match (4807) (4 ms, 0.11%) - - - -ThemeCheck::HtmlNode#attributes (6) (1 ms, 0.03%) - - - +ext x="51.50" y="863.5" > +g> + > +itle>PlatformosCheck::HtmlNode#attributes (6) (1 ms, 0.03%) +ext x="108.75" y="687.5" > +g> + > StringScanner#scan_until (6913) (2 ms, 0.05%) @@ -662,17 +662,17 @@ Liquid::ParserSwitching#parse_with_selected_parser (4) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#visit (190) (43 ms, 1.14%) - - - -ThemeCheck::Checks#call (419) (3 ms, 0.08%) - - - +ext x="183.94" y="367.5" > +g> + > +itle>PlatformosCheck::Visitor#visit (190) (43 ms, 1.14%) +ext x="358.55" y="335.5" > +g> + > +itle>PlatformosCheck::Checks#call (419) (3 ms, 0.08%) +ext x="64.83" y="527.5" > +g> + > Liquid::VariableLookup#initialize (39) (0 ms, 0.00%) @@ -682,13 +682,13 @@ Liquid::Parser#variable_lookups (47) (0 ms, 0.00%) - - - -ThemeCheck::Node#start_index (250) (5 ms, 0.13%) - - - +text x="168.20" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (250) (5 ms, 0.13%) +text x="1453.96" y="735.5" > +/g> +g > Liquid::Variable#parse_filter_expressions (36) (0 ms, 0.00%) @@ -698,121 +698,121 @@ Liquid::BlockBody#parse_for_document (4) (2 ms, 0.05%) - - - -ThemeCheck::Template#snippet? (88) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (330) (3 ms, 0.08%) - - - +text x="225.32" y="367.5" > +/g> +g > +title>PlatformosCheck::Template#snippet? (88) (0 ms, 0.00%) +text x="410.26" y="287.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (330) (3 ms, 0.08%) +text x="539.78" y="399.5" > +/g> +g > Kernel#is_a? (2163) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (7) (2 ms, 0.05%) - - - +text x="1044.23" y="671.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (7) (2 ms, 0.05%) +text x="462.24" y="367.5" > +/g> +g > Array#each (422) (0 ms, 0.00%) - - - -ThemeCheck::Node#literal? (456) (0 ms, 0.00%) - - - +text x="284.05" y="623.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (456) (0 ms, 0.00%) +text x="392.54" y="383.5" > +/g> +g > Class#new (9) (1 ms, 0.03%) Array#each (1475) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (129) (1 ms, 0.03%) - - - +text x="1471.14" y="831.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (129) (1 ms, 0.03%) +text x="631.45" y="479.5" > +/g> +g > Integer#upto (377) (1 ms, 0.03%) - - - -ThemeCheck::Node#document? (445) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (242) (1 ms, 0.03%) - - - +text x="72.86" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#document? (445) (0 ms, 0.00%) +text x="1367.34" y="703.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (242) (1 ms, 0.03%) +text x="577.95" y="399.5" > +/g> +g > Liquid::BlockBody#parse_for_document (2) (1 ms, 0.03%) Array#map (1475) (3 ms, 0.08%) - - - -ThemeCheck::StringHelpers#underscore (1470) (9 ms, 0.24%) - - - -ThemeCheck::LiquidTag#on_string (721) (2 ms, 0.05%) - - - +text x="1469.01" y="847.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (1470) (9 ms, 0.24%) +text x="1308.21" y="783.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (721) (2 ms, 0.05%) +text x="787.97" y="575.5" > +/g> +g > String#scan (1332) (1 ms, 0.03%) Kernel#instance_variable_defined? (1886) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (292) (3 ms, 0.08%) - - - +text x="1457.53" y="735.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (292) (3 ms, 0.08%) +text x="1137.77" y="655.5" > +/g> +g > String#gsub (569) (0 ms, 0.00%) Array#map (1881) (4 ms, 0.11%) - - - -ThemeCheck::Node#children (26) (0 ms, 0.00%) - - - +text x="1042.41" y="719.5" > +/g> +g > +title>PlatformosCheck::Node#children (26) (0 ms, 0.00%) +text x="633.94" y="495.5" > +/g> +g > Liquid::BlockBody#parse (6) (2 ms, 0.05%) Liquid::Variable::ParseTreeVisitor#children (309) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call (1274) (36 ms, 0.96%) - - - -ThemeCheck::Node#markup (182) (0 ms, 0.00%) - - - -ThemeCheck::Node#source (872) (1 ms, 0.03%) - - - -ThemeCheck::DeprecatedFilter#on_variable (415) (2 ms, 0.05%) - - - +text x="1472.18" y="847.5" > +/g> +g > +title>PlatformosCheck::Checks#call (1274) (36 ms, 0.96%) +text x="394.68" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#markup (182) (0 ms, 0.00%) +text x="633.67" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#source (872) (1 ms, 0.03%) +text x="1284.07" y="671.5" > +/g> +g > +title>PlatformosCheck::DeprecatedFilter#on_variable (415) (2 ms, 0.05%) +text x="1539.62" y="799.5" > +/g> +g > Class#new (377) (0 ms, 0.00%) @@ -822,14 +822,14 @@ <Class::Liquid::Expression>#parse (84) (1 ms, 0.03%) - - - -ThemeCheck::HtmlVisitor#visit (91) (190 ms, 5.06%) -ThemeCheck.. - - -StringScanner#scan_until (18179) (7 ms, 0.19%) +text x="186.29" y="239.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (91) (190 ms, 5.06%) +text x="53.56" y="911.5" >PlatformosCheck.. +/g> +g > +title>StringScanner#scan_until (18179) (7 ms, 0.19%) @@ -842,45 +842,45 @@ Liquid::ParserSwitching#strict_parse_with_error_context (6) (1 ms, 0.03%) - - - -ThemeCheck::HtmlVisitor#visit (553) (48 ms, 1.28%) -T.. - - -ThemeCheck::Position#start_line_offset (8) (1 ms, 0.03%) - - - +text x="225.38" y="271.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (553) (48 ms, 1.28%) +text x="60.43" y="687.5" >T.. +/g> +g > +title>PlatformosCheck::Position#start_line_offset (8) (1 ms, 0.03%) +text x="407.74" y="223.5" > +/g> +g > Kernel#is_a? (1195) (0 ms, 0.00%) String#initialize_copy (1586) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (115) (0 ms, 0.00%) - - - +text x="1572.39" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#markup (115) (0 ms, 0.00%) +text x="698.11" y="463.5" > +/g> +g > Array#map (1566) (5 ms, 0.13%) Psych::Visitors::ToRuby#accept (151) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#literal? (632) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (773) (0 ms, 0.00%) - - - +text x="1296.08" y="367.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#literal? (632) (0 ms, 0.00%) +text x="119.74" y="831.5" > +/g> +g > +title>PlatformosCheck::Position#contents (773) (0 ms, 0.00%) +text x="698.79" y="479.5" > +/g> +g > Kernel#is_a? (2351) (0 ms, 0.00%) @@ -890,73 +890,73 @@ String#gsub (122) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (2267) (1 ms, 0.03%) - - - +text x="117.36" y="655.5" > +/g> +g > +title>PlatformosCheck::Position#contents (2267) (1 ms, 0.03%) +text x="1553.88" y="703.5" > +/g> +g > Liquid::Block#parse_body (2) (1 ms, 0.03%) String#scan (127) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (1073) (1 ms, 0.03%) - - - +text x="253.53" y="415.5" > +/g> +g > +title>PlatformosCheck::Position#contents (1073) (1 ms, 0.03%) +text x="1001.32" y="575.5" > +/g> +g > Liquid::Variable#strict_parse (52) (4 ms, 0.11%) String#=~ (319) (0 ms, 0.00%) - - - -ThemeCheck::Node#comment? (1392) (1 ms, 0.03%) - - - +text x="259.38" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1392) (1 ms, 0.03%) +text x="734.43" y="623.5" > +/g> +g > String#=~ (454) (0 ms, 0.00%) Liquid::If#parse_binary_comparisons (6) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#literal? (662) (0 ms, 0.00%) - - - +text x="179.51" y="399.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#literal? (662) (0 ms, 0.00%) +text x="103.26" y="767.5" > +/g> +g > Liquid::Variable#initialize (6) (0 ms, 0.00%) Liquid::Template::TagRegistry#[] (336) (0 ms, 0.00%) - - - -ThemeCheck::Node#block_body? (701) (0 ms, 0.00%) - - - -ThemeCheck::Node#source (636) (1 ms, 0.03%) - - - +text x="287.94" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (701) (0 ms, 0.00%) +text x="788.41" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#source (636) (1 ms, 0.03%) +text x="1590.12" y="751.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (415) (19 ms, 0.51%) - - - -ThemeCheck::Node#inside_liquid_tag? (70) (4 ms, 0.11%) - - - +text x="275.78" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (70) (4 ms, 0.11%) +text x="539.31" y="431.5" > +/g> +g > Liquid::If#parse_binary_comparisons (9) (1 ms, 0.03%) @@ -1010,29 +1010,29 @@ Liquid::BlockBody#create_variable (415) (21 ms, 0.56%) - - - -ThemeCheck::Node#type_name (1280) (8 ms, 0.21%) - - - -ThemeCheck::Node#line_number (262) (0 ms, 0.00%) - - - -ThemeCheck::DeprecatedFilter#on_variable (209) (1 ms, 0.03%) - - - -ThemeCheck::Position#can_find_needle? (250) (1 ms, 0.03%) - - - -ThemeCheck::Position#compute_start_offset (50) (2 ms, 0.05%) - - - +text x="274.63" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (1280) (8 ms, 0.21%) +text x="546.39" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (262) (0 ms, 0.00%) +text x="491.01" y="367.5" > +/g> +g > +title>PlatformosCheck::DeprecatedFilter#on_variable (209) (1 ms, 0.03%) +text x="875.26" y="607.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (250) (1 ms, 0.03%) +text x="1462.91" y="687.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (50) (2 ms, 0.05%) +text x="1455.12" y="687.5" > +/g> +g > String#downcase! (1470) (0 ms, 0.00%) @@ -1054,41 +1054,41 @@ Liquid::Parser#initialize (46) (1 ms, 0.03%) - - - -ThemeCheck::Node#end_token (1) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call (26) (1 ms, 0.03%) - - - +text x="158.30" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#end_token (1) (0 ms, 0.00%) +text x="1599.23" y="783.5" > +/g> +g > +title>PlatformosCheck::Checks#call (26) (1 ms, 0.03%) +text x="359.36" y="143.5" > +/g> +g > Liquid::ParseContext#new_tokenizer (91) (6 ms, 0.16%) Hash#each (414) (112 ms, 2.98%) -Hash#.. - - -ThemeCheck::UndefinedObject#ignore? (54) (0 ms, 0.00%) - - - +text x="1661.85" y="831.5" >Hash#.. +/g> +g > +title>PlatformosCheck::UndefinedObject#ignore? (54) (0 ms, 0.00%) +text x="437.43" y="335.5" > +/g> +g > Liquid::Block#new_body (152) (0 ms, 0.00%) Kernel#nil? (1680) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (40) (0 ms, 0.00%) - - - +text x="1607.35" y="703.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (40) (0 ms, 0.00%) +text x="409.70" y="271.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (8) (1 ms, 0.03%) @@ -1118,21 +1118,21 @@ Liquid::ParseContext#parse_expression (18) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#call_checks (419) (3 ms, 0.08%) - - - +text x="189.13" y="175.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#call_checks (419) (3 ms, 0.08%) +text x="64.74" y="543.5" > +/g> +g > Regexp#=== (1588) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_string (271) (1 ms, 0.03%) - - - +text x="154.41" y="543.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (271) (1 ms, 0.03%) +text x="407.08" y="319.5" > +/g> +g > Liquid::If#parse (1) (0 ms, 0.00%) @@ -1150,21 +1150,21 @@ Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (56) (3 ms, 0.08%) - - - -ThemeCheck::Node#tag? (2594) (1 ms, 0.03%) - - - +text x="160.88" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2594) (1 ms, 0.03%) +text x="808.73" y="671.5" > +/g> +g > Class#new (11) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (352) (1 ms, 0.03%) - - - +text x="144.74" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (352) (1 ms, 0.03%) +text x="1465.96" y="719.5" > +/g> +g > Liquid::Parser#expression (48) (0 ms, 0.00%) @@ -1198,21 +1198,21 @@ String#scan (4) (0 ms, 0.00%) - - - -ThemeCheck::ContentForHeaderModification#on_variable (313) (0 ms, 0.00%) - - - +text x="235.85" y="335.5" > +/g> +g > +title>PlatformosCheck::ContentForHeaderModification#on_variable (313) (0 ms, 0.00%) +text x="1236.27" y="703.5" > +/g> +g > <Class::Liquid::Tag>#parse (2) (1 ms, 0.03%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (108) (2 ms, 0.05%) - - - +text x="286.06" y="639.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (108) (2 ms, 0.05%) +text x="435.39" y="335.5" > +/g> +g > Liquid::BlockBody#parse (4) (0 ms, 0.00%) @@ -1222,25 +1222,25 @@ Class#new (8) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (156) (1 ms, 0.03%) - - - -ThemeCheck::Theme#[] (14) (4 ms, 0.11%) - - - -ThemeCheck::Position#contents (486) (0 ms, 0.00%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (415) (0 ms, 0.00%) - - - +text x="178.46" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (156) (1 ms, 0.03%) +text x="1029.63" y="607.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (14) (4 ms, 0.11%) +text x="626.72" y="479.5" > +/g> +g > +title>PlatformosCheck::Position#contents (486) (0 ms, 0.00%) +text x="525.35" y="383.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (415) (0 ms, 0.00%) +text x="1541.11" y="799.5" > +/g> +g > Liquid::For#initialize (4) (0 ms, 0.00%) @@ -1250,13 +1250,13 @@ Kernel#is_a? (2905) (1 ms, 0.03%) - - - -ThemeCheck::Node#literal? (1743) (1 ms, 0.03%) - - - +text x="1611.07" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (1743) (1 ms, 0.03%) +text x="1389.33" y="831.5" > +/g> +g > Liquid::Parser#expression (101) (1 ms, 0.03%) @@ -1278,27 +1278,27 @@ Liquid::If#strict_parse (6) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (256) (1 ms, 0.03%) - - - +text x="225.38" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#markup (256) (1 ms, 0.03%) +text x="1240.46" y="655.5" > +/g> +g > Liquid::If#parse (2) (1 ms, 0.03%) String#gsub (1578) (1 ms, 0.03%) - - - -ThemeCheck::Check#ignored? (1338) (0 ms, 0.00%) - - - -Hash#each (91) (1 ms, 0.03%) - +text x="813.68" y="639.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (1338) (0 ms, 0.00%) +text x="406.79" y="319.5" > +/g> +g > +Hash#each (91) (1 ms, 0.03%) + Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (16) (1 ms, 0.03%) @@ -1326,33 +1326,33 @@ String#downcase! (1710) (0 ms, 0.00%) - - - -ThemeCheck::AssetUrlFilters#on_variable (209) (0 ms, 0.00%) - - - +text x="1053.55" y="703.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#on_variable (209) (0 ms, 0.00%) +text x="874.18" y="607.5" > +/g> +g > Liquid::BlockBody#parse_for_document (5) (2 ms, 0.05%) Liquid::Lexer#tokenize (41) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_offset (2267) (26 ms, 0.69%) - - - -ThemeCheck::MissingTemplate#on_include (10) (3 ms, 0.08%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (85) (6 ms, 0.16%) - - - +text x="176.91" y="447.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (2267) (26 ms, 0.69%) +text x="1555.63" y="735.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (10) (3 ms, 0.08%) +text x="1124.74" y="671.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (85) (6 ms, 0.16%) +text x="881.64" y="495.5" > +/g> +g > Array#each (66) (198 ms, 5.27%) Array#each.. @@ -1362,41 +1362,41 @@ Pathname#prepend_prefix (464) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call (1364) (11 ms, 0.29%) - - - +text x="1738.81" y="847.5" > +/g> +g > +title>PlatformosCheck::Checks#call (1364) (11 ms, 0.29%) +text x="104.12" y="751.5" > +/g> +g > Enumerable#flat_map (2248) (3 ms, 0.08%) Module#name (884) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (393) (7 ms, 0.19%) - - - +text x="587.97" y="559.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (393) (7 ms, 0.19%) +text x="1378.47" y="735.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (4) (0 ms, 0.00%) - - - -ThemeCheck::DeprecateBgsizes#on_div (27) (0 ms, 0.00%) - - - +text x="231.77" y="287.5" > +/g> +g > +title>PlatformosCheck::DeprecateBgsizes#on_div (27) (0 ms, 0.00%) +text x="76.11" y="575.5" > +/g> +g > Array#map (505) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_offset (486) (8 ms, 0.21%) - - - +text x="411.66" y="399.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (486) (8 ms, 0.21%) +text x="527.37" y="383.5" > +/g> +g > Class#new (6) (0 ms, 0.00%) @@ -1406,17 +1406,17 @@ Liquid::ParserSwitching#parse_with_selected_parser (19) (1 ms, 0.03%) - - - -ThemeCheck::Node#type_name (171) (2 ms, 0.05%) - - - -ThemeCheck::Node#type_name (1474) (8 ms, 0.21%) - - - +text x="230.23" y="527.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (171) (2 ms, 0.05%) +text x="536.65" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (1474) (8 ms, 0.21%) +text x="587.32" y="575.5" > +/g> +g > Liquid::ParserSwitching#parse_with_selected_parser (3) (0 ms, 0.00%) @@ -1426,57 +1426,57 @@ Nokogiri::XML::Document#decorate (1300) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (773) (0 ms, 0.00%) - - - +text x="110.66" y="767.5" > +/g> +g > +title>PlatformosCheck::Position#contents (773) (0 ms, 0.00%) +text x="701.32" y="463.5" > +/g> +g > Array#each (515) (117 ms, 3.11%) -Array.. - - -ThemeCheck::Position#line_number (39) (0 ms, 0.00%) - - - +text x="357.21" y="415.5" >Array.. +/g> +g > +title>PlatformosCheck::Position#line_number (39) (0 ms, 0.00%) +text x="625.15" y="399.5" > +/g> +g > Array#each (628) (5 ms, 0.13%) Kernel#is_a? (4042) (1 ms, 0.03%) - - - -ThemeCheck::Node#children (322) (2 ms, 0.05%) - - - -ThemeCheck::Node#inside_liquid_tag? (14) (1 ms, 0.03%) - - - -ThemeCheck::UnusedAssign#on_variable_lookup (82) (1 ms, 0.03%) - - - +text x="1692.85" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#children (322) (2 ms, 0.05%) +text x="378.39" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (14) (1 ms, 0.03%) +text x="580.29" y="463.5" > +/g> +g > +title>PlatformosCheck::UnusedAssign#on_variable_lookup (82) (1 ms, 0.03%) +text x="466.81" y="383.5" > +/g> +g > String#downcase! (1335) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_context (4) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#call_checks (49) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (66) (1 ms, 0.03%) - - - +text x="198.80" y="383.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#call_checks (49) (0 ms, 0.00%) +text x="63.03" y="479.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (66) (1 ms, 0.03%) +text x="1661.23" y="879.5" > +/g> +g > Liquid::If#parse_expression (289) (3 ms, 0.08%) @@ -1486,25 +1486,25 @@ Pathname#sub_ext (197) (0 ms, 0.00%) - - - -ThemeCheck::Node#position (250) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#element? (896) (1 ms, 0.03%) - - - +text x="634.86" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#position (250) (1 ms, 0.03%) +text x="1454.04" y="719.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#element? (896) (1 ms, 0.03%) +text x="102.88" y="767.5" > +/g> +g > StringScanner#scan (8396) (2 ms, 0.05%) - - - -ThemeCheck::Node#start_index (95) (1 ms, 0.03%) - - - +text x="280.98" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (95) (1 ms, 0.03%) +text x="465.35" y="351.5" > +/g> +g > Liquid::If#parse_binary_comparisons (152) (7 ms, 0.19%) @@ -1518,81 +1518,81 @@ Kernel#is_a? (1581) (0 ms, 0.00%) - - - -ThemeCheck::FileSystemStorage#files (1) (40 ms, 1.06%) - - - +text x="1473.21" y="847.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#files (1) (40 ms, 1.06%) +text x="1724.35" y="943.5" > +/g> +g > StringScanner#eos? (4032) (1 ms, 0.03%) Liquid::For#parse (4) (3 ms, 0.08%) - - - -ThemeCheck::UndefinedObject#check_undefined (48) (5 ms, 0.13%) - - - +text x="187.07" y="415.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#check_undefined (48) (5 ms, 0.13%) +text x="1720.71" y="831.5" > +/g> +g > Liquid::Block#parse_body (3) (4 ms, 0.11%) - - - -ThemeCheck::Node#markup (2905) (4 ms, 0.11%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (312) (5 ms, 0.13%) - - - -ThemeCheck::LiquidTag#on_tag (373) (54 ms, 1.44%) -T.. - - +text x="230.99" y="559.5" > +/g> +g > +title>PlatformosCheck::Node#markup (2905) (4 ms, 0.11%) +text x="1609.24" y="783.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (312) (5 ms, 0.13%) +text x="798.53" y="575.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (373) (54 ms, 1.44%) +text x="1542.84" y="799.5" >T.. +/g> +g > String#gsub (788) (0 ms, 0.00%) - - - -ThemeCheck::Node#comment? (336) (0 ms, 0.00%) - - - -ThemeCheck::Printer#print (1) (0 ms, 0.00%) - - - +text x="1592.82" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (336) (0 ms, 0.00%) +text x="1543.15" y="783.5" > +/g> +g > +title>PlatformosCheck::Printer#print (1) (0 ms, 0.00%) +text x="1723.73" y="959.5" > +/g> +g > Liquid::Parser#initialize (53) (4 ms, 0.11%) - - - -ThemeCheck::StringHelpers#underscore (123) (1 ms, 0.03%) - - - -ThemeCheck::Node#initialize (923) (1 ms, 0.03%) - - - +text x="180.99" y="383.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (123) (1 ms, 0.03%) +text x="365.48" y="271.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (923) (1 ms, 0.03%) +text x="638.84" y="559.5" > +/g> +g > Class#new (161) (0 ms, 0.00%) - - - -ThemeCheck::Node#inside_liquid_tag? (6) (1 ms, 0.03%) - - - +text x="220.89" y="527.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (6) (1 ms, 0.03%) +text x="376.13" y="239.5" > +/g> +g > String#to_sym (1500) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (1680) (9 ms, 0.24%) - - - +text x="1391.92" y="815.5" > +/g> +g > +title>PlatformosCheck::Position#needle (1680) (9 ms, 0.24%) +text x="1603.12" y="735.5" > +/g> +g > Nokogiri::XML::Node#children (632) (1 ms, 0.03%) @@ -1602,61 +1602,61 @@ String#gsub! (3420) (3 ms, 0.08%) - - - -ThemeCheck::RequiredLayoutThemeObject#after_document (91) (0 ms, 0.00%) - - - +text x="1054.11" y="703.5" > +/g> +g > +title>PlatformosCheck::RequiredLayoutThemeObject#after_document (91) (0 ms, 0.00%) +text x="1623.91" y="831.5" > +/g> +g > Liquid::Lexer#tokenize (415) (8 ms, 0.21%) - - - -ThemeCheck::StringHelpers#underscore (1335) (8 ms, 0.21%) - - - +text x="278.60" y="607.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (1335) (8 ms, 0.21%) +text x="738.60" y="623.5" > +/g> +g > Liquid::Block#parse_body (3) (5 ms, 0.13%) String#index (2267) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_offset (411) (4 ms, 0.11%) - - - -ThemeCheck::Node#tag_markup (312) (0 ms, 0.00%) - - - +text x="1549.00" y="735.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (411) (4 ms, 0.11%) +text x="625.04" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (312) (0 ms, 0.00%) +text x="1033.21" y="607.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (6) (0 ms, 0.00%) Enumerable#flat_map (91) (1 ms, 0.03%) - - - -ThemeCheck::Node#inside_liquid_tag? (256) (11 ms, 0.29%) - - - +text x="1616.37" y="879.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (256) (11 ms, 0.29%) +text x="1283.17" y="687.5" > +/g> +g > Array#each (1460) (47 ms, 1.25%) A.. Liquid::If#parse (4) (2 ms, 0.05%) - - - -ThemeCheck::Node#markup (373) (1 ms, 0.03%) - - - +text x="231.64" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#markup (373) (1 ms, 0.03%) +text x="1547.82" y="735.5" > +/g> +g > Class#new (4) (0 ms, 0.00%) @@ -1674,13 +1674,13 @@ Array#map (559) (1 ms, 0.03%) - - - -ThemeCheck::Node#position (1680) (0 ms, 0.00%) - - - +text x="438.72" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#position (1680) (0 ms, 0.00%) +text x="1601.65" y="751.5" > +/g> +g > Nokogiri::XML::Node#element? (746) (0 ms, 0.00%) @@ -1694,17 +1694,17 @@ <Class::Liquid::Tag>#parse (10) (3 ms, 0.08%) - - - -ThemeCheck::Node#start_index (240) (4 ms, 0.11%) - - - -ThemeCheck::DeprecateBgsizes#on_div (27) (0 ms, 0.00%) - - - +text x="188.78" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (240) (4 ms, 0.11%) +text x="431.31" y="319.5" > +/g> +g > +title>PlatformosCheck::DeprecateBgsizes#on_div (27) (0 ms, 0.00%) +text x="81.98" y="607.5" > +/g> +g > Liquid::Block#parse_body (2) (2 ms, 0.05%) @@ -1726,13 +1726,13 @@ String#tr! (884) (0 ms, 0.00%) - - - -ThemeCheck::Theme#[] (2) (1 ms, 0.03%) - - - +text x="590.77" y="543.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (2) (1 ms, 0.03%) +text x="1371.41" y="703.5" > +/g> +g > String#[] (826) (0 ms, 0.00%) @@ -1742,49 +1742,49 @@ Array#each (3026) (97 ms, 2.58%) -Arra.. - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_condition (198) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_offset (70) (1 ms, 0.03%) - - - +text x="592.04" y="543.5" >Arra.. +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_condition (198) (0 ms, 0.00%) +text x="1119.72" y="671.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (70) (1 ms, 0.03%) +text x="577.29" y="415.5" > +/g> +g > Class#new (8) (0 ms, 0.00%) Class#new (190) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_node (322) (1 ms, 0.03%) - - - -ThemeCheck::Node#block_body? (1415) (1 ms, 0.03%) - - - +text x="378.72" y="319.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_node (322) (1 ms, 0.03%) +text x="389.68" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (1415) (1 ms, 0.03%) +text x="1238.17" y="671.5" > +/g> +g > Liquid::BlockBody#parse (5) (1 ms, 0.03%) - - - -ThemeCheck::ShopifyLiquid::DeprecatedFilter#alternatives (422) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (243) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (249) (1 ms, 0.03%) - - - +text x="242.13" y="463.5" > +/g> +g > +title>PlatformosCheck::ShopifyLiquid::DeprecatedFilter#alternatives (422) (1 ms, 0.03%) +text x="1539.90" y="767.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (243) (1 ms, 0.03%) +text x="1460.00" y="735.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (249) (1 ms, 0.03%) +text x="902.74" y="591.5" > +/g> +g > String#rindex (884) (0 ms, 0.00%) @@ -1798,13 +1798,13 @@ Liquid::If#parse (12) (2 ms, 0.05%) - - - -ThemeCheck::MissingTemplate#on_section (5) (2 ms, 0.05%) - - - +text x="286.33" y="703.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_section (5) (2 ms, 0.05%) +text x="1575.01" y="799.5" > +/g> +g > Liquid::Variable#strict_parse (8) (1 ms, 0.03%) @@ -1814,17 +1814,17 @@ Liquid::Variable#initialize (161) (8 ms, 0.21%) - - - -ThemeCheck::Position#can_find_needle? (1680) (6 ms, 0.16%) - - - -ThemeCheck::Check#ignored? (805) (0 ms, 0.00%) - - - +text x="169.39" y="623.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (1680) (6 ms, 0.16%) +text x="1604.07" y="719.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (805) (0 ms, 0.00%) +text x="389.02" y="287.5" > +/g> +g > Liquid::Parser#expression (47) (0 ms, 0.00%) @@ -1842,17 +1842,17 @@ Liquid::ParserSwitching#strict_parse_with_error_context (43) (3 ms, 0.08%) - - - -ThemeCheck::HtmlVisitor#visit (6) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#children (662) (4 ms, 0.11%) - - - +text x="208.33" y="431.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (6) (1 ms, 0.03%) +text x="62.54" y="399.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#children (662) (4 ms, 0.11%) +text x="101.10" y="767.5" > +/g> +g > <Class::Liquid::Tag>#parse (6) (3 ms, 0.08%) @@ -1866,25 +1866,25 @@ Array#each (7) (2 ms, 0.05%) - - - -ThemeCheck::LiquidTag#on_tag (50) (6 ms, 0.16%) - - - +text x="462.26" y="319.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (50) (6 ms, 0.16%) +text x="1453.58" y="767.5" > +/g> +g > Liquid::VariableLookup#initialize (48) (0 ms, 0.00%) Psych::Visitors::Visitor#visit (1) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#children (307) (2 ms, 0.05%) - - - +text x="1295.89" y="543.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#children (307) (2 ms, 0.05%) +text x="69.00" y="607.5" > +/g> +g > Liquid::Tokenizer#shift (232) (0 ms, 0.00%) @@ -1894,21 +1894,21 @@ Kernel#nil? (1680) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#visit (322) (72 ms, 1.92%) -Th.. - - +text x="1603.96" y="719.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (322) (72 ms, 1.92%) +text x="358.05" y="367.5" >Th.. +/g> +g > Liquid::Variable#strict_parse (130) (6 ms, 0.16%) - - - -ThemeCheck::Tags::Render#initialize (17) (0 ms, 0.00%) - - - +text x="200.55" y="495.5" > +/g> +g > +title>PlatformosCheck::Tags::Render#initialize (17) (0 ms, 0.00%) +text x="157.13" y="719.5" > +/g> +g > Module#=== (1581) (0 ms, 0.00%) @@ -1922,13 +1922,13 @@ String#scan (70) (4 ms, 0.11%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (82) (1 ms, 0.03%) - - - +text x="166.71" y="575.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (82) (1 ms, 0.03%) +text x="466.31" y="367.5" > +/g> +g > Array#each (1566) (2 ms, 0.05%) @@ -1946,13 +1946,13 @@ StringScanner#scan_until (17381) (7 ms, 0.19%) - - - -ThemeCheck::Template#snippet? (61) (0 ms, 0.00%) - - - +text x="1022.00" y="591.5" > +/g> +g > +title>PlatformosCheck::Template#snippet? (61) (0 ms, 0.00%) +text x="542.00" y="415.5" > +/g> +g > Liquid::Parser#variable_lookups (50) (1 ms, 0.03%) @@ -1970,13 +1970,13 @@ Enumerable#map (307) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (375) (2 ms, 0.05%) - - - +text x="69.08" y="591.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (375) (2 ms, 0.05%) +text x="1139.80" y="655.5" > +/g> +g > Class#new (33) (0 ms, 0.00%) @@ -2026,13 +2026,13 @@ Liquid::BlockBody#parse (5) (3 ms, 0.08%) - - - -ThemeCheck::Node#position (721) (1 ms, 0.03%) - - - +text x="234.25" y="383.5" > +/g> +g > +title>PlatformosCheck::Node#position (721) (1 ms, 0.03%) +text x="878.21" y="559.5" > +/g> +g > Liquid::Variable#strict_parse (16) (1 ms, 0.03%) @@ -2046,29 +2046,29 @@ String#scan (4) (1 ms, 0.03%) - - - -ThemeCheck::Node#document? (538) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#increment_consecutive_statements (323) (0 ms, 0.00%) - - - +text x="248.20" y="175.5" > +/g> +g > +title>PlatformosCheck::Node#document? (538) (0 ms, 0.00%) +text x="696.54" y="511.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#increment_consecutive_statements (323) (0 ms, 0.00%) +text x="1543.04" y="783.5" > +/g> +g > Class#new (232) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (15) (1 ms, 0.03%) - - - -ThemeCheck::Node#start_index (74) (1 ms, 0.03%) - - - +text x="226.69" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (74) (1 ms, 0.03%) +text x="376.18" y="223.5" > +/g> +g > Array#each (33) (14 ms, 0.37%) @@ -2078,53 +2078,53 @@ Liquid::Variable#initialize (24) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (91) (0 ms, 0.00%) - - - +text x="187.52" y="223.5" > +/g> +g > +title>PlatformosCheck::Node#markup (91) (0 ms, 0.00%) +text x="1624.36" y="815.5" > +/g> +g > Integer#upto (662) (1 ms, 0.03%) String#=~ (329) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#source (872) (0 ms, 0.00%) - - - +text x="697.04" y="511.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#source (872) (0 ms, 0.00%) +text x="1284.23" y="655.5" > +/g> +g > Liquid::Lexer#tokenize (16) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (1470) (2 ms, 0.05%) - - - -ThemeCheck::LiquidTag#on_string (202) (1 ms, 0.03%) - - - -ThemeCheck::Cli#output_with_format (1) (0 ms, 0.00%) - - - +text x="188.16" y="207.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (1470) (2 ms, 0.05%) +text x="1307.08" y="783.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (202) (1 ms, 0.03%) +text x="389.19" y="287.5" > +/g> +g > +title>PlatformosCheck::Cli#output_with_format (1) (0 ms, 0.00%) +text x="1723.71" y="975.5" > +/g> +g > Kernel#respond_to? (7924) (1 ms, 0.03%) Liquid::BlockBody#whitespace_handler (201) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#ignore? (375) (5 ms, 0.13%) - - - +text x="199.21" y="511.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#ignore? (375) (5 ms, 0.13%) +text x="1135.58" y="655.5" > +/g> +g > Class#new (307) (0 ms, 0.00%) @@ -2142,107 +2142,107 @@ Class#new (47) (1 ms, 0.03%) - +text x="236.69" y="399.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#element? (414) (0 ms, 0.00%) +text x="69.72" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#markup (1204) (2 ms, 0.05%) +text x="1289.01" y="687.5" > +/g> +g > +title>PlatformosCheck::Position#needle (25) (0 ms, 0.00%) +text x="377.77" y="191.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_assign (32) (0 ms, 0.00%) +text x="1613.07" y="799.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (40) (0 ms, 0.00%) +text x="407.59" y="239.5" > +/g> +g > +String#index (1090) (0 ms, 0.00%) +text x="1285.15" y="639.5" > +/g> +g > +title>PlatformosCheck::RemoteAsset#on_element (109) (0 ms, 0.00%) +text x="76.28" y="575.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (903) (2 ms, 0.05%) +text x="1124.90" y="591.5" > +/g> +g > +Class#new (152) (0 ms, 0.00%) + -ThemeCheck::HtmlNode#element? (414) (0 ms, 0.00%) - +<Class::Liquid::Tag>#parse (5) (6 ms, 0.16%) + -ThemeCheck::Node#markup (1204) (2 ms, 0.05%) - +Array#join (310) (0 ms, 0.00%) +text x="1673.27" y="767.5" > +/g> +g > +title>PlatformosCheck::Node#children (2351) (18 ms, 0.48%) +text x="1140.92" y="767.5" > +/g> +g > +Array#each (899) (1 ms, 0.03%) +text x="544.79" y="511.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (248) (1 ms, 0.03%) +text x="1716.98" y="863.5" > +/g> +g > +Liquid::If#parse (2) (1 ms, 0.03%) + -ThemeCheck::Position#needle (25) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#on_assign (32) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (40) (0 ms, 0.00%) - - - -String#index (1090) (0 ms, 0.00%) - - - -ThemeCheck::RemoteAsset#on_element (109) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (903) (2 ms, 0.05%) - - - -Class#new (152) (0 ms, 0.00%) - - - -<Class::Liquid::Tag>#parse (5) (6 ms, 0.16%) - - - -Array#join (310) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (2351) (18 ms, 0.48%) - - - -Array#each (899) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (248) (1 ms, 0.03%) - - - -Liquid::If#parse (2) (1 ms, 0.03%) - - - -Kernel#is_a? (1881) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (132) (0 ms, 0.00%) - - - -Liquid::If#initialize (10) (1 ms, 0.03%) - - - -ThemeCheck::Position#can_find_needle? (721) (3 ms, 0.08%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (8) (1 ms, 0.03%) - - - -Liquid::If#push_block (6) (1 ms, 0.03%) - - - -ThemeCheck::HtmlVisitor#call_checks (1132) (9 ms, 0.24%) - - - -ThemeCheck::Visitor#call_checks (4172) (130 ms, 3.46%) -ThemeC.. - - -ThemeCheck::UnusedAssign#on_document (91) (1 ms, 0.03%) - - - -StringScanner#scan_until (3694) (1 ms, 0.03%) - +Kernel#is_a? (1881) (0 ms, 0.00%) +text x="1046.99" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#markup (132) (0 ms, 0.00%) +text x="1037.75" y="575.5" > +/g> +g > +Liquid::If#initialize (10) (1 ms, 0.03%) +text x="224.31" y="559.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (721) (3 ms, 0.08%) +text x="879.56" y="527.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (8) (1 ms, 0.03%) +text x="407.77" y="207.5" > +/g> +g > +Liquid::If#push_block (6) (1 ms, 0.03%) +text x="163.50" y="543.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#call_checks (1132) (9 ms, 0.24%) +text x="78.40" y="671.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (4172) (130 ms, 3.46%) +text x="742.16" y="639.5" >ThemeC.. +/g> +g > +title>PlatformosCheck::UnusedAssign#on_document (91) (1 ms, 0.03%) +text x="1625.05" y="831.5" > +/g> +g > +StringScanner#scan_until (3694) (1 ms, 0.03%) + Array#map (60) (0 ms, 0.00%) @@ -2254,73 +2254,73 @@ <Object::Object>#[] (2669) (2 ms, 0.05%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#each_variable_lookup (48) (5 ms, 0.13%) - - - -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (1896) (1 ms, 0.03%) - - - +text x="517.86" y="447.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#each_variable_lookup (48) (5 ms, 0.13%) +text x="1720.77" y="815.5" > +/g> +g > +title>PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (1896) (1 ms, 0.03%) +text x="1248.45" y="623.5" > +/g> +g > Kernel#is_a? (2594) (0 ms, 0.00%) - - - -ThemeCheck::NestedSnippet#on_include (38) (0 ms, 0.00%) - - - +text x="809.22" y="655.5" > +/g> +g > +title>PlatformosCheck::NestedSnippet#on_include (38) (0 ms, 0.00%) +text x="1262.20" y="703.5" > +/g> +g > Liquid::If#parse (152) (45 ms, 1.20%) - - - -ThemeCheck::Node#tag? (2572) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_index (20) (0 ms, 0.00%) - - - +text x="238.94" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2572) (1 ms, 0.03%) +text x="1304.57" y="799.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (20) (0 ms, 0.00%) +text x="389.50" y="239.5" > +/g> +g > Liquid::For#parse (4) (3 ms, 0.08%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (31) (3 ms, 0.08%) - - - -ThemeCheck::Position#initialize (256) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_tag (39) (8 ms, 0.21%) - - - +text x="234.03" y="495.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (31) (3 ms, 0.08%) +text x="790.38" y="463.5" > +/g> +g > +title>PlatformosCheck::Position#initialize (256) (0 ms, 0.00%) +text x="1242.15" y="623.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (39) (8 ms, 0.21%) +text x="622.84" y="511.5" > +/g> +g > Enumerable#flat_map (454) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (3271) (2 ms, 0.05%) - - - +text x="391.96" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (3271) (2 ms, 0.05%) +text x="1150.35" y="767.5" > +/g> +g > Class#new (662) (1 ms, 0.03%) Liquid::BlockBody#initialize (1) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (2171) (7 ms, 0.19%) - - - +text x="246.01" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#markup (2171) (7 ms, 0.19%) +text x="1126.74" y="655.5" > +/g> +g > Enumerable#map (266) (1 ms, 0.03%) @@ -2330,13 +2330,13 @@ Kernel#respond_to? (131616) (20 ms, 0.53%) - - - -ThemeCheck::Position#start_index (180) (2 ms, 0.05%) - - - +text x="1528.86" y="799.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (180) (2 ms, 0.05%) +text x="1132.82" y="623.5" > +/g> +g > Liquid::BlockBody#create_variable (6) (0 ms, 0.00%) @@ -2358,21 +2358,21 @@ Liquid::BlockBody#parse_for_document (3) (5 ms, 0.13%) - - - -ThemeCheck::Node#line_number (532) (1 ms, 0.03%) - - - +text x="247.42" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (532) (1 ms, 0.03%) +text x="901.71" y="559.5" > +/g> +g > Class#new (16) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#attributes (130) (1 ms, 0.03%) - - - +text x="163.34" y="575.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (130) (1 ms, 0.03%) +text x="100.17" y="655.5" > +/g> +g > String#to_sym (793) (0 ms, 0.00%) @@ -2402,42 +2402,42 @@ Kernel#class (1388) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (88) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (1680) (1 ms, 0.03%) - - - -ThemeCheck::HtmlVisitor#visit (97) (4 ms, 0.11%) - - - +text x="585.84" y="559.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (88) (0 ms, 0.00%) +text x="410.30" y="271.5" > +/g> +g > +title>PlatformosCheck::Position#contents (1680) (1 ms, 0.03%) +text x="1606.65" y="719.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (97) (4 ms, 0.11%) +text x="62.39" y="527.5" > +/g> +g > Liquid::BlockBody#parse (11) (2 ms, 0.05%) - - - -ThemeCheck::Position#line_number (70) (0 ms, 0.00%) - - - -ThemeCheck::UnknownFilter#on_variable (75) (0 ms, 0.00%) - - - -ThemeCheck::Node#block? (1195) (2 ms, 0.05%) - - - -ThemeCheck::Visitor#call_checks (5358) (190 ms, 5.06%) -ThemeCheck.. - - -Liquid::BlockBody#parse_for_document (38) (16 ms, 0.43%) +text x="227.10" y="543.5" > +/g> +g > +title>PlatformosCheck::Position#line_number (70) (0 ms, 0.00%) +text x="527.51" y="335.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (75) (0 ms, 0.00%) +text x="1381.78" y="735.5" > +/g> +g > +title>PlatformosCheck::Node#block? (1195) (2 ms, 0.05%) +text x="997.39" y="623.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (5358) (190 ms, 5.06%) +text x="815.61" y="671.5" >PlatformosCheck.. +/g> +g > +title>Liquid::BlockBody#parse_for_document (38) (16 ms, 0.43%) @@ -2454,13 +2454,13 @@ Psych::Visitors::Visitor#visit (151) (1 ms, 0.03%) - - - -ThemeCheck::MissingTemplate#on_include (14) (4 ms, 0.11%) - - - +text x="1296.15" y="335.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (14) (4 ms, 0.11%) +text x="626.70" y="511.5" > +/g> +g > Liquid::If#initialize (9) (1 ms, 0.03%) @@ -2470,25 +2470,25 @@ Liquid::ParserSwitching#strict_parse_with_error_context (6) (0 ms, 0.00%) - - - -ThemeCheck::Node#comment? (559) (0 ms, 0.00%) - - - +text x="165.51" y="191.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (559) (0 ms, 0.00%) +text x="439.90" y="447.5" > +/g> +g > Liquid::Block#parse_body (4) (1 ms, 0.03%) Liquid::If#parse (2) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#underscore (1500) (8 ms, 0.21%) - - - +text x="258.04" y="543.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (1500) (8 ms, 0.21%) +text x="1393.18" y="815.5" > +/g> +g > Liquid::If#push_block (5) (1 ms, 0.03%) @@ -2498,13 +2498,13 @@ Array#map (2248) (4 ms, 0.11%) - - - -ThemeCheck::Position#contents (411) (0 ms, 0.00%) - - - +text x="905.87" y="687.5" > +/g> +g > +title>PlatformosCheck::Position#contents (411) (0 ms, 0.00%) +text x="624.76" y="415.5" > +/g> +g > Liquid::BlockBody#parse (6) (1 ms, 0.03%) @@ -2542,53 +2542,53 @@ Kernel#respond_to? (38640) (6 ms, 0.16%) - - - -ThemeCheck::ShopifyLiquid::DeprecatedFilter#all (422) (1 ms, 0.03%) - - - +text x="457.35" y="383.5" > +/g> +g > +title>PlatformosCheck::ShopifyLiquid::DeprecatedFilter#all (422) (1 ms, 0.03%) +text x="1540.07" y="751.5" > +/g> +g > Class#new (4) (0 ms, 0.00%) String#count (373) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (1581) (12 ms, 0.32%) - - - +text x="1560.84" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#children (1581) (12 ms, 0.32%) +text x="1467.51" y="863.5" > +/g> +g > Kernel#is_a? (2501) (0 ms, 0.00%) - - - -ThemeCheck::TranslationKeyExists#on_variable (36) (0 ms, 0.00%) - - - +text x="1390.38" y="815.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#on_variable (36) (0 ms, 0.00%) +text x="580.77" y="479.5" > +/g> +g > Liquid::BlockBody#parse_for_document (8) (4 ms, 0.11%) Kernel#loop (42) (0 ms, 0.00%) - - - -ThemeCheck::JsonFile#content (415) (0 ms, 0.00%) - - - +text x="269.75" y="495.5" > +/g> +g > +title>PlatformosCheck::JsonFile#content (415) (0 ms, 0.00%) +text x="1611.84" y="783.5" > +/g> +g > Liquid::Block#parse_body (4) (2 ms, 0.05%) - - - -ThemeCheck::Position#needle (545) (4 ms, 0.11%) - - - +text x="225.31" y="399.5" > +/g> +g > +title>PlatformosCheck::Position#needle (545) (4 ms, 0.11%) +text x="722.54" y="479.5" > +/g> +g > <Class::Liquid::Tag>#parse (9) (3 ms, 0.08%) @@ -2598,13 +2598,13 @@ Liquid::BlockBody#parse_for_document (1) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (545) (5 ms, 0.13%) - - - +text x="207.90" y="367.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (545) (5 ms, 0.13%) +text x="722.13" y="495.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (12) (1 ms, 0.03%) @@ -2626,25 +2626,25 @@ Liquid::Tokenizer#shift (228) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (238) (6 ms, 0.16%) - - - +text x="213.79" y="671.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (238) (6 ms, 0.16%) +text x="1121.86" y="623.5" > +/g> +g > Liquid::Block#parse_body (3) (2 ms, 0.05%) Kernel#is_a? (9241) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (54) (0 ms, 0.00%) - - - +text x="1694.29" y="703.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (54) (0 ms, 0.00%) +text x="437.99" y="335.5" > +/g> +g > Liquid::BlockBody#parse (4) (2 ms, 0.05%) @@ -2666,49 +2666,49 @@ Pathname#initialize (692) (0 ms, 0.00%) - - - -ThemeCheck::Position#content_line_count (85) (0 ms, 0.00%) - - - +text x="462.69" y="271.5" > +/g> +g > +title>PlatformosCheck::Position#content_line_count (85) (0 ms, 0.00%) +text x="881.49" y="479.5" > +/g> +g > <Class::Liquid::VariableLookup>#parse (28) (1 ms, 0.03%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (8) (1 ms, 0.03%) - - - +text x="240.99" y="383.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (8) (1 ms, 0.03%) +text x="488.33" y="303.5" > +/g> +g > Liquid::Variable#initialize (8) (0 ms, 0.00%) Liquid::Variable::ParseTreeVisitor#children (145) (0 ms, 0.00%) - - - -ThemeCheck::Position#compute_start_offset (24) (2 ms, 0.05%) - - - -ThemeCheck::Node#tag? (1478) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (342) (1 ms, 0.03%) - - - +text x="1388.26" y="815.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (24) (2 ms, 0.05%) +text x="432.33" y="271.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (1478) (1 ms, 0.03%) +text x="794.27" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#markup (342) (1 ms, 0.03%) +text x="389.76" y="271.5" > +/g> +g > Liquid::BlockBody#parse (29) (11 ms, 0.29%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (193) (0 ms, 0.00%) - - - +text x="246.77" y="543.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (193) (0 ms, 0.00%) +text x="1452.16" y="767.5" > +/g> +g > Array#map (1695) (3 ms, 0.08%) @@ -2726,25 +2726,25 @@ Regexp#match? (650) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_tag (6) (1 ms, 0.03%) - - - +text x="497.16" y="479.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (6) (1 ms, 0.03%) +text x="376.12" y="255.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (6) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (311) (3 ms, 0.08%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (52) (1 ms, 0.03%) - - - +text x="165.75" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (311) (3 ms, 0.08%) +text x="718.14" y="527.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (52) (1 ms, 0.03%) +text x="409.34" y="303.5" > +/g> +g > StringScanner#scan (451) (0 ms, 0.00%) @@ -2766,89 +2766,89 @@ Liquid::If#initialize (11) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (85) (0 ms, 0.00%) - - - +text x="233.59" y="479.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (85) (0 ms, 0.00%) +text x="877.72" y="575.5" > +/g> +g > Array#map (454) (1 ms, 0.03%) Array#each (182) (2 ms, 0.05%) - - - -ThemeCheck::TranslationKeyExists#on_variable (101) (0 ms, 0.00%) - - - -ThemeCheck::Config#enabled_checks (1) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (639) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (2645) (17 ms, 0.45%) - - - +text x="140.23" y="863.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#on_variable (101) (0 ms, 0.00%) +text x="541.61" y="447.5" > +/g> +g > +title>PlatformosCheck::Config#enabled_checks (1) (1 ms, 0.03%) +text x="1723.84" y="975.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (639) (1 ms, 0.03%) +text x="1037.48" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#markup (2645) (17 ms, 0.45%) +text x="1017.75" y="623.5" > +/g> +g > Liquid::Block#parse_body (2) (2 ms, 0.05%) <Class::Liquid::Expression>#parse (24) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#source (51) (41 ms, 1.09%) - - - +text x="187.56" y="159.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#source (51) (41 ms, 1.09%) +text x="1642.36" y="847.5" > +/g> +g > StringScanner#charpos (165) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (692) (2 ms, 0.05%) - - - +text x="1021.84" y="591.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (692) (2 ms, 0.05%) +text x="462.36" y="303.5" > +/g> +g > Pathname#sub_ext (626) (1 ms, 0.03%) String#[] (563) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (2905) (1 ms, 0.03%) - - - +text x="738.06" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2905) (1 ms, 0.03%) +text x="1610.65" y="767.5" > +/g> +g > StringScanner#getch (399) (0 ms, 0.00%) Array#each (17) (9 ms, 0.24%) - - - -ThemeCheck::Node#markup (1138) (5 ms, 0.13%) - - - +text x="1570.95" y="735.5" > +/g> +g > +title>PlatformosCheck::Node#markup (1138) (5 ms, 0.13%) +text x="628.76" y="495.5" > +/g> +g > Liquid::Tokenizer#shift (1516) (2 ms, 0.05%) - - - -ThemeCheck::ThemeFile#name (6) (2 ms, 0.05%) - - - +text x="272.59" y="671.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (6) (2 ms, 0.05%) +text x="728.97" y="527.5" > +/g> +g > Module#name (1782) (0 ms, 0.00%) @@ -2866,79 +2866,79 @@ Liquid::BlockBody#parse (3) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (294) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (780) (4 ms, 0.11%) - - - +text x="227.31" y="383.5" > +/g> +g > +title>PlatformosCheck::Node#markup (294) (0 ms, 0.00%) +text x="898.95" y="591.5" > +/g> +g > +title>PlatformosCheck::Position#needle (780) (4 ms, 0.11%) +text x="1030.92" y="575.5" > +/g> +g > Liquid::Parser#initialize (4) (0 ms, 0.00%) Class#new (415) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_line_offset (52) (4 ms, 0.11%) - - - +text x="278.26" y="607.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (52) (4 ms, 0.11%) +text x="1369.77" y="639.5" > +/g> +g > Liquid::If#parse (11) (2 ms, 0.05%) - - - -ThemeCheck::Position#start_offset (74) (1 ms, 0.03%) - - - +text x="235.55" y="495.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (74) (1 ms, 0.03%) +text x="376.52" y="191.5" > +/g> +g > Enumerable#map (91) (4 ms, 0.11%) - - - -ThemeCheck::Position#needle (452) (2 ms, 0.05%) - - - +text x="137.76" y="879.5" > +/g> +g > +title>PlatformosCheck::Position#needle (452) (2 ms, 0.05%) +text x="1368.61" y="671.5" > +/g> +g > Liquid::Lexer#tokenize (70) (1 ms, 0.03%) Kernel#respond_to? (3668) (1 ms, 0.03%) - +text x="68.52" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#markup (1820) (14 ms, 0.37%) +text x="711.76" y="527.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_node (1743) (12 ms, 0.32%) +text x="1456.41" y="767.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_render (38) (0 ms, 0.00%) +text x="1291.78" y="703.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (52) (9 ms, 0.24%) +text x="1367.45" y="735.5" > +/g> +g > +Hash#each (9) (1 ms, 0.03%) + -ThemeCheck::Node#markup (1820) (14 ms, 0.37%) - +Class#new (232) (0 ms, 0.00%) + -ThemeCheck::SpaceInsideBraces#on_node (1743) (12 ms, 0.32%) - - - -ThemeCheck::UndefinedObject#on_render (38) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_tag (52) (9 ms, 0.24%) - - - -Hash#each (9) (1 ms, 0.03%) - - - -Class#new (232) (0 ms, 0.00%) - - - -Class#new (2) (1 ms, 0.03%) - +Class#new (2) (1 ms, 0.03%) + Class#new (415) (0 ms, 0.00%) @@ -2990,29 +2990,29 @@ Enumerable#map (553) (2 ms, 0.05%) - - - -ThemeCheck::Node#block? (1415) (3 ms, 0.08%) - - - -ThemeCheck::Node#literal? (559) (0 ms, 0.00%) - - - +text x="76.56" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#block? (1415) (3 ms, 0.08%) +text x="1237.77" y="687.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (559) (0 ms, 0.00%) +text x="440.03" y="447.5" > +/g> +g > Class#new (91) (0 ms, 0.00%) String#gsub! (3564) (3 ms, 0.08%) - - - -ThemeCheck::Node#line_number (146) (0 ms, 0.00%) - - - +text x="1156.41" y="735.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (146) (0 ms, 0.00%) +text x="542.28" y="399.5" > +/g> +g > Liquid::Parser#initialize (11) (0 ms, 0.00%) @@ -3030,13 +3030,13 @@ Enumerable#flat_map (987) (2 ms, 0.05%) - - - -ThemeCheck::LiquidTag#on_tag (31) (6 ms, 0.16%) - - - +text x="585.05" y="559.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (31) (6 ms, 0.16%) +text x="788.91" y="575.5" > +/g> +g > Array#each (14) (3 ms, 0.08%) @@ -3054,21 +3054,21 @@ StringScanner#scan_until (6028) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#replace_placeholders (44) (0 ms, 0.00%) - - - -ThemeCheck::MissingEnableComment#after_document (91) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#literal? (590) (0 ms, 0.00%) - - - +text x="1374.32" y="687.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#replace_placeholders (44) (0 ms, 0.00%) +text x="72.40" y="479.5" > +/g> +g > +title>PlatformosCheck::MissingEnableComment#after_document (91) (0 ms, 0.00%) +text x="1622.94" y="831.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#literal? (590) (0 ms, 0.00%) +text x="128.94" y="863.5" > +/g> +g > Pathname#chop_basename (1156) (2 ms, 0.05%) @@ -3110,13 +3110,13 @@ Liquid::If#parse_binary_comparisons (9) (0 ms, 0.00%) - - - -ThemeCheck::RegexHelpers#matches (91) (14 ms, 0.37%) - - - +text x="199.55" y="431.5" > +/g> +g > +title>PlatformosCheck::RegexHelpers#matches (91) (14 ms, 0.37%) +text x="47.04" y="895.5" > +/g> +g > Liquid::If#initialize (29) (3 ms, 0.08%) @@ -3130,85 +3130,85 @@ Liquid::If#strict_parse (7) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_tag (165) (25 ms, 0.67%) - - - -ThemeCheck::AssetUrlFilters#record_variable_offense (196) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#visit (6) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#attributes (3) (0 ms, 0.00%) - - - +text x="224.71" y="415.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (165) (25 ms, 0.67%) +text x="998.50" y="639.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#record_variable_offense (196) (0 ms, 0.00%) +text x="694.14" y="527.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (6) (0 ms, 0.00%) +text x="62.55" y="367.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (3) (0 ms, 0.00%) +text x="72.38" y="527.5" > +/g> +g > Liquid::BlockBody#whitespace_handler (387) (1 ms, 0.03%) Liquid::BlockBody#create_variable (4) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (452) (0 ms, 0.00%) - - - +text x="241.98" y="431.5" > +/g> +g > +title>PlatformosCheck::Position#contents (452) (0 ms, 0.00%) +text x="1369.34" y="639.5" > +/g> +g > Liquid::Block#parse_body (54) (9 ms, 0.24%) - - - -ThemeCheck::Checks#call_check_method (103632) (141 ms, 3.75%) -ThemeCh.. - - +text x="188.47" y="399.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (103632) (141 ms, 3.75%) +text x="665.47" y="559.5" >ThemeCh.. +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (43) (3 ms, 0.08%) - - - -ThemeCheck::Checks#call (3026) (98 ms, 2.61%) -Them.. - - +text x="208.32" y="447.5" > +/g> +g > +title>PlatformosCheck::Checks#call (3026) (98 ms, 2.61%) +text x="591.58" y="559.5" >Them.. +/g> +g > Class#new (70) (2 ms, 0.05%) <Class::Liquid::Expression>#parse (160) (2 ms, 0.05%) - - - -ThemeCheck::Node#initialize (2289) (3 ms, 0.08%) - - - +text x="253.07" y="479.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (2289) (3 ms, 0.08%) +text x="1300.00" y="751.5" > +/g> +g > Pathname#to_s (393) (0 ms, 0.00%) Liquid::Parser#variable_lookups (62) (1 ms, 0.03%) - - - -ThemeCheck::Visitor#visit_template (91) (3,224 ms, 85.80%) -ThemeCheck::Visitor#visit_template (91) - - -<Class::Liquid::Expression>#parse (21) (0 ms, 0.00%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_condition (235) (0 ms, 0.00%) - - - +text x="206.57" y="431.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit_template (91) (3,224 ms, 85.80%) +text x="141.04" y="927.5" >PlatformosCheck::Visitor#visit_template (91) +/g> +g > +title><Class::Liquid::Expression>#parse (21) (0 ms, 0.00%) +text x="284.56" y="591.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_condition (235) (0 ms, 0.00%) +text x="1451.95" y="767.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (14) (1 ms, 0.03%) @@ -3218,57 +3218,57 @@ String#scan (187) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#visit (1597) (2,296 ms, 61.10%) -ThemeCheck::Visitor#visit (1597) - - -Enumerable#flat_map (1695) (2 ms, 0.05%) - - - -ThemeCheck::ValidHTMLTranslation#html_key? (2082) (2 ms, 0.05%) - - - +text x="262.03" y="495.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (1597) (2,296 ms, 61.10%) +text x="325.95" y="815.5" >PlatformosCheck::Visitor#visit (1597) +/g> +g > +title>Enumerable#flat_map (1695) (2 ms, 0.05%) +text x="1386.80" y="815.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#html_key? (2082) (2 ms, 0.05%) +text x="1691.85" y="639.5" > +/g> +g > Liquid::BlockBody#create_variable (6) (1 ms, 0.03%) <Module::Nokogiri::HTML5>#read_and_encode (310) (1 ms, 0.03%) - - - -ThemeCheck::Template#snippet? (165) (1 ms, 0.03%) - - - +text x="1712.01" y="687.5" > +/g> +g > +title>PlatformosCheck::Template#snippet? (165) (1 ms, 0.03%) +text x="581.28" y="447.5" > +/g> +g > String#byteslice (115) (0 ms, 0.00%) Liquid::If#parse (2) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#element? (836) (1 ms, 0.03%) - - - +text x="249.90" y="255.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#element? (836) (1 ms, 0.03%) +text x="84.05" y="703.5" > +/g> +g > String#end_with? (12144) (2 ms, 0.05%) - - - -ThemeCheck::Node#markup (266) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#visit (212) (9 ms, 0.24%) - - - +text x="1696.85" y="687.5" > +/g> +g > +title>PlatformosCheck::Node#markup (266) (0 ms, 0.00%) +text x="541.41" y="431.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (212) (9 ms, 0.24%) +text x="62.17" y="559.5" > +/g> +g > String#rindex (1388) (0 ms, 0.00%) @@ -3302,33 +3302,33 @@ Module#=== (1773) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_line_offset (70) (8 ms, 0.21%) - - - -ThemeCheck::Position#compute_start_offset (19) (2 ms, 0.05%) - - - +text x="909.03" y="655.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (70) (8 ms, 0.21%) +text x="527.46" y="351.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (19) (2 ms, 0.05%) +text x="461.27" y="303.5" > +/g> +g > Regexp#match? (1335) (1 ms, 0.03%) - - - -ThemeCheck::ValidHTMLTranslation#html_key? (1197) (1 ms, 0.03%) - - - +text x="739.69" y="607.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#html_key? (1197) (1 ms, 0.03%) +text x="1691.05" y="607.5" > +/g> +g > Liquid::Variable#strict_parse (8) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (91) (1 ms, 0.03%) - - - +text x="247.89" y="175.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (91) (1 ms, 0.03%) +text x="1623.49" y="815.5" > +/g> +g > Liquid::BlockBody#create_variable (9) (1 ms, 0.03%) @@ -3358,13 +3358,13 @@ Kernel#initialize_dup (393) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (773) (6 ms, 0.16%) - - - +text x="1382.75" y="671.5" > +/g> +g > +title>PlatformosCheck::Position#needle (773) (6 ms, 0.16%) +text x="699.02" y="479.5" > +/g> +g > Liquid::Parser#initialize (29) (1 ms, 0.03%) @@ -3374,41 +3374,41 @@ Liquid::ParserSwitching#strict_parse_with_error_context (12) (1 ms, 0.03%) - - - -ThemeCheck::Node#inside_liquid_tag? (50) (3 ms, 0.08%) - - - +text x="285.38" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (50) (3 ms, 0.08%) +text x="1462.20" y="751.5" > +/g> +g > Class#new (91) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (24) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call_check_method (9632) (9 ms, 0.24%) - - - +text x="142.09" y="815.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (24) (1 ms, 0.03%) +text x="436.18" y="351.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (9632) (9 ms, 0.24%) +text x="122.88" y="783.5" > +/g> +g > <Class::Liquid::Expression>#parse (54) (1 ms, 0.03%) - - - -ThemeCheck::Position#contents (486) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (312) (1 ms, 0.03%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (58) (1 ms, 0.03%) - - - +text x="177.54" y="399.5" > +/g> +g > +title>PlatformosCheck::Position#contents (486) (0 ms, 0.00%) +text x="526.98" y="351.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (312) (1 ms, 0.03%) +text x="801.30" y="559.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (58) (1 ms, 0.03%) +text x="390.65" y="271.5" > +/g> +g > Pathname#sub_ext (66) (0 ms, 0.00%) @@ -3418,13 +3418,13 @@ Liquid::If#parse (4) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call_check_method (1440) (1 ms, 0.03%) - - - +text x="184.08" y="415.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (1440) (1 ms, 0.03%) +text x="361.22" y="175.5" > +/g> +g > Class#new (1745) (3 ms, 0.08%) @@ -3434,13 +3434,13 @@ Liquid::Parser#variable_lookups (53) (0 ms, 0.00%) - - - -ThemeCheck::Node#line_number (165) (1 ms, 0.03%) - - - +text x="175.54" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (165) (1 ms, 0.03%) +text x="999.24" y="607.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (12) (1 ms, 0.03%) @@ -3462,25 +3462,25 @@ Liquid::Case#record_when_condition (26) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (40) (1 ms, 0.03%) - - - +text x="229.65" y="575.5" > +/g> +g > +title>PlatformosCheck::Node#children (40) (1 ms, 0.03%) +text x="899.45" y="591.5" > +/g> +g > Liquid::If#parse_comparison (46) (1 ms, 0.03%) - - - -ThemeCheck::Visitor#call_checks (5102) (153 ms, 4.07%) -ThemeCh.. - - -ThemeCheck::Node#tag? (543) (0 ms, 0.00%) - - - +text x="158.77" y="543.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (5102) (153 ms, 4.07%) +text x="1396.79" y="831.5" >ThemeCh.. +/g> +g > +title>PlatformosCheck::Node#tag? (543) (0 ms, 0.00%) +text x="488.98" y="383.5" > +/g> +g > Pathname#chop_basename (462) (1 ms, 0.03%) @@ -3490,13 +3490,13 @@ StringScanner#scan_until (868) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (373) (0 ms, 0.00%) - - - +text x="377.25" y="207.5" > +/g> +g > +title>PlatformosCheck::Position#contents (373) (0 ms, 0.00%) +text x="1556.99" y="655.5" > +/g> +g > Liquid::Variable#initialize (8) (0 ms, 0.00%) @@ -3518,33 +3518,33 @@ Class#new (6) (0 ms, 0.00%) - - - -ThemeCheck::Position#compute_start_offset (115) (14 ms, 0.37%) - - - +text x="179.42" y="495.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (115) (14 ms, 0.37%) +text x="701.84" y="463.5" > +/g> +g > Liquid::ParserSwitching#parse_with_selected_parser (25) (2 ms, 0.05%) - - - -ThemeCheck::Node#children (62) (0 ms, 0.00%) - - - -ThemeCheck::Node#inside_liquid_tag? (50) (6 ms, 0.16%) - - - +text x="145.33" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#children (62) (0 ms, 0.00%) +text x="361.92" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (50) (6 ms, 0.16%) +text x="1453.65" y="751.5" > +/g> +g > Liquid::BlockBody#create_variable (296) (21 ms, 0.56%) - - - -ThemeCheck::ContentForHeaderModification#on_variable (415) (0 ms, 0.00%) - - - +text x="260.10" y="671.5" > +/g> +g > +title>PlatformosCheck::ContentForHeaderModification#on_variable (415) (0 ms, 0.00%) +text x="1539.48" y="799.5" > +/g> +g > Array#each (1132) (8 ms, 0.21%) @@ -3558,29 +3558,29 @@ <Class::Liquid::Tag>#parse (3) (4 ms, 0.11%) - - - -ThemeCheck::Theme#directories (1) (3 ms, 0.08%) - - - +text x="160.49" y="591.5" > +/g> +g > +title>PlatformosCheck::Theme#directories (1) (3 ms, 0.08%) +text x="1717.85" y="879.5" > +/g> +g > Liquid::Block#block_delimiter (242) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (352) (0 ms, 0.00%) - - - -ThemeCheck::Node#document? (746) (0 ms, 0.00%) - - - -ThemeCheck::Node#start_index (365) (3 ms, 0.08%) - - - +text x="259.94" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (352) (0 ms, 0.00%) +text x="1466.15" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#document? (746) (0 ms, 0.00%) +text x="998.33" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (365) (3 ms, 0.08%) +text x="897.12" y="575.5" > +/g> +g > Class#new (4) (0 ms, 0.00%) @@ -3598,89 +3598,89 @@ Kernel#initialize_dup (1586) (3 ms, 0.08%) - - - -ThemeCheck::HtmlNode#initialize (662) (0 ms, 0.00%) - - - +text x="1573.17" y="687.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#initialize (662) (0 ms, 0.00%) +text x="110.04" y="719.5" > +/g> +g > Liquid::ParseContext#initialize (91) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_string (504) (1 ms, 0.03%) - - - +text x="292.87" y="799.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (504) (1 ms, 0.03%) +text x="576.21" y="479.5" > +/g> +g > Liquid::ParseContext#parse_expression (31) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (4) (1 ms, 0.03%) - - - -ThemeCheck::Node#start_index (70) (2 ms, 0.05%) - - - -ThemeCheck::UnusedAssign#on_variable_lookup (393) (3 ms, 0.08%) - - - -ThemeCheck::Node#source (784) (1 ms, 0.03%) - - - +text x="248.21" y="127.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (70) (2 ms, 0.05%) +text x="576.98" y="447.5" > +/g> +g > +title>PlatformosCheck::UnusedAssign#on_variable_lookup (393) (3 ms, 0.08%) +text x="1381.90" y="735.5" > +/g> +g > +title>PlatformosCheck::Node#source (784) (1 ms, 0.03%) +text x="999.53" y="607.5" > +/g> +g > String#scan (8) (1 ms, 0.03%) String#gsub! (1576) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (569) (2 ms, 0.05%) - - - +text x="1593.00" y="751.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (569) (2 ms, 0.05%) +text x="1278.27" y="671.5" > +/g> +g > Liquid::Lexer#tokenize (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (2645) (2 ms, 0.05%) - - - +text x="248.27" y="47.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2645) (2 ms, 0.05%) +text x="1018.87" y="607.5" > +/g> +g > Pathname#to_s (464) (0 ms, 0.00%) - - - -ThemeCheck::Node#literal? (821) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag? (2044) (1 ms, 0.03%) - - - +text x="1739.08" y="879.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (821) (1 ms, 0.03%) +text x="494.27" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2044) (1 ms, 0.03%) +text x="641.93" y="607.5" > +/g> +g > Kernel#is_a? (977) (0 ms, 0.00%) Liquid::ParserSwitching#parse_with_selected_parser (3) (0 ms, 0.00%) - - - -ThemeCheck::ValidHTMLTranslation#visit_nested (52) (113 ms, 3.01%) -Theme.. - - -ThemeCheck::Checks#call (320) (8 ms, 0.21%) - - - +text x="234.13" y="367.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#visit_nested (52) (113 ms, 3.01%) +text x="1661.51" y="879.5" >Theme.. +/g> +g > +title>PlatformosCheck::Checks#call (320) (8 ms, 0.21%) +text x="365.85" y="271.5" > +/g> +g > Liquid::BlockBody#parse (6) (0 ms, 0.00%) @@ -3694,61 +3694,61 @@ Nokogiri::XML::Node#children (632) (1 ms, 0.03%) - - - -ThemeCheck::ValidHTMLTranslation#html_key? (837) (1 ms, 0.03%) - - - +text x="83.62" y="687.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#html_key? (837) (1 ms, 0.03%) +text x="1713.01" y="799.5" > +/g> +g > Kernel#is_a? (1501) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#call_checks (364) (17 ms, 0.45%) - - - +text x="1386.35" y="767.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (364) (17 ms, 0.45%) +text x="1617.74" y="895.5" > +/g> +g > Liquid::Parser#expression (43) (0 ms, 0.00%) - - - -ThemeCheck::TranslationKeyExists#on_variable (204) (2 ms, 0.05%) - - - +text x="209.34" y="399.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#on_variable (204) (2 ms, 0.05%) +text x="1034.54" y="639.5" > +/g> +g > Liquid::Parser#look (938) (0 ms, 0.00%) - - - -ThemeCheck::RequiredDirectories#on_end (1) (3 ms, 0.08%) - - - -ThemeCheck::Node#initialize (196) (0 ms, 0.00%) - - - +text x="268.37" y="511.5" > +/g> +g > +title>PlatformosCheck::RequiredDirectories#on_end (1) (3 ms, 0.08%) +text x="1717.85" y="895.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (196) (0 ms, 0.00%) +text x="1290.84" y="639.5" > +/g> +g > Liquid::BlockBody#parse_for_document (1) (4 ms, 0.11%) Liquid::Parser#consume (837) (1 ms, 0.03%) - - - -ThemeCheck::Node#inside_liquid_tag? (39) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#literal? (632) (0 ms, 0.00%) - - - -ThemeCheck::ParserBlockingScriptTag#on_variable (193) (0 ms, 0.00%) - - - +text x="282.30" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (39) (2 ms, 0.05%) +text x="632.65" y="495.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#literal? (632) (0 ms, 0.00%) +text x="84.39" y="703.5" > +/g> +g > +title>PlatformosCheck::ParserBlockingScriptTag#on_variable (193) (0 ms, 0.00%) +text x="1456.20" y="767.5" > +/g> +g > Liquid::If#strict_parse (4) (0 ms, 0.00%) @@ -3762,105 +3762,105 @@ Psych::Visitors::Visitor#accept (1) (2 ms, 0.05%) - - - -ThemeCheck::DeprecatedFilter#on_variable (204) (0 ms, 0.00%) - - - -ThemeCheck::AssetUrlFilters#record_variable_offense (193) (0 ms, 0.00%) - - - +text x="1295.89" y="623.5" > +/g> +g > +title>PlatformosCheck::DeprecatedFilter#on_variable (204) (0 ms, 0.00%) +text x="996.51" y="639.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#record_variable_offense (193) (0 ms, 0.00%) +text x="1118.56" y="655.5" > +/g> +g > Liquid::BlockBody#parse_for_document (3) (9 ms, 0.24%) - - - -ThemeCheck::Node#block? (721) (2 ms, 0.05%) - - - +text x="242.57" y="527.5" > +/g> +g > +title>PlatformosCheck::Node#block? (721) (2 ms, 0.05%) +text x="788.18" y="559.5" > +/g> +g > Liquid::Parser#variable_lookups (187) (2 ms, 0.05%) - - - -ThemeCheck::StringHelpers#underscore (1917) (10 ms, 0.27%) - - - -<Class::Liquid::Tag>#parse (8) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (1215) (3 ms, 0.08%) - - - -ThemeCheck::Template#snippet? (110) (0 ms, 0.00%) - - - -<Class::Liquid::Expression>#parse (12) (0 ms, 0.00%) - +text x="267.88" y="543.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (1917) (10 ms, 0.27%) +text x="916.01" y="687.5" > +/g> +g > +<Class::Liquid::Tag>#parse (8) (0 ms, 0.00%) +text x="213.35" y="559.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (1215) (3 ms, 0.08%) +text x="626.90" y="431.5" > +/g> +g > +title>PlatformosCheck::Template#snippet? (110) (0 ms, 0.00%) +text x="727.94" y="511.5" > +/g> +g > +<Class::Liquid::Expression>#parse (12) (0 ms, 0.00%) + Liquid::BlockBody#create_variable (25) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag? (2898) (2 ms, 0.05%) - - - +text x="232.42" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2898) (2 ms, 0.05%) +text x="1048.25" y="735.5" > +/g> +g > String#gsub (884) (0 ms, 0.00%) - - - -ThemeCheck::Node#source (488) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (20) (0 ms, 0.00%) - - - +text x="589.73" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#source (488) (0 ms, 0.00%) +text x="877.86" y="575.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (20) (0 ms, 0.00%) +text x="369.14" y="223.5" > +/g> +g > Pathname#chop_basename (255) (3 ms, 0.08%) - - - -ThemeCheck::Node#type_name (50) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#underscore (168) (1 ms, 0.03%) - - - +text x="1659.56" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (50) (0 ms, 0.00%) +text x="579.76" y="463.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (168) (1 ms, 0.03%) +text x="370.35" y="303.5" > +/g> +g > Array#each (148) (2 ms, 0.05%) - - - -ThemeCheck::Position#needle (40) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (95) (0 ms, 0.00%) - - - +text x="1569.50" y="703.5" > +/g> +g > +title>PlatformosCheck::Position#needle (40) (0 ms, 0.00%) +text x="409.73" y="255.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (95) (0 ms, 0.00%) +text x="465.53" y="303.5" > +/g> +g > Liquid::Parser#initialize (33) (1 ms, 0.03%) Liquid::Variable#strict_parse (12) (1 ms, 0.03%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (209) (0 ms, 0.00%) - - - +text x="164.06" y="335.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (209) (0 ms, 0.00%) +text x="875.62" y="607.5" > +/g> +g > Liquid::If#push_block (6) (1 ms, 0.03%) @@ -3870,13 +3870,13 @@ Liquid::BlockBody#create_variable (4) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag? (3273) (2 ms, 0.05%) - - - +text x="231.76" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (3273) (2 ms, 0.05%) +text x="911.81" y="703.5" > +/g> +g > <Object::Object>#[] (5737) (4 ms, 0.11%) @@ -3898,49 +3898,49 @@ Liquid::ParserSwitching#strict_parse_with_error_context (41) (3 ms, 0.08%) - - - -ThemeCheck::ThemeFile#name (149) (0 ms, 0.00%) - - - +text x="176.82" y="511.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (149) (0 ms, 0.00%) +text x="581.03" y="463.5" > +/g> +g > Liquid::Parser#initialize (56) (1 ms, 0.03%) Liquid::Echo#initialize (2) (0 ms, 0.00%) - - - -ThemeCheck::RequiredLayoutThemeObject#on_variable (313) (0 ms, 0.00%) - - - -ThemeCheck::Node#block_tag? (977) (1 ms, 0.03%) - - - +text x="270.32" y="527.5" > +/g> +g > +title>PlatformosCheck::RequiredLayoutThemeObject#on_variable (313) (0 ms, 0.00%) +text x="1262.51" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#block_tag? (977) (1 ms, 0.03%) +text x="1453.13" y="735.5" > +/g> +g > Pathname#initialize (197) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (884) (1 ms, 0.03%) - - - +text x="636.49" y="463.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (884) (1 ms, 0.03%) +text x="588.21" y="559.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (70) (3 ms, 0.08%) - - - -ThemeCheck::StringHelpers#demodulize (171) (0 ms, 0.00%) - - - -ThemeCheck::Node#position (452) (1 ms, 0.03%) - - - +text x="166.87" y="511.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (171) (0 ms, 0.00%) +text x="536.84" y="415.5" > +/g> +g > +title>PlatformosCheck::Node#position (452) (1 ms, 0.03%) +text x="1368.02" y="687.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (13) (1 ms, 0.03%) @@ -3950,17 +3950,17 @@ Class#new (33) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (292) (1 ms, 0.03%) - - - -ThemeCheck::Position#needle (721) (5 ms, 0.13%) - - - +text x="208.45" y="367.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (292) (1 ms, 0.03%) +text x="1135.14" y="655.5" > +/g> +g > +title>PlatformosCheck::Position#needle (721) (5 ms, 0.13%) +text x="879.16" y="543.5" > +/g> +g > Array#each (734) (69 ms, 1.84%) Ar.. @@ -3970,17 +3970,17 @@ Liquid::ParseContext#new_block_body (210) (0 ms, 0.00%) - - - -ThemeCheck::Node#position (1073) (2 ms, 0.05%) - - - -ThemeCheck::Node#block_tag? (721) (0 ms, 0.00%) - - - +text x="146.59" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#position (1073) (2 ms, 0.05%) +text x="1000.04" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#block_tag? (721) (0 ms, 0.00%) +text x="788.57" y="543.5" > +/g> +g > <Class::Liquid::VariableLookup>#parse (40) (0 ms, 0.00%) @@ -3994,13 +3994,13 @@ StringScanner#charpos (343) (0 ms, 0.00%) - - - -ThemeCheck::TranslationKeyExists#key_exists? (60) (0 ms, 0.00%) - - - +text x="1461.75" y="735.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#key_exists? (60) (0 ms, 0.00%) +text x="1134.68" y="655.5" > +/g> +g > Array#include? (3081) (1 ms, 0.03%) @@ -4018,13 +4018,13 @@ Liquid::Parser#expression (130) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call_check_method (1099) (1 ms, 0.03%) - - - +text x="202.62" y="479.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (1099) (1 ms, 0.03%) +text x="63.72" y="463.5" > +/g> +g > Psych::Visitors::Visitor#accept (83) (1 ms, 0.03%) @@ -4038,21 +4038,21 @@ String#index (180) (1 ms, 0.03%) - - - -ThemeCheck::RemoteAsset#on_element (273) (1 ms, 0.03%) - - - +text x="1133.08" y="575.5" > +/g> +g > +title>PlatformosCheck::RemoteAsset#on_element (273) (1 ms, 0.03%) +text x="100.65" y="671.5" > +/g> +g > Enumerable#map (377) (1 ms, 0.03%) - - - -ThemeCheck::Position#needle (160) (1 ms, 0.03%) - - - +text x="72.68" y="623.5" > +/g> +g > +title>PlatformosCheck::Position#needle (160) (1 ms, 0.03%) +text x="633.01" y="447.5" > +/g> +g > Liquid::If#parse (4) (2 ms, 0.05%) @@ -4062,29 +4062,29 @@ Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (70) (3 ms, 0.08%) - - - -ThemeCheck::Template#snippet? (82) (0 ms, 0.00%) - - - +text x="166.85" y="527.5" > +/g> +g > +title>PlatformosCheck::Template#snippet? (82) (0 ms, 0.00%) +text x="466.16" y="351.5" > +/g> +g > Array#map (322) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (82) (5 ms, 0.13%) - - - -ThemeCheck::HtmlNode#name (285) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call (5248) (151 ms, 4.02%) -ThemeCh.. - - +text x="193.02" y="367.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#name (285) (0 ms, 0.00%) +text x="137.47" y="783.5" > +/g> +g > +title>PlatformosCheck::Checks#call (5248) (151 ms, 4.02%) +text x="1313.59" y="783.5" >ThemeCh.. +/g> +g > <Class::IO>#read (1) (1 ms, 0.03%) @@ -4118,25 +4118,25 @@ Liquid::Variable#initialize (12) (1 ms, 0.03%) - - - -ThemeCheck::Position#needle (40) (0 ms, 0.00%) - - - +text x="164.56" y="463.5" > +/g> +g > +title>PlatformosCheck::Position#needle (40) (0 ms, 0.00%) +text x="488.17" y="351.5" > +/g> +g > String#gsub! (336) (0 ms, 0.00%) Array#each (28) (1 ms, 0.03%) - - - -ThemeCheck::Node#inside_liquid_tag? (85) (4 ms, 0.11%) - - - +text x="62.52" y="479.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (85) (4 ms, 0.11%) +text x="896.72" y="591.5" > +/g> +g > Liquid::BlockBody#parse_for_document (24) (10 ms, 0.27%) @@ -4146,21 +4146,21 @@ Enumerable#map (7) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call (1244) (13 ms, 0.35%) - - - -ThemeCheck::NestedSnippet::TemplateInfo#with_deep_nested (91) (1 ms, 0.03%) - - - -ThemeCheck::FileSystemStorage#read (51) (41 ms, 1.09%) - - - +text x="91.00" y="607.5" > +/g> +g > +title>PlatformosCheck::Checks#call (1244) (13 ms, 0.35%) +text x="85.17" y="687.5" > +/g> +g > +title>PlatformosCheck::NestedSnippet::TemplateInfo#with_deep_nested (91) (1 ms, 0.03%) +text x="1717.38" y="863.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#read (51) (41 ms, 1.09%) +text x="1642.42" y="831.5" > +/g> +g > Kernel#instance_variable_defined? (2408) (1 ms, 0.03%) @@ -4186,21 +4186,21 @@ Array#each (2263) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#replace_placeholders (126) (0 ms, 0.00%) - - - +text x="1146.75" y="735.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#replace_placeholders (126) (0 ms, 0.00%) +text x="90.71" y="575.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (6) (1 ms, 0.03%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (96) (1 ms, 0.03%) - - - +text x="225.67" y="207.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (96) (1 ms, 0.03%) +text x="728.15" y="527.5" > +/g> +g > Pathname#sub_ext (96) (4 ms, 0.11%) @@ -4238,17 +4238,17 @@ Hash#each (1828) (63 ms, 1.68%) -Ha.. - - -ThemeCheck::AssetUrlFilters#record_variable_offense (204) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (50) (3 ms, 0.08%) - - - +text x="1673.42" y="767.5" >Ha.. +/g> +g > +title>PlatformosCheck::AssetUrlFilters#record_variable_offense (204) (0 ms, 0.00%) +text x="995.39" y="623.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (50) (3 ms, 0.08%) +text x="1462.13" y="767.5" > +/g> +g > String#[] (1008) (0 ms, 0.00%) @@ -4258,13 +4258,13 @@ Liquid::If#parse (46) (13 ms, 0.35%) - - - -ThemeCheck::Node#tag_markup (164) (7 ms, 0.19%) - - - +text x="162.85" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (164) (7 ms, 0.19%) +text x="889.81" y="575.5" > +/g> +g > Liquid::BlockBody#create_variable (14) (1 ms, 0.03%) @@ -4274,21 +4274,21 @@ <Class::Liquid::Tag>#parse (21) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_index (250) (4 ms, 0.11%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (288) (5 ms, 0.13%) - - - -ThemeCheck::Node#comment? (1872) (1 ms, 0.03%) - - - +text x="286.45" y="639.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (250) (4 ms, 0.11%) +text x="1454.28" y="719.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (288) (5 ms, 0.13%) +text x="894.39" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1872) (1 ms, 0.03%) +text x="807.73" y="671.5" > +/g> +g > <Module::Psych>#parse_stream (1) (1 ms, 0.03%) @@ -4298,33 +4298,33 @@ <Class::Liquid::VariableLookup>#parse (160) (1 ms, 0.03%) - - - -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (1680) (1 ms, 0.03%) - - - +text x="276.90" y="623.5" > +/g> +g > +title>PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (1680) (1 ms, 0.03%) +text x="1607.10" y="719.5" > +/g> +g > Liquid::BlockBody#parse_for_document (30) (36 ms, 0.96%) - - - -ThemeCheck::Position#start_index (452) (7 ms, 0.19%) - - - +text x="157.38" y="687.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (452) (7 ms, 0.19%) +text x="1368.27" y="687.5" > +/g> +g > Array#each (21) (6 ms, 0.16%) <Class::Liquid::VariableLookup>#parse (164) (1 ms, 0.03%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (533) (8 ms, 0.21%) - - - +text x="221.45" y="463.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (533) (8 ms, 0.21%) +text x="1279.42" y="687.5" > +/g> +g > String#to_s (1782) (0 ms, 0.00%) @@ -4350,41 +4350,41 @@ Enumerable#map (638) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#name (352) (0 ms, 0.00%) - - - +text x="109.35" y="783.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#name (352) (0 ms, 0.00%) +text x="66.96" y="575.5" > +/g> +g > <Module::Nokogiri::Gumbo>#fragment (124) (4 ms, 0.11%) <Class::Regexp>#escape (255) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#underscore (311) (1 ms, 0.03%) - - - +text x="1270.87" y="655.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (311) (1 ms, 0.03%) +text x="718.71" y="511.5" > +/g> +g > Pathname#sub_ext (6) (2 ms, 0.05%) - - - -ThemeCheck::Node#literal? (1515) (1 ms, 0.03%) - - - +text x="728.97" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (1515) (1 ms, 0.03%) +text x="641.44" y="607.5" > +/g> +g > Liquid::Parser#initialize (9) (1 ms, 0.03%) - - - -ThemeCheck::DisabledChecks#remove_disabled_offenses (3) (0 ms, 0.00%) - - - +text x="189.65" y="143.5" > +/g> +g > +title>PlatformosCheck::DisabledChecks#remove_disabled_offenses (3) (0 ms, 0.00%) +text x="1723.51" y="943.5" > +/g> +g > Liquid::Parser#consume (407) (0 ms, 0.00%) @@ -4414,45 +4414,45 @@ Liquid::ParserSwitching#parse_with_selected_parser (3) (0 ms, 0.00%) - - - -ThemeCheck::Node#position (183) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (105) (1 ms, 0.03%) - - - +text x="192.26" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#position (183) (0 ms, 0.00%) +text x="789.22" y="527.5" > +/g> +g > +title>PlatformosCheck::Position#needle (105) (1 ms, 0.03%) +text x="436.44" y="287.5" > +/g> +g > Class#new (9) (0 ms, 0.00%) Liquid::ParserSwitching#parse_with_selected_parser (13) (1 ms, 0.03%) - - - -ThemeCheck::Node#block? (593) (1 ms, 0.03%) - - - +text x="217.31" y="623.5" > +/g> +g > +title>PlatformosCheck::Node#block? (593) (1 ms, 0.03%) +text x="1366.88" y="719.5" > +/g> +g > <Class::Liquid::Tag>#parse (3) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#on_include (7) (2 ms, 0.05%) - - - +text x="249.41" y="319.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (7) (2 ms, 0.05%) +text x="531.07" y="447.5" > +/g> +g > Liquid::If#parse_comparison (9) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_index (721) (13 ms, 0.35%) - - - +text x="189.10" y="223.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (721) (13 ms, 0.35%) +text x="878.61" y="559.5" > +/g> +g > Kernel#class (1578) (0 ms, 0.00%) @@ -4462,21 +4462,21 @@ Liquid::If#strict_parse (10) (1 ms, 0.03%) - - - -ThemeCheck::ValidHTMLTranslation#visit_nested (7417) (57 ms, 1.52%) -T.. - - +text x="224.34" y="495.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#visit_nested (7417) (57 ms, 1.52%) +text x="1675.95" y="751.5" >T.. +/g> +g > Class#new (6) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call (866) (22 ms, 0.59%) - - - +text x="212.97" y="623.5" > +/g> +g > +title>PlatformosCheck::Checks#call (866) (22 ms, 0.59%) +text x="380.86" y="335.5" > +/g> +g > Liquid::If#initialize (4) (0 ms, 0.00%) @@ -4494,13 +4494,13 @@ Liquid::Parser#consume (798) (1 ms, 0.03%) - - - -ThemeCheck::TranslationKeyExists#on_variable (209) (2 ms, 0.05%) - - - +text x="155.99" y="559.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#on_variable (209) (2 ms, 0.05%) +text x="899.16" y="607.5" > +/g> +g > Liquid::ParseContext#parse_expression (89) (1 ms, 0.03%) @@ -4538,53 +4538,53 @@ <Class::Liquid::Tag>#parse (44) (82 ms, 2.18%) -<Cl.. - - -ThemeCheck::Theme#[] (3) (1 ms, 0.03%) - - - +text x="174.32" y="671.5" ><Cl.. +/g> +g > +title>PlatformosCheck::Theme#[] (3) (1 ms, 0.03%) +text x="577.92" y="447.5" > +/g> +g > Kernel#respond_to? (128592) (19 ms, 0.51%) Liquid::Block#parse_body (1) (4 ms, 0.11%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (193) (2 ms, 0.05%) - - - +text x="160.60" y="559.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (193) (2 ms, 0.05%) +text x="635.10" y="495.5" > +/g> +g > Array#each (157) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#name (234) (0 ms, 0.00%) - - - +text x="63.57" y="479.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#name (234) (0 ms, 0.00%) +text x="109.06" y="687.5" > +/g> +g > Pathname#initialize (242) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call (158) (5 ms, 0.13%) - - - +text x="578.07" y="367.5" > +/g> +g > +title>PlatformosCheck::Checks#call (158) (5 ms, 0.13%) +text x="362.37" y="239.5" > +/g> +g > Enumerable#find (3) (1 ms, 0.03%) Liquid::ParseTreeVisitor#initialize (446) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#relative_path (1215) (0 ms, 0.00%) - - - +text x="733.07" y="607.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#relative_path (1215) (0 ms, 0.00%) +text x="628.20" y="415.5" > +/g> +g > Liquid::ParserSwitching#parse_with_selected_parser (4) (0 ms, 0.00%) @@ -4598,45 +4598,45 @@ Liquid::VariableLookup#initialize (160) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#demodulize (404) (1 ms, 0.03%) - - - +text x="276.97" y="591.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (404) (1 ms, 0.03%) +text x="393.22" y="367.5" > +/g> +g > Liquid::Variable#initialize (2) (0 ms, 0.00%) - - - -ThemeCheck::RequiredLayoutThemeObject#on_variable (204) (0 ms, 0.00%) - - - +text x="229.43" y="543.5" > +/g> +g > +title>PlatformosCheck::RequiredLayoutThemeObject#on_variable (204) (0 ms, 0.00%) +text x="1016.92" y="639.5" > +/g> +g > Kernel#is_a? (2933) (0 ms, 0.00%) String#initialize_copy (3014) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#attributes (86) (1 ms, 0.03%) - - - +text x="1016.08" y="511.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (86) (1 ms, 0.03%) +text x="135.91" y="783.5" > +/g> +g > Nokogiri::XML::Node#node_name (2014) (1 ms, 0.03%) String#scan (52) (4 ms, 0.11%) - - - -ThemeCheck::HtmlNode#name (836) (1 ms, 0.03%) - - - +text x="190.19" y="335.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#name (836) (1 ms, 0.03%) +text x="84.56" y="703.5" > +/g> +g > String#scan (884) (2 ms, 0.05%) @@ -4646,13 +4646,13 @@ <Class::Liquid::Tag>#parse (1) (2 ms, 0.05%) - - - -ThemeCheck::Node#tag? (1820) (1 ms, 0.03%) - - - +text x="245.56" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (1820) (1 ms, 0.03%) +text x="712.57" y="511.5" > +/g> +g > Class#new (41) (1 ms, 0.03%) @@ -4666,109 +4666,109 @@ Liquid::Variable#strict_parse (6) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (154) (0 ms, 0.00%) - - - +text x="226.34" y="335.5" > +/g> +g > +title>PlatformosCheck::Node#markup (154) (0 ms, 0.00%) +text x="1377.90" y="719.5" > +/g> +g > String#scan (1796) (1 ms, 0.03%) - - - -ThemeCheck::UnknownFilter#on_variable (415) (1 ms, 0.03%) - - - +text x="895.52" y="575.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (415) (1 ms, 0.03%) +text x="1613.43" y="799.5" > +/g> +g > Nokogiri::XML::Node#internal_subset (310) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (82) (0 ms, 0.00%) - - - +text x="1711.65" y="671.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (82) (0 ms, 0.00%) +text x="466.19" y="335.5" > +/g> +g > Liquid::Case#parse (2) (0 ms, 0.00%) Class#new (260) (0 ms, 0.00%) - - - -ThemeCheck::ShopifyLiquid::Object#plus_labels (1) (2 ms, 0.05%) - - - -Class#new (401) (0 ms, 0.00%) - +text x="152.15" y="607.5" > +/g> +g > +title>PlatformosCheck::ShopifyLiquid::Object#plus_labels (1) (2 ms, 0.05%) +text x="1719.88" y="879.5" > +/g> +g > +Class#new (401) (0 ms, 0.00%) + <Class::Liquid::Tag>#parse (8) (3 ms, 0.08%) - - - -ThemeCheck::Node#children (41) (1 ms, 0.03%) - - - +text x="164.97" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#children (41) (1 ms, 0.03%) +text x="725.52" y="527.5" > +/g> +g > Liquid::If#parse_binary_comparisons (7) (0 ms, 0.00%) - - - -ThemeCheck::AssetUrlFilters#on_variable (415) (1 ms, 0.03%) - - - +text x="224.82" y="399.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#on_variable (415) (1 ms, 0.03%) +text x="1537.94" y="799.5" > +/g> +g > Class#new (4) (0 ms, 0.00%) Liquid::VariableLookup#initialize (127) (1 ms, 0.03%) - - - -ThemeCheck::Node#type_name (788) (7 ms, 0.19%) - - - +text x="253.25" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (788) (7 ms, 0.19%) +text x="1590.39" y="783.5" > +/g> +g > Liquid::Lexer#tokenize (20) (0 ms, 0.00%) String#end_with? (13350) (2 ms, 0.05%) - - - -ThemeCheck::Position#start_line_offset (373) (25 ms, 0.67%) - - - -ThemeCheck::Node#tag? (704) (0 ms, 0.00%) - - - +text x="1705.14" y="751.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (373) (25 ms, 0.67%) +text x="1556.16" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (704) (0 ms, 0.00%) +text x="1139.02" y="607.5" > +/g> +g > StringScanner#scan_until (25133) (11 ms, 0.29%) - - - -ThemeCheck::StringHelpers#demodulize (858) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (91) (1 ms, 0.03%) - - - +text x="1271.72" y="655.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (858) (1 ms, 0.03%) +text x="547.22" y="527.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (91) (1 ms, 0.03%) +text x="1617.41" y="879.5" > +/g> +g > Kernel#initialize_dup (681) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (1204) (1 ms, 0.03%) - - - +text x="1575.56" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (1204) (1 ms, 0.03%) +text x="1289.59" y="671.5" > +/g> +g > <Class::Liquid::Expression>#parse (25) (0 ms, 0.00%) @@ -4782,25 +4782,25 @@ Array#each (124) (13 ms, 0.35%) - - - -ThemeCheck::Node#start_index (220) (2 ms, 0.05%) - - - -ThemeCheck::Position#contents (1073) (1 ms, 0.03%) - - - +text x="359.03" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (220) (2 ms, 0.05%) +text x="1376.85" y="703.5" > +/g> +g > +title>PlatformosCheck::Position#contents (1073) (1 ms, 0.03%) +text x="1004.05" y="559.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (5) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag_markup (336) (0 ms, 0.00%) - - - +text x="165.07" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (336) (0 ms, 0.00%) +text x="1600.55" y="735.5" > +/g> +g > Kernel#respond_to? (72624) (11 ms, 0.29%) @@ -4814,85 +4814,85 @@ Class#new (6) (0 ms, 0.00%) - - - -ThemeCheck::AssetUrlFilters#on_variable (204) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (180) (1 ms, 0.03%) - - - +text x="242.18" y="399.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#on_variable (204) (0 ms, 0.00%) +text x="995.35" y="639.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (180) (1 ms, 0.03%) +text x="1133.04" y="591.5" > +/g> +g > String#index (238) (1 ms, 0.03%) - - - -ThemeCheck::Position#contents (780) (0 ms, 0.00%) - - - +text x="1122.23" y="575.5" > +/g> +g > +title>PlatformosCheck::Position#contents (780) (0 ms, 0.00%) +text x="1032.33" y="543.5" > +/g> +g > Liquid::Condition#initialize (260) (0 ms, 0.00%) - - - -ThemeCheck::Node#start_index (150) (2 ms, 0.05%) - - - +text x="152.23" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (150) (2 ms, 0.05%) +text x="797.22" y="543.5" > +/g> +g > Liquid::If#initialize (5) (1 ms, 0.03%) - - - -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (780) (0 ms, 0.00%) - - - +text x="213.00" y="607.5" > +/g> +g > +title>PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (780) (0 ms, 0.00%) +text x="1032.75" y="559.5" > +/g> +g > String#count (115) (0 ms, 0.00%) Liquid::If#parse_comparison (6) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#on_include (21) (6 ms, 0.16%) - - - -ThemeCheck::Node#comment? (1515) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#attributes (9) (1 ms, 0.03%) - - - +text x="192.37" y="255.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (21) (6 ms, 0.16%) +text x="708.10" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1515) (1 ms, 0.03%) +text x="641.09" y="607.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (9) (1 ms, 0.03%) +text x="82.24" y="591.5" > +/g> +g > Liquid::If#parse (5) (1 ms, 0.03%) - - - -ThemeCheck::SpaceInsideBraces#on_variable (209) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call_check_method (37008) (31 ms, 0.82%) - - - +text x="213.30" y="623.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_variable (209) (1 ms, 0.03%) +text x="898.83" y="607.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (37008) (31 ms, 0.82%) +text x="477.41" y="431.5" > +/g> +g > <Module::JSON>#parse (1) (0 ms, 0.00%) String#gsub! (1018) (1 ms, 0.03%) - - - -ThemeCheck::AssetUrlFilters#record_variable_offense (415) (1 ms, 0.03%) - - - +text x="441.84" y="415.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#record_variable_offense (415) (1 ms, 0.03%) +text x="1538.04" y="783.5" > +/g> +g > Liquid::BlockBody#parse (4) (1 ms, 0.03%) @@ -4910,61 +4910,61 @@ Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (4) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_line_offset (50) (2 ms, 0.05%) - - - +text x="234.78" y="207.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (50) (2 ms, 0.05%) +text x="1455.15" y="671.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (12) (1 ms, 0.03%) Array#hash (256) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (1941) (14 ms, 0.37%) - - - +text x="799.92" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#children (1941) (14 ms, 0.37%) +text x="1040.60" y="735.5" > +/g> +g > Liquid::Lexer#tokenize (161) (3 ms, 0.08%) Liquid::Parser#expression (407) (4 ms, 0.11%) - - - -ThemeCheck::Node#tag? (429) (0 ms, 0.00%) - - - +text x="154.97" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (429) (0 ms, 0.00%) +text x="379.40" y="351.5" > +/g> +g > <Class::Liquid::Tag>#parse (4) (0 ms, 0.00%) Array#map (88) (0 ms, 0.00%) - - - -ThemeCheck::Node#initialize (515) (1 ms, 0.03%) - - - +text x="1290.77" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (515) (1 ms, 0.03%) +text x="438.92" y="399.5" > +/g> +g > Thread:70229623513180 (3,758 ms, 100.01%) Thread:70229623513180 String#gsub (84) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (2) (1 ms, 0.03%) - - - +text x="82.29" y="527.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (2) (1 ms, 0.03%) +text x="1371.41" y="719.5" > +/g> +g > Liquid::BlockBody#parse_for_document (1) (0 ms, 0.00%) @@ -4998,33 +4998,33 @@ Array#reverse_each (152) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag_markup (135) (8 ms, 0.21%) - - - +text x="239.05" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (135) (8 ms, 0.21%) +text x="533.04" y="415.5" > +/g> +g > Psych::Visitors::Visitor#visit (1) (2 ms, 0.05%) - - - -ThemeCheck::Node#type_name (72) (1 ms, 0.03%) - - - -ThemeCheck::ParserBlockingScriptTag#on_variable (196) (1 ms, 0.03%) - - - +text x="1295.89" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (72) (1 ms, 0.03%) +text x="796.23" y="559.5" > +/g> +g > +title>PlatformosCheck::ParserBlockingScriptTag#on_variable (196) (1 ms, 0.03%) +text x="710.83" y="543.5" > +/g> +g > Pathname#relative? (91) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (300) (1 ms, 0.03%) - - - +text x="318.78" y="799.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (300) (1 ms, 0.03%) +text x="433.16" y="271.5" > +/g> +g > Class#new (56) (1 ms, 0.03%) @@ -5034,41 +5034,41 @@ Class#new (127) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (847) (2 ms, 0.05%) - - - +text x="253.23" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (847) (2 ms, 0.05%) +text x="1381.00" y="687.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (2) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_offset (1073) (12 ms, 0.32%) - - - +text x="229.43" y="511.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (1073) (12 ms, 0.32%) +text x="1004.59" y="575.5" > +/g> +g > Liquid::BlockBody#parse_for_liquid_tag (5) (0 ms, 0.00%) - - - -ThemeCheck::Node#position (773) (1 ms, 0.03%) - - - +text x="258.06" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#position (773) (1 ms, 0.03%) +text x="697.81" y="495.5" > +/g> +g > Liquid::Block#parse_body (4) (1 ms, 0.03%) Liquid::Lexer#tokenize (14) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (786) (0 ms, 0.00%) - - - +text x="162.58" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (786) (0 ms, 0.00%) +text x="440.21" y="447.5" > +/g> +g > Liquid::BlockBody#parse (4) (0 ms, 0.00%) @@ -5082,37 +5082,37 @@ Liquid::Variable#strict_parse (12) (1 ms, 0.03%) - - - -ThemeCheck::UnknownFilter#on_variable (90) (0 ms, 0.00%) - - - +text x="164.57" y="415.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (90) (0 ms, 0.00%) +text x="636.01" y="511.5" > +/g> +g > Class#new (6) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (21) (1 ms, 0.03%) - - - -ThemeCheck::Theme#[] (21) (6 ms, 0.16%) - - - -ThemeCheck::Position#needle (180) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#element? (868) (1 ms, 0.03%) - - - -ThemeCheck::Node#block_body? (542) (0 ms, 0.00%) - - - +text x="284.51" y="639.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (21) (6 ms, 0.16%) +text x="708.14" y="511.5" > +/g> +g > +title>PlatformosCheck::Position#needle (180) (2 ms, 0.05%) +text x="1132.95" y="607.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#element? (868) (1 ms, 0.03%) +text x="110.83" y="799.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (542) (0 ms, 0.00%) +text x="523.73" y="415.5" > +/g> +g > <Class::Liquid::Tag>#parse (8) (3 ms, 0.08%) @@ -5126,25 +5126,25 @@ Liquid::BlockBody#parse (4) (6 ms, 0.16%) - - - -ThemeCheck::UndefinedObject#on_assign (36) (0 ms, 0.00%) - - - +text x="242.82" y="463.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_assign (36) (0 ms, 0.00%) +text x="1291.58" y="703.5" > +/g> +g > Liquid::BlockBody#parse (1) (2 ms, 0.05%) Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (47) (2 ms, 0.05%) - - - -ThemeCheck::Checks#call_check_method (4928) (3 ms, 0.08%) - - - +text x="236.39" y="447.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (4928) (3 ms, 0.08%) +text x="74.87" y="591.5" > +/g> +g > Pathname#to_s (292) (0 ms, 0.00%) @@ -5170,33 +5170,33 @@ Liquid::VariableLookup#initialize (42) (1 ms, 0.03%) - - - -ThemeCheck::Node#start_index (20) (0 ms, 0.00%) - - - -ThemeCheck::Node#block_body? (503) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (369) (3 ms, 0.08%) - - - +text x="268.95" y="479.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (20) (0 ms, 0.00%) +text x="389.48" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (503) (0 ms, 0.00%) +text x="576.51" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (369) (3 ms, 0.08%) +text x="1025.41" y="623.5" > +/g> +g > Liquid::BlockBody#parse_for_document (8) (11 ms, 0.29%) Liquid::VariableLookup#initialize (40) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (150) (2 ms, 0.05%) - - - +text x="175.27" y="431.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (150) (2 ms, 0.05%) +text x="797.29" y="527.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (52) (4 ms, 0.11%) @@ -5210,21 +5210,21 @@ <Class::Liquid::Tag>#parse (52) (17 ms, 0.45%) - - - -ThemeCheck::Analyzer#finish (1) (15 ms, 0.40%) - - - +text x="185.12" y="431.5" > +/g> +g > +title>PlatformosCheck::Analyzer#finish (1) (15 ms, 0.40%) +text x="1716.88" y="959.5" > +/g> +g > Liquid::Variable#strict_parse (9) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (1013) (7 ms, 0.19%) - - - +text x="179.16" y="415.5" > +/g> +g > +title>PlatformosCheck::Node#children (1013) (7 ms, 0.19%) +text x="583.10" y="575.5" > +/g> +g > Liquid::Variable::ParseTreeVisitor#children (166) (0 ms, 0.00%) @@ -5238,25 +5238,25 @@ Liquid::BlockBody#create_variable (4) (1 ms, 0.03%) - - - -ThemeCheck::Position#contents (721) (0 ms, 0.00%) - - - +text x="248.20" y="191.5" > +/g> +g > +title>PlatformosCheck::Position#contents (721) (0 ms, 0.00%) +text x="880.89" y="527.5" > +/g> +g > Liquid::Parser#look (415) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (375) (4 ms, 0.11%) - - - -ThemeCheck::TranslationKeyExists#key_exists? (38) (0 ms, 0.00%) - - - +text x="283.71" y="639.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (375) (4 ms, 0.11%) +text x="1135.82" y="623.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#key_exists? (38) (0 ms, 0.00%) +text x="1035.12" y="623.5" > +/g> +g > Regexp#match? (788) (0 ms, 0.00%) @@ -5278,17 +5278,17 @@ Array#each (508) (243 ms, 6.47%) -Array#each (5.. - - -ThemeCheck::Position#needle (1090) (5 ms, 0.13%) - - - -ThemeCheck::TranslationKeyExists#on_variable (415) (4 ms, 0.11%) - - - +text x="355.40" y="479.5" >Array#each (5.. +/g> +g > +title>PlatformosCheck::Position#needle (1090) (5 ms, 0.13%) +text x="1285.58" y="639.5" > +/g> +g > +title>PlatformosCheck::TranslationKeyExists#on_variable (415) (4 ms, 0.11%) +text x="1611.38" y="799.5" > +/g> +g > Liquid::BlockBody#parse_for_document (12) (1 ms, 0.03%) @@ -5298,17 +5298,17 @@ Array#each (632) (48 ms, 1.28%) -A.. - - -ThemeCheck::Node#source (624) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (14) (4 ms, 0.11%) - - - +text x="60.30" y="703.5" >A.. +/g> +g > +title>PlatformosCheck::Node#source (624) (0 ms, 0.00%) +text x="1029.89" y="607.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (14) (4 ms, 0.11%) +text x="626.71" y="495.5" > +/g> +g > Liquid::For#parse (2) (2 ms, 0.05%) @@ -5334,13 +5334,13 @@ Liquid::Lexer#tokenize (25) (1 ms, 0.03%) - - - -ThemeCheck::Check#ignored? (2149) (1 ms, 0.03%) - - - +text x="145.45" y="623.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (2149) (1 ms, 0.03%) +text x="575.82" y="479.5" > +/g> +g > String#downcase! (1782) (0 ms, 0.00%) @@ -5354,13 +5354,13 @@ Liquid::ParserSwitching#strict_parse_with_error_context (5) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (403) (1 ms, 0.03%) - - - +text x="166.34" y="431.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (403) (1 ms, 0.03%) +text x="414.60" y="399.5" > +/g> +g > Hash#each_pair (1) (1 ms, 0.03%) @@ -5370,13 +5370,13 @@ Liquid::BlockBody#whitespace_handler (114) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (165) (0 ms, 0.00%) - - - +text x="213.64" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#markup (165) (0 ms, 0.00%) +text x="1000.64" y="575.5" > +/g> +g > Liquid::BlockBody#parse_for_document (70) (25 ms, 0.67%) @@ -5386,93 +5386,93 @@ Set#initialize (31) (0 ms, 0.00%) - - - -ThemeCheck::Position#content_line_count (70) (0 ms, 0.00%) - - - +text x="1568.52" y="767.5" > +/g> +g > +title>PlatformosCheck::Position#content_line_count (70) (0 ms, 0.00%) +text x="527.55" y="319.5" > +/g> +g > Nokogiri::XML::Node#node_name (1792) (0 ms, 0.00%) - - - -ThemeCheck::Node#start_index (721) (14 ms, 0.37%) - - - +text x="103.69" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (721) (14 ms, 0.37%) +text x="878.02" y="575.5" > +/g> +g > Liquid::Parser#variable_lookups (38) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (706) (0 ms, 0.00%) - - - +text x="241.46" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (706) (0 ms, 0.00%) +text x="414.04" y="415.5" > +/g> +g > Psych::Visitors::Visitor#accept (1) (1 ms, 0.03%) Enumerable#find (7) (2 ms, 0.05%) - - - -ThemeCheck::MissingTemplate#on_include (1) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (763) (0 ms, 0.00%) - - - +text x="531.08" y="399.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (1) (0 ms, 0.00%) +text x="376.78" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (763) (0 ms, 0.00%) +text x="469.12" y="479.5" > +/g> +g > Enumerable#flat_map (1881) (3 ms, 0.08%) Array#each (52) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (2055) (13 ms, 0.35%) - - - -ThemeCheck::LiquidTag#on_tag (8) (1 ms, 0.03%) - - - +text x="191.91" y="223.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (2055) (13 ms, 0.35%) +text x="736.11" y="639.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (8) (1 ms, 0.03%) +text x="487.99" y="415.5" > +/g> +g > <Class::Liquid::Expression>#parse (38) (1 ms, 0.03%) - - - -ThemeCheck::NestedSnippet#on_document (91) (1 ms, 0.03%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (253) (3 ms, 0.08%) - - - +text x="240.97" y="399.5" > +/g> +g > +title>PlatformosCheck::NestedSnippet#on_document (91) (1 ms, 0.03%) +text x="1623.23" y="831.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (253) (3 ms, 0.08%) +text x="1036.75" y="623.5" > +/g> +g > Liquid::BlockBody#parse_liquid_tag (5) (3 ms, 0.08%) - - - -ThemeCheck::UnusedAssign#on_variable_lookup (88) (1 ms, 0.03%) - - - +text x="269.95" y="671.5" > +/g> +g > +title>PlatformosCheck::UnusedAssign#on_variable_lookup (88) (1 ms, 0.03%) +text x="410.86" y="319.5" > +/g> +g > <Object::Object>#[] (6684) (6 ms, 0.16%) String#tr! (1782) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (171) (1 ms, 0.03%) - - - +text x="1157.81" y="735.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (171) (1 ms, 0.03%) +text x="537.00" y="415.5" > +/g> +g > Liquid::ParseContext#parse_expression (85) (1 ms, 0.03%) @@ -5494,13 +5494,13 @@ Symbol#to_s (1474) (0 ms, 0.00%) - - - -ThemeCheck::Node#initialize (2163) (2 ms, 0.05%) - - - +text x="582.92" y="575.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (2163) (2 ms, 0.05%) +text x="1043.24" y="687.5" > +/g> +g > Pathname#sub_ext (91) (0 ms, 0.00%) @@ -5510,39 +5510,39 @@ Array#each (158) (5 ms, 0.13%) - - - -ThemeCheck::Node#children (456) (3 ms, 0.08%) - - - +text x="362.40" y="223.5" > +/g> +g > +title>PlatformosCheck::Node#children (456) (3 ms, 0.08%) +text x="391.17" y="383.5" > +/g> +g > Liquid::Tokenizer#shift (408) (0 ms, 0.00%) Liquid::BlockBody#parse_for_document (11) (1 ms, 0.03%) - +text x="189.43" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (1985) (1 ms, 0.03%) +text x="1457.74" y="735.5" > +/g> +g > +Pathname#to_s (342) (0 ms, 0.00%) +text x="1039.16" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (8) (1 ms, 0.03%) +text x="489.78" y="399.5" > +/g> +g > +Array#each (91) (2,814 ms, 74.89%) +Array#each (91) -ThemeCheck::Node#tag? (1985) (1 ms, 0.03%) - - - -Pathname#to_s (342) (0 ms, 0.00%) - - - -ThemeCheck::Node#inside_liquid_tag? (8) (1 ms, 0.03%) - - - -Array#each (91) (2,814 ms, 74.89%) -Array#each (91) - - -Liquid::Parser#expression (56) (0 ms, 0.00%) - +Liquid::Parser#expression (56) (0 ms, 0.00%) + Liquid::If#strict_parse (3) (0 ms, 0.00%) @@ -5550,45 +5550,45 @@ Liquid::BlockBody#create_variable (2) (0 ms, 0.00%) - - - -ThemeCheck::Node#document? (660) (0 ms, 0.00%) - - - +text x="229.17" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#document? (660) (0 ms, 0.00%) +text x="1238.88" y="671.5" > +/g> +g > StringScanner#scan_until (5645) (2 ms, 0.05%) - - - -ThemeCheck::Node#markup (100) (0 ms, 0.00%) - - - +text x="625.73" y="383.5" > +/g> +g > +title>PlatformosCheck::Node#markup (100) (0 ms, 0.00%) +text x="1463.38" y="751.5" > +/g> +g > Liquid::If#strict_parse (5) (0 ms, 0.00%) - - - -ThemeCheck::Node#line_number (131) (0 ms, 0.00%) - - - +text x="165.07" y="415.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (131) (0 ms, 0.00%) +text x="437.68" y="303.5" > +/g> +g > Liquid::BlockBody#parse_liquid_tag (2) (1 ms, 0.03%) Pathname#glob (1) (8 ms, 0.21%) - - - -ThemeCheck::Node#line_number (624) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call (1132) (9 ms, 0.24%) - - - +text x="1739.26" y="911.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (624) (1 ms, 0.03%) +text x="800.39" y="527.5" > +/g> +g > +title>PlatformosCheck::Checks#call (1132) (9 ms, 0.24%) +text x="78.63" y="655.5" > +/g> +g > Class#new (74) (4 ms, 0.11%) @@ -5598,13 +5598,13 @@ <Object::Object>#[] (541) (0 ms, 0.00%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (193) (0 ms, 0.00%) - - - +text x="374.79" y="255.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (193) (0 ms, 0.00%) +text x="1119.93" y="671.5" > +/g> +g > Symbol#to_s (2572) (1 ms, 0.03%) @@ -5618,37 +5618,37 @@ Liquid::If#push_block (3) (0 ms, 0.00%) - - - -ThemeCheck::Position#initialize (373) (0 ms, 0.00%) - - - +text x="247.70" y="223.5" > +/g> +g > +title>PlatformosCheck::Position#initialize (373) (0 ms, 0.00%) +text x="1547.06" y="719.5" > +/g> +g > String#gsub! (622) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (508) (0 ms, 0.00%) - - - +text x="719.09" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (508) (0 ms, 0.00%) +text x="408.56" y="287.5" > +/g> +g > String#tr! (1917) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (112) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (91) (5 ms, 0.13%) - - - -ThemeCheck::Position#can_find_needle? (773) (4 ms, 0.11%) - - - +text x="920.45" y="671.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (112) (0 ms, 0.00%) +text x="435.17" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#children (91) (5 ms, 0.13%) +text x="1614.78" y="895.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (773) (4 ms, 0.11%) +text x="699.41" y="463.5" > +/g> +g > Kernel#respond_to? (8708) (1 ms, 0.03%) @@ -5662,21 +5662,21 @@ Array#- (415) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (1680) (13 ms, 0.35%) - - - -ThemeCheck::UnusedAssign#on_variable_lookup (209) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (132) (0 ms, 0.00%) - - - +text x="1613.66" y="783.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (1680) (13 ms, 0.35%) +text x="1601.86" y="751.5" > +/g> +g > +title>PlatformosCheck::UnusedAssign#on_variable_lookup (209) (1 ms, 0.03%) +text x="1466.54" y="767.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (132) (0 ms, 0.00%) +text x="390.82" y="239.5" > +/g> +g > Pathname#sub_ext (393) (1 ms, 0.03%) @@ -5694,17 +5694,17 @@ Liquid::If#strict_parse (3) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#ignore? (342) (2 ms, 0.05%) - - - -ThemeCheck::Node#block? (504) (1 ms, 0.03%) - - - +text x="231.27" y="335.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#ignore? (342) (2 ms, 0.05%) +text x="1036.03" y="623.5" > +/g> +g > +title>PlatformosCheck::Node#block? (504) (1 ms, 0.03%) +text x="576.36" y="463.5" > +/g> +g > Pathname#chop_basename (280) (1 ms, 0.03%) @@ -5714,13 +5714,13 @@ Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (9) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#visit (590) (182 ms, 4.84%) -ThemeChec.. - - +text x="227.62" y="447.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (590) (182 ms, 4.84%) +text x="53.82" y="879.5" >ThemeChec.. +/g> +g > Array#shift (1516) (0 ms, 0.00%) @@ -5734,41 +5734,41 @@ Class#new (4) (1 ms, 0.03%) - - - -ThemeCheck::Node#block? (239) (1 ms, 0.03%) - - - +text x="248.21" y="159.5" > +/g> +g > +title>PlatformosCheck::Node#block? (239) (1 ms, 0.03%) +text x="487.73" y="399.5" > +/g> +g > Pathname#initialize (2003) (1 ms, 0.03%) - - - -ThemeCheck::Position#can_find_needle? (365) (2 ms, 0.05%) - - - +text x="885.94" y="495.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (365) (2 ms, 0.05%) +text x="897.70" y="527.5" > +/g> +g > Liquid::BlockBody#create_variable (70) (4 ms, 0.11%) - - - -ThemeCheck::Position#start_offset (721) (7 ms, 0.19%) - - - +text x="166.69" y="591.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (721) (7 ms, 0.19%) +text x="881.26" y="543.5" > +/g> +g > Regexp#=== (674) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (96) (4 ms, 0.11%) - - - -ThemeCheck::ThemeFile#name (393) (1 ms, 0.03%) - - - +text x="253.71" y="463.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (96) (4 ms, 0.11%) +text x="726.19" y="527.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (393) (1 ms, 0.03%) +text x="1379.38" y="687.5" > +/g> +g > Liquid::Case#unknown_tag (26) (0 ms, 0.00%) @@ -5778,45 +5778,45 @@ Liquid::Tokenizer#shift (1669) (2 ms, 0.05%) - - - -ThemeCheck::Node#start_index (70) (1 ms, 0.03%) - - - +text x="288.15" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (70) (1 ms, 0.03%) +text x="580.37" y="447.5" > +/g> +g > Array#each_index (127) (0 ms, 0.00%) Liquid::For#parse (25) (87 ms, 2.32%) -Liq.. - - -ThemeCheck::HtmlVisitor#visit (662) (113 ms, 3.01%) -Theme.. - - -ThemeCheck::Visitor#call_checks (60) (2 ms, 0.05%) - - - +text x="174.00" y="735.5" >Liq.. +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (662) (113 ms, 3.01%) +text x="57.33" y="783.5" >Theme.. +/g> +g > +title>PlatformosCheck::Visitor#call_checks (60) (2 ms, 0.05%) +text x="361.00" y="223.5" > +/g> +g > String#=~ (947) (1 ms, 0.03%) Class#new (256) (1 ms, 0.03%) - - - -ThemeCheck::Node#type_name (429) (3 ms, 0.08%) - - - -ThemeCheck::Node#markup (436) (1 ms, 0.03%) - - - +text x="1242.03" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (429) (3 ms, 0.08%) +text x="379.50" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#markup (436) (1 ms, 0.03%) +text x="1288.27" y="687.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (56) (3 ms, 0.08%) @@ -5826,13 +5826,13 @@ Liquid::Lexer#tokenize (24) (0 ms, 0.00%) - - - -ThemeCheck::UnknownFilter#on_variable (196) (1 ms, 0.03%) - - - +text x="187.71" y="127.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (196) (1 ms, 0.03%) +text x="728.69" y="543.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (3) (0 ms, 0.00%) @@ -5846,13 +5846,13 @@ Liquid::ParserSwitching#strict_parse_with_error_context (7) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#element? (746) (1 ms, 0.03%) - - - +text x="224.70" y="431.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#element? (746) (1 ms, 0.03%) +text x="77.60" y="671.5" > +/g> +g > Nokogiri::XML::NodeSet#each (734) (2 ms, 0.05%) @@ -5862,13 +5862,13 @@ String#scan (9) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call (364) (17 ms, 0.45%) - - - +text x="235.10" y="335.5" > +/g> +g > +title>PlatformosCheck::Checks#call (364) (17 ms, 0.45%) +text x="1617.86" y="879.5" > +/g> +g > Class#new (30) (2 ms, 0.05%) @@ -5902,57 +5902,57 @@ Psych::Visitors::Visitor#visit (1) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_offset (1896) (18 ms, 0.48%) - - - +text x="1719.50" y="735.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (1896) (18 ms, 0.48%) +text x="1248.87" y="639.5" > +/g> +g > <Class::File>#join (464) (1 ms, 0.03%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (250) (3 ms, 0.08%) - - - +text x="1728.45" y="863.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (250) (3 ms, 0.08%) +text x="799.67" y="559.5" > +/g> +g > Psych::Visitors::Visitor#visit (83) (1 ms, 0.03%) Liquid::Lexer#tokenize (12) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#call_checks (1376) (14 ms, 0.37%) - - - +text x="164.21" y="287.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#call_checks (1376) (14 ms, 0.37%) +text x="120.33" y="831.5" > +/g> +g > Kernel#is_a? (2289) (0 ms, 0.00%) String#rindex (1500) (1 ms, 0.03%) - - - -ThemeCheck::Position#compute_start_offset (85) (7 ms, 0.19%) - - - +text x="1392.79" y="799.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (85) (7 ms, 0.19%) +text x="881.37" y="527.5" > +/g> +g > Enumerable#each_slice (1) (2 ms, 0.05%) Liquid::ParserSwitching#strict_parse_with_error_context (31) (1 ms, 0.03%) - - - -ThemeCheck::Node#literal? (1872) (1 ms, 0.03%) - - - +text x="228.01" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (1872) (1 ms, 0.03%) +text x="808.16" y="671.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (2) (0 ms, 0.00%) @@ -5966,13 +5966,13 @@ Enumerable#find (3) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_index (1090) (7 ms, 0.19%) - - - +text x="433.12" y="303.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (1090) (7 ms, 0.19%) +text x="1284.78" y="655.5" > +/g> +g > Psych::TreeBuilder#scalar (83) (0 ms, 0.00%) @@ -5990,21 +5990,21 @@ <Class::Liquid::Tag>#parse (1) (1 ms, 0.03%) - - - -ThemeCheck::FileSystemStorage#glob (1) (25 ms, 0.67%) - - - +text x="249.74" y="351.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#glob (1) (25 ms, 0.67%) +text x="1731.63" y="927.5" > +/g> +g > Kernel#loop (127) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (373) (1 ms, 0.03%) - - - +text x="256.80" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (373) (1 ms, 0.03%) +text x="1547.23" y="735.5" > +/g> +g > String#to_sym (1917) (1 ms, 0.03%) @@ -6014,21 +6014,21 @@ Liquid::Variable#strict_parse (6) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_string (239) (1 ms, 0.03%) - - - +text x="236.02" y="335.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (239) (1 ms, 0.03%) +text x="487.66" y="415.5" > +/g> +g > String#gsub! (1300) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_string (120) (0 ms, 0.00%) - - - +text x="497.46" y="479.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (120) (0 ms, 0.00%) +text x="375.95" y="255.5" > +/g> +g > Liquid::Parser#initialize (8) (0 ms, 0.00%) @@ -6042,41 +6042,41 @@ String#index (545) (2 ms, 0.05%) - - - -ThemeCheck::Position#contents (1090) (1 ms, 0.03%) - - - -ThemeCheck::Node#type_name (231) (2 ms, 0.05%) - - - +text x="722.94" y="447.5" > +/g> +g > +title>PlatformosCheck::Position#contents (1090) (1 ms, 0.03%) +text x="1287.55" y="623.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (231) (2 ms, 0.05%) +text x="1130.07" y="655.5" > +/g> +g > Enumerable#map (7) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (700) (0 ms, 0.00%) - - - +text x="100.77" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (700) (0 ms, 0.00%) +text x="725.09" y="511.5" > +/g> +g > Pathname#read (51) (33 ms, 0.88%) Liquid::VariableLookup#initialize (33) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_offset (40) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag? (1138) (1 ms, 0.03%) - - - +text x="208.46" y="351.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (40) (1 ms, 0.03%) +text x="407.73" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (1138) (1 ms, 0.03%) +text x="629.26" y="479.5" > +/g> +g > Kernel#respond_to? (30576) (4 ms, 0.11%) @@ -6102,13 +6102,13 @@ Kernel#class (2646) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#attributes (54) (0 ms, 0.00%) - - - +text x="1045.99" y="719.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (54) (0 ms, 0.00%) +text x="82.01" y="591.5" > +/g> +g > JSON::Ext::Parser#parse (1) (0 ms, 0.00%) @@ -6118,13 +6118,13 @@ Liquid::ParserSwitching#parse_with_selected_parser (5) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (420) (0 ms, 0.00%) - - - +text x="163.36" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (420) (0 ms, 0.00%) +text x="635.89" y="447.5" > +/g> +g > Regexp#=== (1116) (1 ms, 0.03%) @@ -6134,13 +6134,13 @@ Liquid::ResourceLimits#initialize (91) (0 ms, 0.00%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (242) (4 ms, 0.11%) - - - +text x="141.78" y="799.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (242) (4 ms, 0.11%) +text x="1460.52" y="751.5" > +/g> +g > Liquid::Lexer#tokenize (9) (0 ms, 0.00%) @@ -6150,13 +6150,13 @@ Liquid::Parser#initialize (8) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (61) (1 ms, 0.03%) - - - +text x="244.68" y="223.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (61) (1 ms, 0.03%) +text x="541.87" y="447.5" > +/g> +g > Liquid::BlockBody#parse_for_document (3) (1 ms, 0.03%) @@ -6166,13 +6166,13 @@ Liquid::Lexer#tokenize (56) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (82) (0 ms, 0.00%) - - - +text x="161.40" y="367.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (82) (0 ms, 0.00%) +text x="466.03" y="367.5" > +/g> +g > Array#reject (1) (1 ms, 0.03%) @@ -6190,17 +6190,17 @@ String#scan (25) (1 ms, 0.03%) - - - -ThemeCheck::Visitor#call_checks (320) (8 ms, 0.21%) - - - -ThemeCheck::RequiredLayoutThemeObject#on_variable (415) (0 ms, 0.00%) - - - +text x="232.42" y="495.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (320) (8 ms, 0.21%) +text x="365.78" y="287.5" > +/g> +g > +title>PlatformosCheck::RequiredLayoutThemeObject#on_variable (415) (0 ms, 0.00%) +text x="1576.83" y="799.5" > +/g> +g > Liquid::Variable#strict_parse (6) (1 ms, 0.03%) @@ -6210,13 +6210,13 @@ String#downcase! (1917) (0 ms, 0.00%) - - - -ThemeCheck::Node#start_index (105) (1 ms, 0.03%) - - - +text x="917.88" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (105) (1 ms, 0.03%) +text x="436.32" y="319.5" > +/g> +g > String#end_with? (4164) (1 ms, 0.03%) @@ -6226,69 +6226,69 @@ Liquid::BlockBody#parse_for_document (2) (5 ms, 0.13%) - - - -ThemeCheck::FileSystemStorage#file (14) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#literal? (638) (0 ms, 0.00%) - - - +text x="160.45" y="607.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#file (14) (1 ms, 0.03%) +text x="1716.57" y="815.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#literal? (638) (0 ms, 0.00%) +text x="111.22" y="799.5" > +/g> +g > Pathname#initialize (375) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (250) (1 ms, 0.03%) - - - +text x="1140.10" y="623.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (250) (1 ms, 0.03%) +text x="798.68" y="559.5" > +/g> +g > Kernel#loop (33) (0 ms, 0.00%) - - - -ThemeCheck::Node#initialize (1745) (2 ms, 0.05%) - - - +text x="209.38" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (1745) (2 ms, 0.05%) +text x="1143.82" y="719.5" > +/g> +g > Liquid::Variable#strict_parse (13) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag? (2337) (1 ms, 0.03%) - - - +text x="216.77" y="559.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2337) (1 ms, 0.03%) +text x="1578.89" y="767.5" > +/g> +g > Liquid::Variable#initialize (6) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (250) (1 ms, 0.03%) - - - +text x="242.19" y="383.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (250) (1 ms, 0.03%) +text x="1454.65" y="687.5" > +/g> +g > Liquid::Variable#initialize (6) (0 ms, 0.00%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (39) (3 ms, 0.08%) - - - +text x="226.33" y="383.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (39) (3 ms, 0.08%) +text x="625.25" y="399.5" > +/g> +g > Hash#each_pair (418) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#name (281) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#replace_placeholders (70) (0 ms, 0.00%) - - - +text x="1569.73" y="671.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#name (281) (0 ms, 0.00%) +text x="64.60" y="543.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#replace_placeholders (70) (0 ms, 0.00%) +text x="91.02" y="575.5" > +/g> +g > Liquid::BlockBody#parse (3) (5 ms, 0.13%) @@ -6298,21 +6298,21 @@ Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (8) (1 ms, 0.03%) - - - -ThemeCheck::Node#inside_liquid_tag? (24) (4 ms, 0.11%) - - - +text x="225.98" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (24) (4 ms, 0.11%) +text x="431.12" y="335.5" > +/g> +g > Liquid::BlockBody#create_variable (41) (2 ms, 0.05%) - - - -ThemeCheck::StringHelpers#demodulize (294) (1 ms, 0.03%) - - - +text x="211.98" y="671.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (294) (1 ms, 0.03%) +text x="893.54" y="575.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (5) (1 ms, 0.03%) @@ -6322,13 +6322,13 @@ Class#new (40) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (2501) (1 ms, 0.03%) - - - +text x="175.27" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2501) (1 ms, 0.03%) +text x="1389.91" y="831.5" > +/g> +g > Liquid::If#initialize (1) (2 ms, 0.05%) @@ -6338,13 +6338,13 @@ <Object::Object>#[] (8072) (6 ms, 0.16%) - - - -ThemeCheck::Node#children (124) (1 ms, 0.03%) - - - +text x="1220.69" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#children (124) (1 ms, 0.03%) +text x="364.86" y="287.5" > +/g> +g > <Object::Object>#[] (1392) (1 ms, 0.03%) @@ -6354,41 +6354,41 @@ Array#each (454) (0 ms, 0.00%) - - - -ThemeCheck::Node#source (348) (0 ms, 0.00%) - - - +text x="392.03" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#source (348) (0 ms, 0.00%) +text x="524.52" y="415.5" > +/g> +g > StringScanner#charpos (737) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#demodulize (1782) (2 ms, 0.05%) - - - -ThemeCheck::Node#type_name (294) (2 ms, 0.05%) - - - +text x="1282.06" y="671.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (1782) (2 ms, 0.05%) +text x="1153.08" y="751.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (294) (2 ms, 0.05%) +text x="893.25" y="591.5" > +/g> +g > <Class::Liquid::VariableLookup>#parse (55) (0 ms, 0.00%) Kernel#initialize_dup (692) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (129) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (110) (0 ms, 0.00%) - - - +text x="463.01" y="271.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (129) (0 ms, 0.00%) +text x="631.34" y="479.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (110) (0 ms, 0.00%) +text x="727.99" y="495.5" > +/g> +g > Array#each (127) (1 ms, 0.03%) @@ -6410,13 +6410,13 @@ Pathname#initialize (292) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (788) (2 ms, 0.05%) - - - +text x="1135.30" y="623.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (788) (2 ms, 0.05%) +text x="1591.22" y="767.5" > +/g> +g > Class#new (187) (1 ms, 0.03%) @@ -6430,41 +6430,41 @@ Enumerable#flat_map (2263) (3 ms, 0.08%) - - - -ThemeCheck::Visitor#call_checks (3026) (99 ms, 2.63%) -Them.. - - -ThemeCheck::Visitor#visit (62) (13 ms, 0.35%) - - - +text x="1146.34" y="751.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (3026) (99 ms, 2.63%) +text x="590.95" y="575.5" >Them.. +/g> +g > +title>PlatformosCheck::Visitor#visit (62) (13 ms, 0.35%) +text x="359.05" y="271.5" > +/g> +g > Liquid::Variable#strict_parse (20) (1 ms, 0.03%) - - - -ThemeCheck::Node#literal? (515) (0 ms, 0.00%) - - - -ThemeCheck::RemoteAsset#url_hosted_by_shopify? (74) (0 ms, 0.00%) - - - +text x="248.98" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (515) (0 ms, 0.00%) +text x="413.89" y="415.5" > +/g> +g > +title>PlatformosCheck::RemoteAsset#url_hosted_by_shopify? (74) (0 ms, 0.00%) +text x="137.61" y="783.5" > +/g> +g > Liquid::If#initialize (3) (0 ms, 0.00%) - - - -ThemeCheck::Node#block? (542) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (253) (1 ms, 0.03%) - - - +text x="231.26" y="399.5" > +/g> +g > +title>PlatformosCheck::Node#block? (542) (1 ms, 0.03%) +text x="523.56" y="431.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (253) (1 ms, 0.03%) +text x="1035.69" y="623.5" > +/g> +g > Pathname#cleanpath_aggressive (464) (8 ms, 0.21%) @@ -6478,97 +6478,97 @@ Array#each (1881) (2 ms, 0.05%) - - - -ThemeCheck::StringHelpers#demodulize (650) (2 ms, 0.05%) - - - +text x="1045.09" y="703.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (650) (2 ms, 0.05%) +text x="495.69" y="495.5" > +/g> +g > Liquid::Block#parse_body (30) (36 ms, 0.96%) - - - -ThemeCheck::Position#start_line_offset (31) (3 ms, 0.08%) - - - +text x="157.33" y="719.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (31) (3 ms, 0.08%) +text x="790.28" y="479.5" > +/g> +g > StringScanner#scan_until (12085) (4 ms, 0.11%) - - - -ThemeCheck::Position#start_line_offset (8) (1 ms, 0.03%) - - - +text x="882.62" y="479.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (8) (1 ms, 0.03%) +text x="488.31" y="319.5" > +/g> +g > JSON::Ext::Parser#parse (31) (1 ms, 0.03%) Array#push (4716) (1 ms, 0.03%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (5) (2 ms, 0.05%) - - - -ThemeCheck::Node#start_index (40) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (452) (1 ms, 0.03%) - - - +text x="43.26" y="879.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (5) (2 ms, 0.05%) +text x="1575.02" y="783.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (40) (0 ms, 0.00%) +text x="489.83" y="383.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (452) (1 ms, 0.03%) +text x="1368.85" y="655.5" > +/g> +g > Liquid::Block#parse_body (2) (1 ms, 0.03%) - - - -ThemeCheck::Node#children (1407) (10 ms, 0.27%) - - - +text x="234.57" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#children (1407) (10 ms, 0.27%) +text x="730.40" y="639.5" > +/g> +g > MatchData#end (4716) (5 ms, 0.13%) Liquid::ParserSwitching#strict_parse_with_error_context (160) (11 ms, 0.29%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (249) (5 ms, 0.13%) - - - +text x="252.76" y="511.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (249) (5 ms, 0.13%) +text x="900.01" y="607.5" > +/g> +g > Integer#upto (307) (0 ms, 0.00%) - - - -ThemeCheck::Position#line_number (373) (2 ms, 0.05%) - - - +text x="69.25" y="559.5" > +/g> +g > +title>PlatformosCheck::Position#line_number (373) (2 ms, 0.05%) +text x="1556.43" y="687.5" > +/g> +g > Liquid::ParseContext#parse_expression (66) (1 ms, 0.03%) - - - -ThemeCheck::Node#children (1597) (13 ms, 0.35%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (88) (1 ms, 0.03%) - - - +text x="158.89" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#children (1597) (13 ms, 0.35%) +text x="1297.57" y="799.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (88) (1 ms, 0.03%) +text x="410.42" y="303.5" > +/g> +g > <Class::Nokogiri::HTML5::DocumentFragment>#parse (124) (6 ms, 0.16%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (756) (11 ms, 0.29%) - - - +text x="1699.68" y="703.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (756) (11 ms, 0.29%) +text x="1593.64" y="783.5" > +/g> +g > Liquid::If#parse (1) (0 ms, 0.00%) @@ -6586,21 +6586,21 @@ Liquid::ParserSwitching#strict_parse_with_error_context (161) (8 ms, 0.21%) - - - -ThemeCheck::SpaceInsideBraces#on_node (2286) (26 ms, 0.69%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (54) (1 ms, 0.03%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (10) (3 ms, 0.08%) - - - +text x="169.51" y="591.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_node (2286) (26 ms, 0.69%) +text x="1017.08" y="639.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (54) (1 ms, 0.03%) +text x="437.53" y="335.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (10) (3 ms, 0.08%) +text x="1124.75" y="655.5" > +/g> +g > Class#new (16) (1 ms, 0.03%) @@ -6610,13 +6610,13 @@ Liquid::Block#parse (2) (2 ms, 0.05%) - - - -ThemeCheck::DeprecateBgsizes#on_div (51) (1 ms, 0.03%) - - - +text x="241.74" y="575.5" > +/g> +g > +title>PlatformosCheck::DeprecateBgsizes#on_div (51) (1 ms, 0.03%) +text x="90.58" y="639.5" > +/g> +g > Class#new (82) (3 ms, 0.08%) @@ -6646,21 +6646,21 @@ Pathname#sub_ext (1940) (2 ms, 0.05%) - - - -ThemeCheck::Node#block_body? (556) (0 ms, 0.00%) - - - +text x="708.87" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (556) (0 ms, 0.00%) +text x="1367.06" y="703.5" > +/g> +g > Liquid::BlockBody#freeze (242) (0 ms, 0.00%) - - - -ThemeCheck::Node#block_tag? (542) (0 ms, 0.00%) - - - +text x="214.34" y="703.5" > +/g> +g > +title>PlatformosCheck::Node#block_tag? (542) (0 ms, 0.00%) +text x="523.85" y="415.5" > +/g> +g > Pathname#to_s (903) (1 ms, 0.03%) @@ -6674,13 +6674,13 @@ Liquid::Block#parse_body (5) (3 ms, 0.08%) - - - -ThemeCheck::Position#needle (486) (4 ms, 0.11%) - - - +text x="234.24" y="399.5" > +/g> +g > +title>PlatformosCheck::Position#needle (486) (4 ms, 0.11%) +text x="525.49" y="383.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (9) (1 ms, 0.03%) @@ -6690,77 +6690,77 @@ Psych::Nodes::Node#to_ruby (1) (1 ms, 0.03%) - - - -ThemeCheck::Node#literal? (1013) (1 ms, 0.03%) - - - +text x="1719.48" y="847.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (1013) (1 ms, 0.03%) +text x="586.65" y="575.5" > +/g> +g > Liquid::BlockBody#parse_for_document (3) (0 ms, 0.00%) Liquid::If#parse_expression (59) (1 ms, 0.03%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (8) (1 ms, 0.03%) - - - +text x="175.17" y="527.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (8) (1 ms, 0.03%) +text x="409.63" y="319.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (2) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_node (124) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (545) (0 ms, 0.00%) - - - -ThemeCheck::AssetUrlFilters#html_resource_drop? (209) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#on_include (3) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_index (95) (1 ms, 0.03%) - - - +text x="244.23" y="351.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_node (124) (0 ms, 0.00%) +text x="369.01" y="223.5" > +/g> +g > +title>PlatformosCheck::Position#contents (545) (0 ms, 0.00%) +text x="722.39" y="479.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#html_resource_drop? (209) (0 ms, 0.00%) +text x="874.26" y="575.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (3) (1 ms, 0.03%) +text x="1371.41" y="735.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (95) (1 ms, 0.03%) +text x="465.38" y="335.5" > +/g> +g > Array#each (1553) (13 ms, 0.35%) <Class::Liquid::VariableLookup>#parse (39) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (515) (6 ms, 0.16%) - - - -ThemeCheck::MissingTemplate#on_include (3) (1 ms, 0.03%) - - - +text x="210.33" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#children (515) (6 ms, 0.16%) +text x="411.21" y="415.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (3) (1 ms, 0.03%) +text x="433.11" y="351.5" > +/g> +g > Liquid::Assign#initialize (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (1872) (12 ms, 0.32%) - - - -ThemeCheck::StringHelpers#demodulize (311) (1 ms, 0.03%) - - - +text x="269.98" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#children (1872) (12 ms, 0.32%) +text x="802.24" y="671.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (311) (1 ms, 0.03%) +text x="718.44" y="511.5" > +/g> +g > Liquid::BlockBody#parse_for_document (6) (0 ms, 0.00%) @@ -6798,25 +6798,25 @@ Liquid::For#strict_parse (13) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call_check_method (2933) (2 ms, 0.05%) - - - -ThemeCheck::Node#line_number (420) (1 ms, 0.03%) - - - -ThemeCheck::Node#block? (271) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag? (2171) (1 ms, 0.03%) - - - +text x="217.32" y="591.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (2933) (2 ms, 0.05%) +text x="65.33" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (420) (1 ms, 0.03%) +text x="635.66" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#block? (271) (1 ms, 0.03%) +text x="407.16" y="303.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2171) (1 ms, 0.03%) +text x="1127.67" y="639.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (31) (1 ms, 0.03%) @@ -6834,93 +6834,93 @@ <Module::Psych>#parse (1) (1 ms, 0.03%) - - - -StringScanner#scan (1768) (0 ms, 0.00%) - - - -String#byteslice (255) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (793) (1 ms, 0.03%) - - - -Liquid::For#parse (13) (20 ms, 0.53%) - - - -Kernel#respond_to? (1186) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (60) (1 ms, 0.03%) - - - -ThemeCheck::Node#line_number (256) (1 ms, 0.03%) - - - -Liquid::For#strict_parse (4) (0 ms, 0.00%) - - - -Symbol#to_s (2055) (1 ms, 0.03%) - - - -ThemeCheck::Node#comment? (1474) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (650) (3 ms, 0.08%) - - - -ThemeCheck::DeprecateBgsizes#on_div (65) (1 ms, 0.03%) - - - -ThemeCheck::Node#document? (721) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#initialize (632) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_offset (183) (3 ms, 0.08%) - - - -ThemeCheck::ThemeFile#name (329) (1 ms, 0.03%) - - - -ThemeCheck::Position#content_line_count (256) (1 ms, 0.03%) - - - -ThemeCheck::Position#contents (1090) (1 ms, 0.03%) - + -Liquid::ParserSwitching#strict_parse_with_error_context (9) (1 ms, 0.03%) - +StringScanner#scan (1768) (0 ms, 0.00%) + -ThemeCheck::Node#block_tag? (1133) (1 ms, 0.03%) - +String#byteslice (255) (0 ms, 0.00%) +text x="1271.54" y="639.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (793) (1 ms, 0.03%) +text x="1475.57" y="847.5" > +/g> +g > +Liquid::For#parse (13) (20 ms, 0.53%) + -ThemeCheck::Visitor#call_checks (1542) (44 ms, 1.17%) - +Kernel#respond_to? (1186) (0 ms, 0.00%) +text x="806.83" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#children (60) (1 ms, 0.03%) +text x="1134.27" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (256) (1 ms, 0.03%) +text x="1242.26" y="639.5" > +/g> +g > +Liquid::For#strict_parse (4) (0 ms, 0.00%) + +Symbol#to_s (2055) (1 ms, 0.03%) +text x="730.16" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1474) (1 ms, 0.03%) +text x="640.72" y="591.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (650) (3 ms, 0.08%) +text x="496.64" y="495.5" > +/g> +g > +title>PlatformosCheck::DeprecateBgsizes#on_div (65) (1 ms, 0.03%) +text x="100.12" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#document? (721) (0 ms, 0.00%) +text x="877.13" y="575.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#initialize (632) (0 ms, 0.00%) +text x="127.79" y="783.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (183) (3 ms, 0.08%) +text x="790.25" y="511.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (329) (1 ms, 0.03%) +text x="1378.71" y="719.5" > +/g> +g > +title>PlatformosCheck::Position#content_line_count (256) (1 ms, 0.03%) +text x="1249.57" y="575.5" > +/g> +g > +title>PlatformosCheck::Position#contents (1090) (1 ms, 0.03%) +text x="1287.27" y="607.5" > +/g> +g > +Liquid::ParserSwitching#strict_parse_with_error_context (9) (1 ms, 0.03%) +text x="199.45" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#block_tag? (1133) (1 ms, 0.03%) +text x="876.83" y="575.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (1542) (44 ms, 1.17%) +text x="471.26" y="479.5" > +/g> +g > <Class::Liquid::Condition>#parse_expression (34) (0 ms, 0.00%) @@ -6934,37 +6934,37 @@ Liquid::Block#parse_body (11) (2 ms, 0.05%) - - - -ThemeCheck::Node#tag_markup (673) (1 ms, 0.03%) - - - +text x="227.09" y="559.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (673) (1 ms, 0.03%) +text x="1608.15" y="767.5" > +/g> +g > <Module::Psych>#parse_stream (1) (4 ms, 0.11%) - - - -ThemeCheck::Node#type_name (2572) (16 ms, 0.43%) - - - -ThemeCheck::HtmlNode#attributes (9) (1 ms, 0.03%) - - - +text x="1294.06" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (2572) (16 ms, 0.43%) +text x="1305.24" y="799.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (9) (1 ms, 0.03%) +text x="117.29" y="719.5" > +/g> +g > Nokogiri::XML::Document#decorate (1185) (0 ms, 0.00%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (196) (0 ms, 0.00%) - - - -ThemeCheck::AssetUrlFilters#on_variable (193) (0 ms, 0.00%) - - - +text x="83.90" y="671.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (196) (0 ms, 0.00%) +text x="695.23" y="543.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#on_variable (193) (0 ms, 0.00%) +text x="1118.52" y="671.5" > +/g> +g > Psych::Visitors::ToRuby#accept (83) (1 ms, 0.03%) @@ -6978,17 +6978,17 @@ Liquid::If#initialize (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#inside_liquid_tag? (165) (25 ms, 0.67%) - - - -ThemeCheck::ParserBlockingScriptTag#on_variable (193) (0 ms, 0.00%) - - - +text x="247.56" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (165) (25 ms, 0.67%) +text x="998.71" y="623.5" > +/g> +g > +title>PlatformosCheck::ParserBlockingScriptTag#on_variable (193) (0 ms, 0.00%) +text x="1126.03" y="671.5" > +/g> +g > String#scan (42) (1 ms, 0.03%) @@ -7010,25 +7010,25 @@ Liquid::BlockBody#parse_liquid_tag (1) (0 ms, 0.00%) - - - -ThemeCheck::ParserBlockingScriptTag#on_variable (204) (0 ms, 0.00%) - - - +text x="249.40" y="351.5" > +/g> +g > +title>PlatformosCheck::ParserBlockingScriptTag#on_variable (204) (0 ms, 0.00%) +text x="1016.81" y="639.5" > +/g> +g > Liquid::BlockBody#parse (5) (2 ms, 0.05%) Liquid::Variable#initialize (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#initialize (803) (1 ms, 0.03%) - - - +text x="249.94" y="143.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (803) (1 ms, 0.03%) +text x="544.06" y="495.5" > +/g> +g > Hash#each (64) (0 ms, 0.00%) @@ -7050,58 +7050,58 @@ <Class::Dir>#glob (1) (2 ms, 0.05%) - - - -ThemeCheck::ValidHTMLTranslation#visit_nested (414) (112 ms, 2.98%) -Theme.. - - -ThemeCheck::Node#block? (963) (2 ms, 0.05%) - - - +text x="1739.30" y="895.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#visit_nested (414) (112 ms, 2.98%) +text x="1661.69" y="847.5" >Theme.. +/g> +g > +title>PlatformosCheck::Node#block? (963) (2 ms, 0.05%) +text x="695.80" y="527.5" > +/g> +g > Class#new (6) (1 ms, 0.03%) Liquid::BlockBody#create_variable (5) (0 ms, 0.00%) - - - -ThemeCheck::Position#can_find_needle? (411) (2 ms, 0.05%) - - - +text x="166.33" y="511.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (411) (2 ms, 0.05%) +text x="624.08" y="431.5" > +/g> +g > String#index (330) (1 ms, 0.03%) Class#new (266) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (115) (7 ms, 0.19%) - - - -ThemeCheck::Node#markup (115) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (123) (0 ms, 0.00%) - - - +text x="69.33" y="543.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (115) (7 ms, 0.19%) +text x="721.21" y="543.5" > +/g> +g > +title>PlatformosCheck::Node#markup (115) (0 ms, 0.00%) +text x="697.28" y="495.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (123) (0 ms, 0.00%) +text x="490.51" y="367.5" > +/g> +g > Kernel#respond_to? (1968) (0 ms, 0.00%) - - - -ThemeCheck::Cli#check (1) (3,758 ms, 100.01%) -ThemeCheck::Cli#check (1) - - -<Class::Liquid::Condition>#parse_expression (94) (1 ms, 0.03%) +text x="360.53" y="127.5" > +/g> +g > +title>PlatformosCheck::Cli#check (1) (3,758 ms, 100.01%) +text x="13.01" y="991.5" >PlatformosCheck::Cli#check (1) +/g> +g > +title><Class::Liquid::Condition>#parse_expression (94) (1 ms, 0.03%) @@ -7130,13 +7130,13 @@ <Class::Liquid::Expression>#parse (89) (1 ms, 0.03%) - - - -ThemeCheck::FileSystemStorage#read (1) (0 ms, 0.00%) - - - +text x="206.06" y="399.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#read (1) (0 ms, 0.00%) +text x="1290.48" y="639.5" > +/g> +g > Integer#to_s (4716) (1 ms, 0.03%) @@ -7150,37 +7150,37 @@ Liquid::ParserSwitching#strict_parse_with_error_context (152) (12 ms, 0.32%) - - - -ThemeCheck::ThemeFile#source (91) (56 ms, 1.49%) -T.. - - +text x="218.28" y="591.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#source (91) (56 ms, 1.49%) +text x="293.46" y="879.5" >T.. +/g> +g > Kernel#respond_to? (12432) (2 ms, 0.05%) - - - -ThemeCheck::Node#markup (312) (1 ms, 0.03%) - - - -ThemeCheck::SpaceInsideBraces#on_node (908) (4 ms, 0.11%) - - - +text x="374.97" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#markup (312) (1 ms, 0.03%) +text x="1033.05" y="623.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_node (908) (4 ms, 0.11%) +text x="578.36" y="479.5" > +/g> +g > Liquid::If#parse_expression (94) (1 ms, 0.03%) Liquid::ParserSwitching#parse_with_selected_parser (4) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (1896) (10 ms, 0.27%) - - - +text x="225.05" y="367.5" > +/g> +g > +title>PlatformosCheck::Position#needle (1896) (10 ms, 0.27%) +text x="1244.40" y="639.5" > +/g> +g > Class#new (2) (0 ms, 0.00%) @@ -7194,53 +7194,53 @@ Liquid::Block#parse_body (1) (1 ms, 0.03%) - - - -ThemeCheck::DeprecateBgsizes#on_div (77) (3 ms, 0.08%) - - - +text x="207.78" y="479.5" > +/g> +g > +title>PlatformosCheck::DeprecateBgsizes#on_div (77) (3 ms, 0.08%) +text x="125.36" y="767.5" > +/g> +g > <Class::Liquid::VariableLookup>#parse (45) (0 ms, 0.00%) - - - -ThemeCheck::Node#line_number (231) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (375) (9 ms, 0.24%) - - - -ThemeCheck::Node#position (1896) (3 ms, 0.08%) - - - +text x="186.35" y="223.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (231) (0 ms, 0.00%) +text x="466.55" y="335.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (375) (9 ms, 0.24%) +text x="1134.96" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#position (1896) (3 ms, 0.08%) +text x="1241.66" y="655.5" > +/g> +g > Liquid::Block#parse (2) (2 ms, 0.05%) - - - -ThemeCheck::Position#start_index (365) (3 ms, 0.08%) - - - +text x="159.68" y="655.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (365) (3 ms, 0.08%) +text x="897.25" y="559.5" > +/g> +g > <Class::Liquid::Expression>#parse (25) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call_check_method (55824) (77 ms, 2.05%) -The.. - - +text x="145.88" y="623.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (55824) (77 ms, 2.05%) +text x="507.27" y="463.5" >The.. +/g> +g > Liquid::ParserSwitching#parse_with_selected_parser (4) (0 ms, 0.00%) - - - -ThemeCheck::UnknownFilter#on_variable (313) (7 ms, 0.19%) - - - +text x="241.82" y="447.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (313) (7 ms, 0.19%) +text x="1293.56" y="703.5" > +/g> +g > Kernel#respond_to? (8736) (2 ms, 0.05%) @@ -7254,17 +7254,17 @@ Class#new (9) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_string (292) (1 ms, 0.03%) - - - -ThemeCheck::DeprecateBgsizes#on_div (43) (1 ms, 0.03%) - - - +text x="235.19" y="239.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (292) (1 ms, 0.03%) +text x="460.23" y="383.5" > +/g> +g > +title>PlatformosCheck::DeprecateBgsizes#on_div (43) (1 ms, 0.03%) +text x="135.84" y="799.5" > +/g> +g > String#gsub (172) (2 ms, 0.05%) @@ -7286,33 +7286,33 @@ String#to_sym (1470) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (127) (0 ms, 0.00%) - - - -ThemeCheck::Position#compute_start_offset (165) (11 ms, 0.29%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (256) (16 ms, 0.43%) - - - +text x="1306.87" y="783.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (127) (0 ms, 0.00%) +text x="1375.42" y="703.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (165) (11 ms, 0.29%) +text x="1004.75" y="559.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (256) (16 ms, 0.43%) +text x="1249.95" y="591.5" > +/g> +g > Kernel#is_a? (8658) (1 ms, 0.03%) Liquid::For#parse (1) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_tag (4) (0 ms, 0.00%) - - - +text x="247.67" y="335.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (4) (0 ms, 0.00%) +text x="389.45" y="287.5" > +/g> +g > <Module::JSON>#parse (31) (1 ms, 0.03%) @@ -7322,33 +7322,33 @@ Class#new (76) (5 ms, 0.13%) - - - -ThemeCheck::StringHelpers#underscore (72) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (123) (2 ms, 0.05%) - - - +text x="196.52" y="479.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (72) (0 ms, 0.00%) +text x="796.38" y="543.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (123) (2 ms, 0.05%) +text x="490.20" y="415.5" > +/g> +g > Liquid::Parser#variable_lookups (33) (0 ms, 0.00%) - - - -ThemeCheck::Node#children (106) (1 ms, 0.03%) - - - -ThemeCheck::Visitor#visit (2351) (2,103 ms, 55.96%) -ThemeCheck::Visitor#visit (2351) - - -ThemeCheck::UndefinedObject#ignore? (393) (2 ms, 0.05%) - - - +text x="209.37" y="383.5" > +/g> +g > +title>PlatformosCheck::Node#children (106) (1 ms, 0.03%) +text x="1612.07" y="783.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (2351) (2,103 ms, 55.96%) +text x="329.11" y="783.5" >PlatformosCheck::Visitor#visit (2351) +/g> +g > +title>PlatformosCheck::UndefinedObject#ignore? (393) (2 ms, 0.05%) +text x="1379.16" y="719.5" > +/g> +g > StringScanner#charpos (70) (0 ms, 0.00%) @@ -7358,13 +7358,13 @@ Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (2) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (112) (1 ms, 0.03%) - - - +text x="229.17" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (112) (1 ms, 0.03%) +text x="434.98" y="335.5" > +/g> +g > Liquid::Parser#initialize (296) (9 ms, 0.24%) @@ -7394,13 +7394,13 @@ Liquid::Variable#parse_filterargs (15) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject#ignore? (123) (1 ms, 0.03%) - - - +text x="198.68" y="399.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#ignore? (123) (1 ms, 0.03%) +text x="490.44" y="399.5" > +/g> +g > Liquid::For#parse (2) (1 ms, 0.03%) @@ -7414,17 +7414,17 @@ Array#each (501) (1 ms, 0.03%) - - - -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (313) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call_check_method (10871) (10 ms, 0.27%) - - - +text x="468.32" y="447.5" > +/g> +g > +title>PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (313) (0 ms, 0.00%) +text x="1236.86" y="703.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (10871) (10 ms, 0.27%) +text x="96.62" y="687.5" > +/g> +g > Nokogiri::XML::NodeSet#each (553) (1 ms, 0.03%) @@ -7434,113 +7434,113 @@ String#scan (28) (1 ms, 0.03%) - - - -ThemeCheck::AssetUrlFilters#on_variable (196) (0 ms, 0.00%) - - - +text x="241.07" y="335.5" > +/g> +g > +title>PlatformosCheck::AssetUrlFilters#on_variable (196) (0 ms, 0.00%) +text x="694.09" y="543.5" > +/g> +g > Kernel#instance_variable_defined? (2325) (0 ms, 0.00%) Class#new (52) (4 ms, 0.11%) - - - -ThemeCheck::Checks#call (49) (0 ms, 0.00%) - - - +text x="185.14" y="415.5" > +/g> +g > +title>PlatformosCheck::Checks#call (49) (0 ms, 0.00%) +text x="63.03" y="463.5" > +/g> +g > String#rindex (1470) (1 ms, 0.03%) - - - -ThemeCheck::Check#ignored? (1274) (1 ms, 0.03%) - - - +text x="1307.85" y="767.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (1274) (1 ms, 0.03%) +text x="1622.66" y="831.5" > +/g> +g > StringScanner#skip (2016) (1 ms, 0.03%) Array#each (10) (3 ms, 0.08%) - - - -ThemeCheck::Node#block? (529) (1 ms, 0.03%) - - - +text x="1124.77" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#block? (529) (1 ms, 0.03%) +text x="622.34" y="495.5" > +/g> +g > Liquid::Variable#initialize (43) (2 ms, 0.05%) - - - -ThemeCheck::Position#can_find_needle? (2267) (7 ms, 0.19%) - - - +text x="250.40" y="463.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (2267) (7 ms, 0.19%) +text x="1551.27" y="719.5" > +/g> +g > Liquid::BlockBody#create_variable (4) (0 ms, 0.00%) Liquid::BlockBody#parse_for_document (2) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (411) (7 ms, 0.19%) - - - +text x="207.59" y="447.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (411) (7 ms, 0.19%) +text x="623.51" y="463.5" > +/g> +g > Array#each (3) (1 ms, 0.03%) Liquid::Lexer#tokenize (13) (0 ms, 0.00%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (38) (11 ms, 0.29%) - - - +text x="217.36" y="543.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (38) (11 ms, 0.29%) +text x="1257.19" y="687.5" > +/g> +g > Class#new (3) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#visit (1407) (993 ms, 26.43%) -ThemeCheck::Visitor#visit (1407) - - -ThemeCheck::ParserBlockingScriptTag#on_variable (415) (1 ms, 0.03%) - - - +text x="160.49" y="575.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (1407) (993 ms, 26.43%) +text x="344.88" y="655.5" >PlatformosCheck::Visitor#visit (1407) +/g> +g > +title>PlatformosCheck::ParserBlockingScriptTag#on_variable (415) (1 ms, 0.03%) +text x="1576.56" y="799.5" > +/g> +g > Array#map (196) (1 ms, 0.03%) String#initialize_copy (2003) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (109) (0 ms, 0.00%) - - - +text x="886.44" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#markup (109) (0 ms, 0.00%) +text x="721.68" y="495.5" > +/g> +g > Pathname#sub_ext (312) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (91) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_tag (115) (25 ms, 0.67%) - - - +text x="799.30" y="511.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (91) (0 ms, 0.00%) +text x="1625.31" y="815.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (115) (25 ms, 0.67%) +text x="696.66" y="543.5" > +/g> +g > String#index (220) (1 ms, 0.03%) @@ -7550,33 +7550,33 @@ Class#new (621) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag_markup (16) (1 ms, 0.03%) - - - +text x="1470.48" y="847.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (16) (1 ms, 0.03%) +text x="489.13" y="383.5" > +/g> +g > StringScanner#scan (948) (0 ms, 0.00%) Pathname#initialize (375) (3 ms, 0.08%) - - - -ThemeCheck::NestedSnippet#on_include (37) (0 ms, 0.00%) - - - +text x="1136.06" y="591.5" > +/g> +g > +title>PlatformosCheck::NestedSnippet#on_include (37) (0 ms, 0.00%) +text x="1016.69" y="639.5" > +/g> +g > Kernel#instance_variable_get (2905) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (120) (1 ms, 0.03%) - - - +text x="1610.45" y="767.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (120) (1 ms, 0.03%) +text x="490.68" y="399.5" > +/g> +g > Array#each (1) (199 ms, 5.30%) Array#each.. @@ -7594,65 +7594,65 @@ Liquid::ParserSwitching#strict_parse_with_error_context (33) (1 ms, 0.03%) - - - -ThemeCheck::Node#type_name (79) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (211) (1 ms, 0.03%) - - - -ThemeCheck::MatchingSchemaTranslations#visit_object (124) (0 ms, 0.00%) - - - +text x="159.84" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (79) (1 ms, 0.03%) +text x="362.10" y="255.5" > +/g> +g > +title>PlatformosCheck::Node#markup (211) (1 ms, 0.03%) +text x="377.00" y="239.5" > +/g> +g > +title>PlatformosCheck::MatchingSchemaTranslations#visit_object (124) (0 ms, 0.00%) +text x="1570.02" y="639.5" > +/g> +g > Liquid::Lexer#tokenize (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (2044) (11 ms, 0.29%) - - - -ThemeCheck::MatchingSchemaTranslations#visit_object (424) (4 ms, 0.11%) - - - +text x="231.81" y="207.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (2044) (11 ms, 0.29%) +text x="642.44" y="607.5" > +/g> +g > +title>PlatformosCheck::MatchingSchemaTranslations#visit_object (424) (4 ms, 0.11%) +text x="1568.93" y="735.5" > +/g> +g > <Object::Object>#[] (3937) (3 ms, 0.08%) - - - -ThemeCheck::Node#line_number (115) (0 ms, 0.00%) - - - +text x="1355.81" y="735.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (115) (0 ms, 0.00%) +text x="697.21" y="511.5" > +/g> +g > Liquid::If#parse (26) (11 ms, 0.29%) - - - -ThemeCheck::ThemeFile#name (197) (1 ms, 0.03%) - - - +text x="246.70" y="575.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (197) (1 ms, 0.03%) +text x="634.81" y="463.5" > +/g> +g > String#scan (4) (0 ms, 0.00%) Liquid::BlockBody#parse_for_document (4) (3 ms, 0.08%) - - - -ThemeCheck::Node#start_index (1090) (8 ms, 0.21%) - - - -ThemeCheck::LiquidTag#on_string (593) (2 ms, 0.05%) - - - +text x="234.04" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (1090) (8 ms, 0.21%) +text x="1284.35" y="671.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (593) (2 ms, 0.05%) +text x="1366.65" y="735.5" > +/g> +g > Liquid::Block#parse_body (1) (2 ms, 0.05%) @@ -7666,49 +7666,49 @@ Array#flatten (169) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_offset (773) (14 ms, 0.37%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (176) (2 ms, 0.05%) - - - +text x="807.08" y="639.5" > +/g> +g > +title>PlatformosCheck::Position#start_offset (773) (14 ms, 0.37%) +text x="701.71" y="479.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (176) (2 ms, 0.05%) +text x="1465.46" y="751.5" > +/g> +g > StringScanner#pre_match (165) (0 ms, 0.00%) Enumerable#map (43) (1 ms, 0.03%) - - - -Liquid::Parser#initialize (13) (0 ms, 0.00%) - - - -Kernel#class (1838) (0 ms, 0.00%) - - - -Pathname#read (14) (6 ms, 0.16%) - - - -ThemeCheck::Visitor#visit (1515) (831 ms, 22.11%) -ThemeCheck::Visitor#visit (1515) + -Kernel#loop (160) (1 ms, 0.03%) - +Liquid::Parser#initialize (13) (0 ms, 0.00%) + -ThemeCheck::FileSystemStorage#glob (1) (1 ms, 0.03%) - +Kernel#class (1838) (0 ms, 0.00%) + +Pathname#read (14) (6 ms, 0.16%) +text x="1713.83" y="815.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (1515) (831 ms, 22.11%) +text x="347.35" y="623.5" >PlatformosCheck::Visitor#visit (1515) +/g> +g > +title>Kernel#loop (160) (1 ms, 0.03%) +text x="283.25" y="607.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#glob (1) (1 ms, 0.03%) +text x="1718.56" y="847.5" > +/g> +g > Nokogiri::XML::Document#decorate (1222) (0 ms, 0.00%) @@ -7722,37 +7722,37 @@ <Class::Liquid::Tag>#parse (54) (12 ms, 0.32%) - - - -ThemeCheck::Tags::Render#initialize (27) (0 ms, 0.00%) - - - +text x="204.72" y="591.5" > +/g> +g > +title>PlatformosCheck::Tags::Render#initialize (27) (0 ms, 0.00%) +text x="178.22" y="559.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (3) (0 ms, 0.00%) Liquid::BlockBody#create_variable (6) (0 ms, 0.00%) - - - -ThemeCheck::Template#root (91) (387 ms, 10.30%) -ThemeCheck::Template#ro.. - - -<Class::Liquid::VariableLookup>#parse (33) (0 ms, 0.00%) +text x="179.74" y="511.5" > +/g> +g > +title>PlatformosCheck::Template#root (91) (387 ms, 10.30%) +text x="141.23" y="911.5" >PlatformosCheck::Template#ro.. +/g> +g > +title><Class::Liquid::VariableLookup>#parse (33) (0 ms, 0.00%) Liquid::Parser#variable_lookups (55) (0 ms, 0.00%) - - - -ThemeCheck::Node#line_number (385) (1 ms, 0.03%) - - - +text x="159.29" y="511.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (385) (1 ms, 0.03%) +text x="582.04" y="431.5" > +/g> +g > Class#new (5) (0 ms, 0.00%) @@ -7762,53 +7762,53 @@ MatchData#[] (4716) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (109) (0 ms, 0.00%) - - - +text x="43.98" y="879.5" > +/g> +g > +title>PlatformosCheck::Node#markup (109) (0 ms, 0.00%) +text x="1293.33" y="639.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (24) (1 ms, 0.03%) <Class::Liquid::Tag>#parse (11) (2 ms, 0.05%) - - - -ThemeCheck::Checks#call_check_method (9548) (7 ms, 0.19%) - - - -ThemeCheck::MissingTemplate#add_missing_offense (3) (1 ms, 0.03%) - - - +text x="234.31" y="351.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (9548) (7 ms, 0.19%) +text x="105.81" y="719.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#add_missing_offense (3) (1 ms, 0.03%) +text x="433.11" y="335.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (6) (0 ms, 0.00%) Liquid::ParserSwitching#strict_parse_with_error_context (6) (0 ms, 0.00%) - - - -ThemeCheck::ParsingHelpers#outside_of_strings (35) (0 ms, 0.00%) - - - +text x="179.44" y="431.5" > +/g> +g > +title>PlatformosCheck::ParsingHelpers#outside_of_strings (35) (0 ms, 0.00%) +text x="489.57" y="399.5" > +/g> +g > Liquid::BlockBody#parse (5) (5 ms, 0.13%) Liquid::Block#parse_body (4) (1 ms, 0.03%) - - - -ThemeCheck::LiquidTag#on_string (977) (3 ms, 0.08%) - - - +text x="231.74" y="399.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_string (977) (3 ms, 0.08%) +text x="1452.26" y="767.5" > +/g> +g > Pathname#sub_ext (375) (1 ms, 0.03%) @@ -7818,17 +7818,17 @@ Liquid::If#parse (2) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag? (2160) (1 ms, 0.03%) - - - -ThemeCheck::Position#needle (74) (0 ms, 0.00%) - - - +text x="199.02" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#tag? (2160) (1 ms, 0.03%) +text x="889.25" y="575.5" > +/g> +g > +title>PlatformosCheck::Position#needle (74) (0 ms, 0.00%) +text x="376.29" y="191.5" > +/g> +g > Liquid::Variable#initialize (14) (1 ms, 0.03%) @@ -7850,38 +7850,38 @@ String#scan (5) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#call_checks (82) (2 ms, 0.05%) - - - -ThemeCheck::Node#inside_liquid_tag? (70) (15 ms, 0.40%) - - - +text x="166.33" y="495.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (82) (2 ms, 0.05%) +text x="359.88" y="191.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (70) (15 ms, 0.40%) +text x="524.15" y="431.5" > +/g> +g > Liquid::For#strict_parse (25) (1 ms, 0.03%) - - - -ThemeCheck::Node#comment? (1566) (1 ms, 0.03%) - - - +text x="145.35" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1566) (1 ms, 0.03%) +text x="1303.20" y="783.5" > +/g> +g > String#rindex (1204) (0 ms, 0.00%) Liquid::BlockBody#whitespace_handler (767) (1 ms, 0.03%) - - - -ThemeCheck::Visitor#visit (508) (298 ms, 7.93%) -ThemeCheck::Visit.. - - -Liquid::If#push_block (11) (1 ms, 0.03%) +text x="287.27" y="751.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (508) (298 ms, 7.93%) +text x="354.63" y="495.5" >PlatformosCheck::Visit.. +/g> +g > +title>Liquid::If#push_block (11) (1 ms, 0.03%) @@ -7890,13 +7890,13 @@ Liquid::If#parse_binary_comparisons (53) (2 ms, 0.05%) - - - -ThemeCheck::Node#block_tag? (949) (1 ms, 0.03%) - - - +text x="182.82" y="399.5" > +/g> +g > +title>PlatformosCheck::Node#block_tag? (949) (1 ms, 0.03%) +text x="1120.89" y="639.5" > +/g> +g > Class#new (4) (1 ms, 0.03%) @@ -7914,37 +7914,37 @@ Liquid::If#initialize (12) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (342) (1 ms, 0.03%) - - - +text x="285.33" y="687.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (342) (1 ms, 0.03%) +text x="1036.24" y="591.5" > +/g> +g > Class#new (6) (0 ms, 0.00%) Array#each (1581) (2,487 ms, 66.18%) -Array#each (1581) - - -ThemeCheck::Position#contents (545) (0 ms, 0.00%) - - - +text x="322.39" y="863.5" >Array#each (1581) +/g> +g > +title>PlatformosCheck::Position#contents (545) (0 ms, 0.00%) +text x="723.99" y="463.5" > +/g> +g > Array#each (419) (3 ms, 0.08%) - - - -ThemeCheck::FileSystemStorage#read (14) (7 ms, 0.19%) - - - -ThemeCheck::Node#type_name (182) (1 ms, 0.03%) - - - +text x="64.89" y="511.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#read (14) (7 ms, 0.19%) +text x="1713.82" y="831.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (182) (1 ms, 0.03%) +text x="1617.11" y="895.5" > +/g> +g > Liquid::Block#parse_body (4) (1 ms, 0.03%) @@ -7954,13 +7954,13 @@ String#scan (4) (0 ms, 0.00%) - - - -ThemeCheck::LiquidTag#on_tag (38) (7 ms, 0.19%) - - - +text x="241.99" y="415.5" > +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (38) (7 ms, 0.19%) +text x="1121.31" y="671.5" > +/g> +g > String#scan (660) (0 ms, 0.00%) @@ -7970,73 +7970,73 @@ <Class::Liquid::Document>#parse (91) (321 ms, 8.54%) -<Class::Liquid::Do.. - - -ThemeCheck::LiquidTag#on_tag (85) (16 ms, 0.43%) - - - -ThemeCheck::Node#block_body? (1195) (1 ms, 0.03%) - - - +text x="142.04" y="831.5" ><Class::Liquid::Do.. +/g> +g > +title>PlatformosCheck::LiquidTag#on_tag (85) (16 ms, 0.43%) +text x="877.30" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (1195) (1 ms, 0.03%) +text x="997.72" y="607.5" > +/g> +g > Liquid::Parser#initialize (70) (2 ms, 0.05%) <Class::Liquid::Tag>#parse (2) (1 ms, 0.03%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (110) (6 ms, 0.16%) - - - -ThemeCheck::JsonFile#load! (66) (7 ms, 0.19%) - - - -ThemeCheck::Visitor#visit (124) (23 ms, 0.61%) - - - +text x="165.34" y="351.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (110) (6 ms, 0.16%) +text x="726.13" y="543.5" > +/g> +g > +title>PlatformosCheck::JsonFile#load! (66) (7 ms, 0.19%) +text x="1713.52" y="863.5" > +/g> +g > +title>PlatformosCheck::Visitor#visit (124) (23 ms, 0.61%) +text x="358.86" y="303.5" > +/g> +g > Liquid::Block#parse_body (3) (0 ms, 0.00%) - - - -ThemeCheck::Node#position (2267) (4 ms, 0.11%) - - - +text x="227.31" y="399.5" > +/g> +g > +title>PlatformosCheck::Node#position (2267) (4 ms, 0.11%) +text x="1546.36" y="751.5" > +/g> +g > Liquid::For#initialize (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#inside_liquid_tag? (52) (3 ms, 0.08%) - - - +text x="187.13" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (52) (3 ms, 0.08%) +text x="1376.62" y="719.5" > +/g> +g > StringScanner#charpos (115) (0 ms, 0.00%) - - - -ThemeCheck::UnknownFilter#on_variable (209) (1 ms, 0.03%) - - - +text x="715.00" y="495.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (209) (1 ms, 0.03%) +text x="902.15" y="607.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (43) (4 ms, 0.11%) String#initialize_copy (3504) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (1578) (8 ms, 0.21%) - - - +text x="1261.48" y="575.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (1578) (8 ms, 0.21%) +text x="811.95" y="655.5" > +/g> +g > StringScanner#scan_until (33365) (13 ms, 0.35%) @@ -8046,21 +8046,21 @@ Liquid::ParserSwitching#strict_parse_with_error_context (4) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (626) (2 ms, 0.05%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (19) (1 ms, 0.03%) - - - -ThemeCheck::Position#start_line_offset (14) (1 ms, 0.03%) - - - +text x="187.32" y="191.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (626) (2 ms, 0.05%) +text x="531.17" y="367.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (19) (1 ms, 0.03%) +text x="465.22" y="383.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (14) (1 ms, 0.03%) +text x="577.31" y="383.5" > +/g> +g > Liquid::If#parse_binary_comparisons (29) (1 ms, 0.03%) @@ -8078,49 +8078,49 @@ <Class::Liquid::Expression>#parse (66) (1 ms, 0.03%) - - - -ThemeCheck::HtmlVisitor#call_checks (1401) (18 ms, 0.48%) - - - +text x="158.90" y="479.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#call_checks (1401) (18 ms, 0.48%) +text x="129.49" y="863.5" > +/g> +g > Class#new (704) (1 ms, 0.03%) <Module::Nokogiri::HTML5>#fragment (310) (14 ms, 0.37%) - - - -ThemeCheck::HtmlNode#name (868) (2 ms, 0.05%) - - - -ThemeCheck::Node#markup (203) (0 ms, 0.00%) - - - +text x="1706.55" y="751.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#name (868) (2 ms, 0.05%) +text x="111.40" y="799.5" > +/g> +g > +title>PlatformosCheck::Node#markup (203) (0 ms, 0.00%) +text x="1133.85" y="655.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (6) (0 ms, 0.00%) Array#each (866) (22 ms, 0.59%) - - - -ThemeCheck::Node#inside_liquid_tag? (115) (7 ms, 0.19%) - - - +text x="381.00" y="319.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (115) (7 ms, 0.19%) +text x="721.35" y="527.5" > +/g> +g > Liquid::If#initialize (210) (23 ms, 0.61%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (8) (1 ms, 0.03%) - - - +text x="146.04" y="719.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (8) (1 ms, 0.03%) +text x="489.77" y="415.5" > +/g> +g > Array#map (106) (0 ms, 0.00%) @@ -8134,33 +8134,33 @@ Psych::Visitors::Visitor#accept (1) (2 ms, 0.05%) - - - -ThemeCheck::Node#inside_liquid_tag? (115) (25 ms, 0.67%) - - - -ThemeCheck::MissingTemplate#on_include (3) (1 ms, 0.03%) - - - +text x="1295.89" y="559.5" > +/g> +g > +title>PlatformosCheck::Node#inside_liquid_tag? (115) (25 ms, 0.67%) +text x="696.80" y="527.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (3) (1 ms, 0.03%) +text x="577.91" y="479.5" > +/g> +g > Liquid::Parser#argument (106) (1 ms, 0.03%) Module#=== (1477) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (629) (3 ms, 0.08%) - - - -ThemeCheck::ThemeFile#name (2003) (5 ms, 0.13%) - - - +text x="733.91" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (629) (3 ms, 0.08%) +text x="392.84" y="383.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (2003) (5 ms, 0.13%) +text x="884.93" y="527.5" > +/g> +g > <Class::Liquid::Tag>#parse (8) (1 ms, 0.03%) @@ -8170,21 +8170,21 @@ Liquid::ParserSwitching#strict_parse_with_error_context (2) (1 ms, 0.03%) - - - -ThemeCheck::SpaceInsideBraces#on_node (515) (5 ms, 0.13%) - - - +text x="270.55" y="383.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_node (515) (5 ms, 0.13%) +text x="433.65" y="351.5" > +/g> +g > String#index (486) (2 ms, 0.05%) - - - -ThemeCheck::Node#comment? (1013) (1 ms, 0.03%) - - - +text x="525.83" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1013) (1 ms, 0.03%) +text x="586.41" y="575.5" > +/g> +g > Pathname#+ (91) (4 ms, 0.11%) @@ -8194,85 +8194,85 @@ Liquid::BlockBody#parse_for_document (4) (1 ms, 0.03%) - - - -ThemeCheck::Node#initialize (853) (1 ms, 0.03%) - - - -ThemeCheck::MissingTemplate#on_include (38) (11 ms, 0.29%) - - - +text x="165.46" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (853) (1 ms, 0.03%) +text x="584.40" y="527.5" > +/g> +g > +title>PlatformosCheck::MissingTemplate#on_include (38) (11 ms, 0.29%) +text x="1257.16" y="703.5" > +/g> +g > Class#new (46) (1 ms, 0.03%) Liquid::BlockBody#parse (3) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (373) (1 ms, 0.03%) - - - +text x="244.34" y="383.5" > +/g> +g > +title>PlatformosCheck::Node#markup (373) (1 ms, 0.03%) +text x="1547.41" y="719.5" > +/g> +g > Enumerable#flat_map (899) (1 ms, 0.03%) Array#each (1328) (11 ms, 0.29%) - - - -ThemeCheck::Checks#call_check_method (7924) (6 ms, 0.16%) - - - -ThemeCheck::StringHelpers#underscore (1204) (6 ms, 0.16%) - - - -ThemeCheck::Node#initialize (1314) (2 ms, 0.05%) - - - +text x="112.86" y="767.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (7924) (6 ms, 0.16%) +text x="80.02" y="623.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (1204) (6 ms, 0.16%) +text x="644.61" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (1314) (2 ms, 0.05%) +text x="804.59" y="623.5" > +/g> +g > Liquid::VariableLookup#initialize (164) (1 ms, 0.03%) Kernel#loop (329) (3 ms, 0.08%) - - - -ThemeCheck::Theme#[] (7) (2 ms, 0.05%) - - - +text x="1380.56" y="703.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (7) (2 ms, 0.05%) +text x="531.08" y="415.5" > +/g> +g > Class#new (13) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#replace_placeholders (122) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (218) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (508) (2 ms, 0.05%) - - - -ThemeCheck::Position#start_line_offset (19) (2 ms, 0.05%) - - - -ThemeCheck::Theme#[] (22) (6 ms, 0.16%) - - - +text x="216.75" y="623.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#replace_placeholders (122) (1 ms, 0.03%) +text x="117.34" y="671.5" > +/g> +g > +title>PlatformosCheck::Node#markup (218) (0 ms, 0.00%) +text x="1283.83" y="655.5" > +/g> +g > +title>PlatformosCheck::Node#markup (508) (2 ms, 0.05%) +text x="408.37" y="303.5" > +/g> +g > +title>PlatformosCheck::Position#start_line_offset (19) (2 ms, 0.05%) +text x="461.28" y="287.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (22) (6 ms, 0.16%) +text x="884.65" y="575.5" > +/g> +g > Kernel#is_a? (2055) (0 ms, 0.00%) @@ -8290,29 +8290,29 @@ Liquid::ParserSwitching#strict_parse_with_error_context (8) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (2501) (14 ms, 0.37%) - - - -ThemeCheck::Node#tag_markup (373) (0 ms, 0.00%) - - - +text x="166.09" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (2501) (14 ms, 0.37%) +text x="1390.56" y="831.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (373) (0 ms, 0.00%) +text x="1548.03" y="719.5" > +/g> +g > Liquid::BlockBody#parse (2) (1 ms, 0.03%) Enumerable#flat_map (820) (1 ms, 0.03%) - - - -ThemeCheck::Node#document? (697) (0 ms, 0.00%) - - - +text x="493.18" y="495.5" > +/g> +g > +title>PlatformosCheck::Node#document? (697) (0 ms, 0.00%) +text x="1453.42" y="735.5" > +/g> +g > StringScanner#scan (221) (0 ms, 0.00%) @@ -8330,29 +8330,29 @@ Pathname#sub_ext (903) (1 ms, 0.03%) - - - -ThemeCheck::Position#can_find_needle? (780) (3 ms, 0.08%) - - - -ThemeCheck::Node#block? (793) (2 ms, 0.05%) - - - +text x="1125.11" y="575.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (780) (3 ms, 0.08%) +text x="1031.34" y="559.5" > +/g> +g > +title>PlatformosCheck::Node#block? (793) (2 ms, 0.05%) +text x="1541.95" y="783.5" > +/g> +g > Liquid::If#strict_parse (29) (2 ms, 0.05%) - - - -ThemeCheck::Tags::Render#initialize (5) (0 ms, 0.00%) - - - -ThemeCheck::FileSystemStorage#directories (1) (3 ms, 0.08%) - - - +text x="174.65" y="575.5" > +/g> +g > +title>PlatformosCheck::Tags::Render#initialize (5) (0 ms, 0.00%) +text x="230.87" y="559.5" > +/g> +g > +title>PlatformosCheck::FileSystemStorage#directories (1) (3 ms, 0.08%) +text x="1717.85" y="863.5" > +/g> +g > Kernel#class (1917) (0 ms, 0.00%) @@ -8390,37 +8390,37 @@ Liquid::BlockBody#parse (38) (16 ms, 0.43%) - - - -ThemeCheck::ThemeFile#relative_path (3014) (1 ms, 0.03%) - - - +text x="204.39" y="623.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#relative_path (3014) (1 ms, 0.03%) +text x="1016.31" y="543.5" > +/g> +g > Liquid::Parser#initialize (43) (1 ms, 0.03%) Liquid::Lexer#tokenize (43) (1 ms, 0.03%) - - - -ThemeCheck::SpaceInsideBraces#on_variable (88) (0 ms, 0.00%) - - - +text x="210.61" y="447.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_variable (88) (0 ms, 0.00%) +text x="436.81" y="351.5" > +/g> +g > Pathname#sub_ext (209) (0 ms, 0.00%) - - - -ThemeCheck::PositionHelper#from_row_column_to_index (14) (1 ms, 0.03%) - - - -ThemeCheck::Node#markup (543) (1 ms, 0.03%) - - - +text x="1465.21" y="703.5" > +/g> +g > +title>PlatformosCheck::PositionHelper#from_row_column_to_index (14) (1 ms, 0.03%) +text x="577.35" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#markup (543) (1 ms, 0.03%) +text x="488.76" y="399.5" > +/g> +g > Kernel#nil? (2267) (0 ms, 0.00%) @@ -8458,17 +8458,17 @@ Enumerable#map (51) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#visit (28) (2 ms, 0.05%) - - - -ThemeCheck::ThemeFile#source (784) (0 ms, 0.00%) - - - +text x="90.66" y="607.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (28) (2 ms, 0.05%) +text x="62.49" y="495.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#source (784) (0 ms, 0.00%) +text x="999.66" y="591.5" > +/g> +g > Liquid::Parser#initialize (12) (0 ms, 0.00%) @@ -8486,13 +8486,13 @@ Liquid::VariableLookup#initialize (46) (0 ms, 0.00%) - - - -ThemeCheck::ValidHTMLTranslation#visit_nested (1197) (2 ms, 0.05%) - - - +text x="158.98" y="431.5" > +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#visit_nested (1197) (2 ms, 0.05%) +text x="1690.54" y="623.5" > +/g> +g > Kernel#is_a? (1680) (0 ms, 0.00%) @@ -8530,29 +8530,29 @@ Liquid::Block#parse_body (2) (1 ms, 0.03%) - - - -ThemeCheck::Node#children (559) (4 ms, 0.11%) - - - -ThemeCheck::Check#ignored? (1399) (0 ms, 0.00%) - - - -ThemeCheck::Position#start_index (250) (2 ms, 0.05%) - - - -ThemeCheck::Node#document? (710) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_variable (75) (0 ms, 0.00%) - - - +text x="183.90" y="479.5" > +/g> +g > +title>PlatformosCheck::Node#children (559) (4 ms, 0.11%) +text x="438.18" y="447.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (1399) (0 ms, 0.00%) +text x="459.94" y="383.5" > +/g> +g > +title>PlatformosCheck::Position#start_index (250) (2 ms, 0.05%) +text x="1462.58" y="719.5" > +/g> +g > +title>PlatformosCheck::Node#document? (710) (0 ms, 0.00%) +text x="1121.15" y="639.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_variable (75) (0 ms, 0.00%) +text x="1377.85" y="735.5" > +/g> +g > Liquid::Block#parse_body (4) (3 ms, 0.08%) @@ -8590,29 +8590,29 @@ Liquid::If#unknown_tag (17) (0 ms, 0.00%) - - - -ThemeCheck::SpaceInsideBraces#on_tag (52) (3 ms, 0.08%) - - - +text x="195.74" y="431.5" > +/g> +g > +title>PlatformosCheck::SpaceInsideBraces#on_tag (52) (3 ms, 0.08%) +text x="1376.55" y="735.5" > +/g> +g > Liquid::If#initialize (5) (0 ms, 0.00%) String#byteslice (737) (0 ms, 0.00%) - - - -Liquid::Variable#initialize (4) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (1073) (6 ms, 0.16%) - + +Liquid::Variable#initialize (4) (0 ms, 0.00%) +text x="235.85" y="303.5" > +/g> +g > +title>PlatformosCheck::Position#needle (1073) (6 ms, 0.16%) +text x="1001.60" y="575.5" > +/g> +g > Liquid::VariableLookup#initialize (55) (0 ms, 0.00%) @@ -8622,13 +8622,13 @@ Array#each (1) (3,502 ms, 93.19%) -Array#each (1) - - -ThemeCheck::Node#tag_markup (26) (1 ms, 0.03%) - - - +text x="13.09" y="943.5" >Array#each (1) +/g> +g > +title>PlatformosCheck::Node#tag_markup (26) (1 ms, 0.03%) +text x="579.19" y="447.5" > +/g> +g > Liquid::BlockBody#create_variable (82) (6 ms, 0.16%) @@ -8658,21 +8658,21 @@ Class#new (4) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call_check_method (30576) (26 ms, 0.69%) - - - -ThemeCheck::Node#source (559) (0 ms, 0.00%) - - - -ThemeCheck::Position#contents (2267) (1 ms, 0.03%) - - - +text x="234.07" y="415.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (30576) (26 ms, 0.69%) +text x="399.14" y="335.5" > +/g> +g > +title>PlatformosCheck::Node#source (559) (0 ms, 0.00%) +text x="697.42" y="511.5" > +/g> +g > +title>PlatformosCheck::Position#contents (2267) (1 ms, 0.03%) +text x="1554.50" y="719.5" > +/g> +g > String#scan (296) (21 ms, 0.56%) @@ -8682,17 +8682,17 @@ String#byteslice (115) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#name (940) (3 ms, 0.08%) - - - -ThemeCheck::UndefinedObject#on_variable_lookup (29) (1 ms, 0.03%) - - - +text x="704.43" y="399.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (940) (3 ms, 0.08%) +text x="792.02" y="495.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_variable_lookup (29) (1 ms, 0.03%) +text x="377.94" y="255.5" > +/g> +g > Regexp#match? (1204) (0 ms, 0.00%) @@ -8710,17 +8710,17 @@ Class#new (47) (0 ms, 0.00%) - - - -ThemeCheck::RemoteAsset#on_element (270) (3 ms, 0.08%) - - - -ThemeCheck::Node#markup (134) (0 ms, 0.00%) - - - +text x="167.04" y="447.5" > +/g> +g > +title>PlatformosCheck::RemoteAsset#on_element (270) (3 ms, 0.08%) +text x="136.30" y="799.5" > +/g> +g > +title>PlatformosCheck::Node#markup (134) (0 ms, 0.00%) +text x="800.65" y="511.5" > +/g> +g > Pathname#to_s (393) (0 ms, 0.00%) @@ -8734,13 +8734,13 @@ Psych::Visitors::ToRuby#visit_Psych_Nodes_Mapping (1) (2 ms, 0.05%) - - - -ThemeCheck::Node#initialize (1482) (2 ms, 0.05%) - - - +text x="1295.89" y="527.5" > +/g> +g > +title>PlatformosCheck::Node#initialize (1482) (2 ms, 0.05%) +text x="732.22" y="591.5" > +/g> +g > <Class::Liquid::Tag>#parse (4) (1 ms, 0.03%) @@ -8754,21 +8754,21 @@ Liquid::BlockBody#create_variable (6) (1 ms, 0.03%) - - - -ThemeCheck::Node#start_index (411) (8 ms, 0.21%) - - - +text x="232.04" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (411) (8 ms, 0.21%) +text x="623.22" y="479.5" > +/g> +g > Liquid::BlockBody#parse_for_document (4) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call_check_method (128592) (139 ms, 3.70%) -ThemeCh.. - - +text x="165.31" y="367.5" > +/g> +g > +title>PlatformosCheck::Checks#call_check_method (128592) (139 ms, 3.70%) +text x="839.12" y="623.5" >ThemeCh.. +/g> +g > Liquid::Lexer#initialize (296) (2 ms, 0.05%) @@ -8794,13 +8794,13 @@ Kernel#is_a? (1985) (0 ms, 0.00%) - - - -ThemeCheck::Node#source (436) (0 ms, 0.00%) - - - +text x="1458.13" y="719.5" > +/g> +g > +title>PlatformosCheck::Node#source (436) (0 ms, 0.00%) +text x="721.80" y="511.5" > +/g> +g > Nokogiri::XML::Node#node_name (310) (0 ms, 0.00%) @@ -8810,13 +8810,13 @@ Nokogiri::XML::Document#decorate (1366) (0 ms, 0.00%) - - - -ThemeCheck::StringHelpers#demodulize (302) (0 ms, 0.00%) - - - +text x="92.83" y="703.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#demodulize (302) (0 ms, 0.00%) +text x="379.78" y="335.5" > +/g> +g > StringScanner#scan (3846) (1 ms, 0.03%) @@ -8826,57 +8826,57 @@ Liquid::If#parse (5) (1 ms, 0.03%) - - - -ThemeCheck::RemoteAsset#on_element (204) (1 ms, 0.03%) - - - +text x="166.01" y="495.5" > +/g> +g > +title>PlatformosCheck::RemoteAsset#on_element (204) (1 ms, 0.03%) +text x="90.91" y="639.5" > +/g> +g > Enumerable#map (212) (1 ms, 0.03%) <Class::File>#directory? (11) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (858) (5 ms, 0.13%) - - - +text x="1718.12" y="831.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (858) (5 ms, 0.13%) +text x="547.79" y="527.5" > +/g> +g > Liquid::VariableLookup#initialize (269) (3 ms, 0.08%) Liquid::ParserSwitching#strict_parse_with_error_mode_fallback (6) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag_markup (38) (2 ms, 0.05%) - - - -ThemeCheck::HtmlNode#attributes (154) (3 ms, 0.08%) - - - -ThemeCheck::Theme#[] (11) (3 ms, 0.08%) - - - +text x="242.19" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (38) (2 ms, 0.05%) +text x="463.82" y="351.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (154) (3 ms, 0.08%) +text x="125.45" y="751.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (11) (3 ms, 0.08%) +text x="791.88" y="543.5" > +/g> +g > Liquid::Parser#expression (75) (0 ms, 0.00%) Regexp#match? (1852) (1 ms, 0.03%) - - - -ThemeCheck::HtmlNode#element? (880) (1 ms, 0.03%) - - - +text x="1734.68" y="863.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#element? (880) (1 ms, 0.03%) +text x="119.36" y="831.5" > +/g> +g > String#index (1680) (0 ms, 0.00%) @@ -8890,37 +8890,37 @@ Liquid::Variable#strict_parse (9) (1 ms, 0.03%) - - - -ThemeCheck::Check#ignored? (3332) (1 ms, 0.03%) - - - -ThemeCheck::Position#can_find_needle? (1090) (3 ms, 0.08%) - - - -ThemeCheck::HtmlVisitor#visit (5) (1 ms, 0.03%) - - - +text x="189.53" y="175.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (3332) (1 ms, 0.03%) +text x="787.34" y="575.5" > +/g> +g > +title>PlatformosCheck::Position#can_find_needle? (1090) (3 ms, 0.08%) +text x="1286.15" y="623.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#visit (5) (1 ms, 0.03%) +text x="62.53" y="431.5" > +/g> +g > Array#map (1474) (2 ms, 0.05%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (155) (2 ms, 0.05%) - - - +text x="638.42" y="591.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (155) (2 ms, 0.05%) +text x="1292.65" y="687.5" > +/g> +g > Liquid::Parser#expression (105) (0 ms, 0.00%) - - - -ThemeCheck::Node#type_name (127) (1 ms, 0.03%) - - - +text x="257.78" y="447.5" > +/g> +g > +title>PlatformosCheck::Node#type_name (127) (1 ms, 0.03%) +text x="1375.30" y="719.5" > +/g> +g > Class#new (28) (2 ms, 0.05%) @@ -8934,13 +8934,13 @@ String#gsub! (3834) (4 ms, 0.11%) - - - -ThemeCheck::Position#content_line_count (165) (1 ms, 0.03%) - - - +text x="918.46" y="671.5" > +/g> +g > +title>PlatformosCheck::Position#content_line_count (165) (1 ms, 0.03%) +text x="1005.02" y="511.5" > +/g> +g > Liquid::BlockBody#parse_for_document (4) (3 ms, 0.08%) @@ -8958,29 +8958,29 @@ Liquid::Block#parse_body (2) (2 ms, 0.05%) - - - -ThemeCheck::Node#comment? (1743) (1 ms, 0.03%) - - - -ThemeCheck::Check#ignored? (5743) (2 ms, 0.05%) - - - +text x="159.68" y="639.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1743) (1 ms, 0.03%) +text x="1388.90" y="831.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (5743) (2 ms, 0.05%) +text x="1118.67" y="671.5" > +/g> +g > Kernel#class (2952) (1 ms, 0.03%) Liquid::Lexer#tokenize (11) (0 ms, 0.00%) - - - -ThemeCheck::Node#tag_markup (320) (13 ms, 0.35%) - - - +text x="144.86" y="591.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (320) (13 ms, 0.35%) +text x="1019.58" y="607.5" > +/g> +g > Liquid::BlockBody#parse (2) (2 ms, 0.05%) @@ -8994,41 +8994,41 @@ Liquid::BlockBody#create_variable (12) (1 ms, 0.03%) - - - -ThemeCheck::Node#block_body? (697) (0 ms, 0.00%) - - - -ThemeCheck::Node#line_number (218) (1 ms, 0.03%) - - - +text x="164.03" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#block_body? (697) (0 ms, 0.00%) +text x="1452.95" y="735.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (218) (1 ms, 0.03%) +text x="1283.71" y="671.5" > +/g> +g > Class#new (19) (1 ms, 0.03%) - - - -ThemeCheck::Node#tag_markup (75) (4 ms, 0.11%) - - - -ThemeCheck::Check#ignored? (8086) (2 ms, 0.05%) - - - -ThemeCheck::UndefinedObject#on_render (21) (0 ms, 0.00%) - - - +text x="224.16" y="575.5" > +/g> +g > +title>PlatformosCheck::Node#tag_markup (75) (4 ms, 0.11%) +text x="1128.25" y="639.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (8086) (2 ms, 0.05%) +text x="1235.10" y="703.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#on_render (21) (0 ms, 0.00%) +text x="726.03" y="543.5" > +/g> +g > Class#new (47) (2 ms, 0.05%) - - - -ThemeCheck::MissingEnableComment#on_comment (13) (0 ms, 0.00%) - - - +text x="236.36" y="479.5" > +/g> +g > +title>PlatformosCheck::MissingEnableComment#on_comment (13) (0 ms, 0.00%) +text x="1570.78" y="799.5" > +/g> +g > Kernel#is_a? (2509) (0 ms, 0.00%) @@ -9038,13 +9038,13 @@ Liquid::Parser#expression (26) (0 ms, 0.00%) - - - -ThemeCheck::Position#needle (95) (1 ms, 0.03%) - - - +text x="145.73" y="655.5" > +/g> +g > +title>PlatformosCheck::Position#needle (95) (1 ms, 0.03%) +text x="460.95" y="319.5" > +/g> +g > Liquid::BlockBody#whitespace_handler (147) (0 ms, 0.00%) @@ -9054,13 +9054,13 @@ Liquid::ParserSwitching#strict_parse_with_error_context (6) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (192) (0 ms, 0.00%) - - - +text x="165.75" y="271.5" > +/g> +g > +title>PlatformosCheck::Node#markup (192) (0 ms, 0.00%) +text x="1381.37" y="671.5" > +/g> +g > Liquid::Variable#parse_filterargs (38) (0 ms, 0.00%) @@ -9070,25 +9070,25 @@ String#[] (1076) (0 ms, 0.00%) - - - -ThemeCheck::Check#ignored? (4952) (1 ms, 0.03%) - - - +text x="1240.15" y="671.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (4952) (1 ms, 0.03%) +text x="694.26" y="543.5" > +/g> +g > Class#new (2) (0 ms, 0.00%) Class#new (11) (0 ms, 0.00%) - - - -ThemeCheck::Checks#call (704) (5 ms, 0.13%) - - - +text x="144.84" y="623.5" > +/g> +g > +title>PlatformosCheck::Checks#call (704) (5 ms, 0.13%) +text x="74.06" y="623.5" > +/g> +g > String#index (74) (0 ms, 0.00%) @@ -9118,33 +9118,33 @@ Pathname#chop_basename (1852) (4 ms, 0.11%) - - - -ThemeCheck::Node#comment? (1832) (1 ms, 0.03%) - - - +text x="1733.51" y="879.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1832) (1 ms, 0.03%) +text x="807.23" y="655.5" > +/g> +g > Liquid::BlockBody#parse_for_document (5) (3 ms, 0.08%) Kernel#loop (88) (0 ms, 0.00%) - - - -ThemeCheck::Node#comment? (454) (0 ms, 0.00%) - - - +text x="410.58" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (454) (0 ms, 0.00%) +text x="392.31" y="367.5" > +/g> +g > Kernel#is_a? (1482) (0 ms, 0.00%) - - - -ThemeCheck::UnknownFilter#on_variable (193) (1 ms, 0.03%) - - - +text x="732.86" y="575.5" > +/g> +g > +title>PlatformosCheck::UnknownFilter#on_variable (193) (1 ms, 0.03%) +text x="1466.25" y="767.5" > +/g> +g > Liquid::Variable#initialize (6) (1 ms, 0.03%) @@ -9170,13 +9170,13 @@ <Object::Object>#[] (5266) (4 ms, 0.11%) - - - -ThemeCheck::Theme#[] (33) (14 ms, 0.37%) - - - +text x="1440.77" y="767.5" > +/g> +g > +title>PlatformosCheck::Theme#[] (33) (14 ms, 0.37%) +text x="1010.09" y="607.5" > +/g> +g > Liquid::ParserSwitching#strict_parse_with_error_context (2) (0 ms, 0.00%) @@ -9198,53 +9198,53 @@ String#to_sym (1335) (0 ms, 0.00%) - - - -ThemeCheck::HtmlVisitor#call_checks (1328) (12 ms, 0.32%) - - - +text x="737.38" y="623.5" > +/g> +g > +title>PlatformosCheck::HtmlVisitor#call_checks (1328) (12 ms, 0.32%) +text x="112.38" y="799.5" > +/g> +g > Liquid::For#initialize (25) (2 ms, 0.05%) Liquid::Variable#parse_filterargs (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (115) (0 ms, 0.00%) - - - -ThemeCheck::ThemeFile#source (1332) (0 ms, 0.00%) - - - -ThemeCheck::Check#ignored? (6719) (2 ms, 0.05%) - - - +text x="270.78" y="351.5" > +/g> +g > +title>PlatformosCheck::Node#markup (115) (0 ms, 0.00%) +text x="698.27" y="479.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#source (1332) (0 ms, 0.00%) +text x="1241.01" y="655.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (6719) (2 ms, 0.05%) +text x="995.51" y="639.5" > +/g> +g > String#index (780) (0 ms, 0.00%) - - - -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (149) (2 ms, 0.05%) - - - -ThemeCheck::Node#start_index (545) (5 ms, 0.13%) - - - -ThemeCheck::Checks#call (7054) (299 ms, 7.96%) -ThemeCheck::Check.. - - -ThemeCheck::ValidHTMLTranslation#html_key? (6830) (7 ms, 0.19%) - - - +text x="1030.61" y="575.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (149) (2 ms, 0.05%) +text x="581.58" y="463.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (545) (5 ms, 0.13%) +text x="721.94" y="511.5" > +/g> +g > +title>PlatformosCheck::Checks#call (7054) (299 ms, 7.96%) +text x="1159.72" y="751.5" >PlatformosCheck::Check.. +/g> +g > +title>PlatformosCheck::ValidHTMLTranslation#html_key? (6830) (7 ms, 0.19%) +text x="1702.92" y="767.5" > +/g> +g > Class#new (6) (0 ms, 0.00%) @@ -9266,37 +9266,37 @@ Liquid::Variable#initialize (12) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (393) (2 ms, 0.05%) - - - -ThemeCheck::Node#markup (132) (0 ms, 0.00%) - - - -ThemeCheck::Node#markup (1985) (6 ms, 0.16%) - - - +text x="164.05" y="383.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (393) (2 ms, 0.05%) +text x="1382.28" y="719.5" > +/g> +g > +title>PlatformosCheck::Node#markup (132) (0 ms, 0.00%) +text x="541.22" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#markup (1985) (6 ms, 0.16%) +text x="1456.87" y="751.5" > +/g> +g > Liquid::BlockBody#parse (5) (0 ms, 0.00%) - - - -ThemeCheck::Position#compute_start_offset (8) (1 ms, 0.03%) - - - +text x="258.05" y="511.5" > +/g> +g > +title>PlatformosCheck::Position#compute_start_offset (8) (1 ms, 0.03%) +text x="488.31" y="335.5" > +/g> +g > String#end_with? (4398) (1 ms, 0.03%) - - - -ThemeCheck::ThemeFile#name (120) (0 ms, 0.00%) - - - +text x="1699.13" y="719.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#name (120) (0 ms, 0.00%) +text x="490.27" y="399.5" > +/g> +g > Liquid::If#initialize (7) (1 ms, 0.03%) @@ -9306,13 +9306,13 @@ Hash#each (1197) (4 ms, 0.11%) - - - -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (452) (0 ms, 0.00%) - - - +text x="1689.80" y="639.5" > +/g> +g > +title>PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (452) (0 ms, 0.00%) +text x="1369.58" y="655.5" > +/g> +g > <Class::Regexp>#escape (318) (0 ms, 0.00%) @@ -9322,17 +9322,17 @@ Class#new (12) (1 ms, 0.03%) - - - -ThemeCheck::Position#content_line_count (115) (0 ms, 0.00%) - - - -ThemeCheck::Tags::Render#initialize (27) (0 ms, 0.00%) - - - +text x="164.56" y="479.5" > +/g> +g > +title>PlatformosCheck::Position#content_line_count (115) (0 ms, 0.00%) +text x="702.02" y="415.5" > +/g> +g > +title>PlatformosCheck::Tags::Render#initialize (27) (0 ms, 0.00%) +text x="223.83" y="639.5" > +/g> +g > <Class::Liquid::Tag>#parse (28) (17 ms, 0.45%) @@ -9350,17 +9350,17 @@ Liquid::BlockBody#parse_for_liquid_tag (18) (1 ms, 0.03%) - - - -ThemeCheck::Checks#call (5358) (185 ms, 4.92%) -ThemeCheck.. - - -ThemeCheck::Checks#call_check_method (624) (0 ms, 0.00%) - - - +text x="286.40" y="655.5" > +/g> +g > +title>PlatformosCheck::Checks#call (5358) (185 ms, 4.92%) +text x="817.86" y="655.5" >PlatformosCheck.. +/g> +g > +title>PlatformosCheck::Checks#call_check_method (624) (0 ms, 0.00%) +text x="359.45" y="111.5" > +/g> +g > Pathname#sub_ext (123) (0 ms, 0.00%) @@ -9382,13 +9382,13 @@ Liquid::If#parse_expression (75) (1 ms, 0.03%) - - - -ThemeCheck::Position#needle (40) (0 ms, 0.00%) - - - +text x="158.84" y="527.5" > +/g> +g > +title>PlatformosCheck::Position#needle (40) (0 ms, 0.00%) +text x="407.57" y="255.5" > +/g> +g > Array#each (91) (182 ms, 4.84%) Array#eac.. @@ -9398,17 +9398,17 @@ Liquid::Parser#initialize (415) (9 ms, 0.24%) - - - -ThemeCheck::Check#ignored? (1320) (0 ms, 0.00%) - - - -ThemeCheck::Visitor#call_checks (866) (23 ms, 0.61%) - - - +text x="278.08" y="623.5" > +/g> +g > +title>PlatformosCheck::Check#ignored? (1320) (0 ms, 0.00%) +text x="487.36" y="415.5" > +/g> +g > +title>PlatformosCheck::Visitor#call_checks (866) (23 ms, 0.61%) +text x="380.68" y="351.5" > +/g> +g > Regexp#match? (884) (0 ms, 0.00%) @@ -9418,93 +9418,93 @@ <Class::Nokogiri::XML::DocumentFragment>#new (124) (4 ms, 0.11%) - - - -ThemeCheck::UndefinedObject#ignore? (58) (0 ms, 0.00%) - - - +text x="1700.04" y="687.5" > +/g> +g > +title>PlatformosCheck::UndefinedObject#ignore? (58) (0 ms, 0.00%) +text x="390.53" y="271.5" > +/g> +g > Class#new (62) (7 ms, 0.19%) - - - -ThemeCheck::HtmlNode#attributes (102) (1 ms, 0.03%) - - - +text x="180.60" y="495.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#attributes (102) (1 ms, 0.03%) +text x="90.62" y="623.5" > +/g> +g > Liquid::Variable#initialize (8) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#children (734) (4 ms, 0.11%) - - - +text x="247.88" y="223.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#children (734) (4 ms, 0.11%) +text x="91.30" y="735.5" > +/g> +g > <Class::Liquid::Condition>#parse_expression (289) (3 ms, 0.08%) - - - -ThemeCheck::ThemeFile#relative_path (1586) (0 ms, 0.00%) - - - +text x="221.09" y="511.5" > +/g> +g > +title>PlatformosCheck::ThemeFile#relative_path (1586) (0 ms, 0.00%) +text x="1574.78" y="703.5" > +/g> +g > Liquid::Variable#strict_parse (4) (1 ms, 0.03%) - - - -ThemeCheck::StringHelpers#underscore (404) (2 ms, 0.05%) - - - +text x="248.21" y="95.5" > +/g> +g > +title>PlatformosCheck::StringHelpers#underscore (404) (2 ms, 0.05%) +text x="393.48" y="367.5" > +/g> +g > Liquid::If#push_block (9) (1 ms, 0.03%) - - - -ThemeCheck::Node#comment? (559) (0 ms, 0.00%) - - - +text x="188.81" y="303.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (559) (0 ms, 0.00%) +text x="439.75" y="431.5" > +/g> +g > String#scan (76) (5 ms, 0.13%) Liquid::Block#new_body (1) (2 ms, 0.05%) - - - -ThemeCheck::Node#children (31) (0 ms, 0.00%) - - - -ThemeCheck::HtmlNode#initialize (734) (0 ms, 0.00%) - - - -ThemeCheck::Node#comment? (1597) (1 ms, 0.03%) - - - -ThemeCheck::Node#start_index (40) (1 ms, 0.03%) - - - -ThemeCheck::Node#comment? (821) (0 ms, 0.00%) - - - +text x="245.56" y="367.5" > +/g> +g > +title>PlatformosCheck::Node#children (31) (0 ms, 0.00%) +text x="1378.13" y="719.5" > +/g> +g > +title>PlatformosCheck::HtmlNode#initialize (734) (0 ms, 0.00%) +text x="102.02" y="687.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (1597) (1 ms, 0.03%) +text x="1303.61" y="799.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (40) (1 ms, 0.03%) +text x="488.05" y="383.5" > +/g> +g > +title>PlatformosCheck::Node#comment? (821) (0 ms, 0.00%) +text x="494.08" y="511.5" > +/g> +g > String#index (95) (0 ms, 0.00%) - - - -ThemeCheck::Node#start_index (1073) (22 ms, 0.59%) - - - -ThemeCheck::Node#literal? (1597) (1 ms, 0.03%) - - - +text x="461.03" y="287.5" > +/g> +g > +title>PlatformosCheck::Node#start_index (1073) (22 ms, 0.59%) +text x="999.77" y="607.5" > +/g> +g > +title>PlatformosCheck::Node#literal? (1597) (1 ms, 0.03%) +text x="1304.01" y="799.5" > +/g> +g > Class#new (9) (0 ms, 0.00%) @@ -9514,13 +9514,13 @@ Liquid::ParserSwitching#strict_parse_with_error_context (4) (0 ms, 0.00%) - - - -ThemeCheck::Node#line_number (442) (1 ms, 0.03%) - - - +text x="241.83" y="431.5" > +/g> +g > +title>PlatformosCheck::Node#line_number (442) (1 ms, 0.03%) +text x="1293.14" y="655.5" > +/g> +g > Liquid::If#unknown_tag (22) (0 ms, 0.00%) @@ -9537,11 +9537,11 @@ -ThemeCheck::Node#tag? (629) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (629) (0 ms, 0.00%) -ThemeCheck::Checks#call_check_method (34) (14 ms, 0.37%) +PlatformosCheck::Checks#call_check_method (34) (14 ms, 0.37%) @@ -9549,7 +9549,7 @@ -ThemeCheck::Check#ignored? (3024) (1 ms, 0.03%) +PlatformosCheck::Check#ignored? (3024) (1 ms, 0.03%) @@ -9605,15 +9605,15 @@ -ThemeCheck::Template#snippet? (375) (5 ms, 0.13%) +PlatformosCheck::Template#snippet? (375) (5 ms, 0.13%) -ThemeCheck::Node#line_number (70) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (70) (0 ms, 0.00%) -ThemeCheck::ThemeFile#name (110) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (110) (0 ms, 0.00%) @@ -9621,7 +9621,7 @@ -ThemeCheck::HtmlVisitor#call_checks (182) (2 ms, 0.05%) +PlatformosCheck::HtmlVisitor#call_checks (182) (2 ms, 0.05%) @@ -9645,15 +9645,15 @@ -ThemeCheck::UndefinedObject#on_end (1) (9 ms, 0.24%) +PlatformosCheck::UndefinedObject#on_end (1) (9 ms, 0.24%) -ThemeCheck::Position#can_find_needle? (95) (0 ms, 0.00%) +PlatformosCheck::Position#can_find_needle? (95) (0 ms, 0.00%) -ThemeCheck::Position#line_number (85) (0 ms, 0.00%) +PlatformosCheck::Position#line_number (85) (0 ms, 0.00%) @@ -9673,7 +9673,7 @@ -ThemeCheck::StringHelpers#underscore (788) (4 ms, 0.11%) +PlatformosCheck::StringHelpers#underscore (788) (4 ms, 0.11%) @@ -9681,11 +9681,11 @@ -ThemeCheck::Node#type_name (2898) (16 ms, 0.43%) +PlatformosCheck::Node#type_name (2898) (16 ms, 0.43%) -ThemeCheck::Node#tag? (442) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (442) (0 ms, 0.00%) @@ -9697,7 +9697,7 @@ -ThemeCheck::ThemeFile#name (209) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (209) (1 ms, 0.03%) @@ -9713,7 +9713,7 @@ -ThemeCheck::ThemeFile#relative_path (903) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#relative_path (903) (0 ms, 0.00%) @@ -9721,7 +9721,7 @@ -ThemeCheck::Checks#call_check_method (38640) (39 ms, 1.04%) +PlatformosCheck::Checks#call_check_method (38640) (39 ms, 1.04%) @@ -9737,7 +9737,7 @@ -ThemeCheck::Checks#call (1328) (11 ms, 0.29%) +PlatformosCheck::Checks#call (1328) (11 ms, 0.29%) @@ -9753,15 +9753,15 @@ -ThemeCheck::UndefinedObject#ignore? (91) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#ignore? (91) (1 ms, 0.03%) -ThemeCheck::ThemeFile#name (58) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (58) (0 ms, 0.00%) -ThemeCheck::ThemeFile#relative_path (91) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#relative_path (91) (0 ms, 0.00%) @@ -9769,7 +9769,7 @@ -ThemeCheck::StringHelpers#demodulize (168) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#demodulize (168) (0 ms, 0.00%) @@ -9777,7 +9777,7 @@ -ThemeCheck::Position#contents (721) (0 ms, 0.00%) +PlatformosCheck::Position#contents (721) (0 ms, 0.00%) @@ -9785,7 +9785,7 @@ -ThemeCheck::ThemeFile#name (3504) (10 ms, 0.27%) +PlatformosCheck::ThemeFile#name (3504) (10 ms, 0.27%) @@ -9797,11 +9797,11 @@ -ThemeCheck::Checks#call_check_method (3792) (3 ms, 0.08%) +PlatformosCheck::Checks#call_check_method (3792) (3 ms, 0.08%) -ThemeCheck::ThemeFile#name (213) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (213) (1 ms, 0.03%) @@ -9817,19 +9817,19 @@ -ThemeCheck::Node#inside_liquid_tag? (38) (2 ms, 0.05%) +PlatformosCheck::Node#inside_liquid_tag? (38) (2 ms, 0.05%) -<Module::ThemeCheck>#with_liquid_c_disabled (1) (3,502 ms, 93.19%) -<Module::ThemeCheck>#with_liquid_c_disabled (1) +<Module::PlatformosCheck>#with_liquid_c_disabled (1) (3,502 ms, 93.19%) +<Module::PlatformosCheck>#with_liquid_c_disabled (1) -ThemeCheck::Position#start_offset (95) (2 ms, 0.05%) +PlatformosCheck::Position#start_offset (95) (2 ms, 0.05%) -ThemeCheck::Node#block_tag? (504) (0 ms, 0.00%) +PlatformosCheck::Node#block_tag? (504) (0 ms, 0.00%) @@ -9845,7 +9845,7 @@ -ThemeCheck::Position#contents (1090) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1090) (1 ms, 0.03%) @@ -9877,7 +9877,7 @@ -ThemeCheck::UndefinedObject#ignore? (110) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject#ignore? (110) (0 ms, 0.00%) @@ -9885,7 +9885,7 @@ -ThemeCheck::Node#block? (120) (0 ms, 0.00%) +PlatformosCheck::Node#block? (120) (0 ms, 0.00%) @@ -9897,15 +9897,15 @@ -ThemeCheck::Node#document? (441) (0 ms, 0.00%) +PlatformosCheck::Node#document? (441) (0 ms, 0.00%) -ThemeCheck::Position#contents (1896) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1896) (1 ms, 0.03%) -ThemeCheck::HtmlNode#children (97) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#children (97) (0 ms, 0.00%) @@ -9929,15 +9929,15 @@ -ThemeCheck::StringHelpers#underscore (884) (5 ms, 0.13%) +PlatformosCheck::StringHelpers#underscore (884) (5 ms, 0.13%) -ThemeCheck::Position#start_index (1073) (20 ms, 0.53%) +PlatformosCheck::Position#start_index (1073) (20 ms, 0.53%) -ThemeCheck::Position#contents (773) (0 ms, 0.00%) +PlatformosCheck::Position#contents (773) (0 ms, 0.00%) @@ -9953,7 +9953,7 @@ -ThemeCheck::Theme#[] (38) (11 ms, 0.29%) +PlatformosCheck::Theme#[] (38) (11 ms, 0.29%) @@ -9965,7 +9965,7 @@ -ThemeCheck::UndefinedObject#ignore? (61) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject#ignore? (61) (0 ms, 0.00%) @@ -9993,15 +9993,15 @@ -ThemeCheck::Node#comment? (508) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (508) (0 ms, 0.00%) -ThemeCheck::Node#literal? (1941) (1 ms, 0.03%) +PlatformosCheck::Node#literal? (1941) (1 ms, 0.03%) -ThemeCheck::ThemeFile#relative_path (3504) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#relative_path (3504) (1 ms, 0.03%) @@ -10009,7 +10009,7 @@ -ThemeCheck::Node#start_index (250) (2 ms, 0.05%) +PlatformosCheck::Node#start_index (250) (2 ms, 0.05%) @@ -10021,7 +10021,7 @@ -ThemeCheck::SpaceInsideBraces#on_tag (165) (9 ms, 0.24%) +PlatformosCheck::SpaceInsideBraces#on_tag (165) (9 ms, 0.24%) @@ -10053,7 +10053,7 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (165) (1 ms, 0.03%) +PlatformosCheck::UnusedAssign#on_variable_lookup (165) (1 ms, 0.03%) @@ -10085,15 +10085,15 @@ -ThemeCheck::Visitor#call_checks (5484) (298 ms, 7.93%) -ThemeCheck::Visit.. +PlatformosCheck::Visitor#call_checks (5484) (298 ms, 7.93%) +PlatformosCheck::Visit.. String#scan (1372) (1 ms, 0.03%) -ThemeCheck::HtmlVisitor#visit (632) (157 ms, 4.18%) +PlatformosCheck::HtmlVisitor#visit (632) (157 ms, 4.18%) ThemeChe.. @@ -10113,7 +10113,7 @@ -ThemeCheck::PositionHelper#from_row_column_to_index (38) (4 ms, 0.11%) +PlatformosCheck::PositionHelper#from_row_column_to_index (38) (4 ms, 0.11%) @@ -10149,11 +10149,11 @@ -ThemeCheck::Node#position (238) (0 ms, 0.00%) +PlatformosCheck::Node#position (238) (0 ms, 0.00%) -ThemeCheck::UndefinedObject#on_variable_lookup (165) (3 ms, 0.08%) +PlatformosCheck::UndefinedObject#on_variable_lookup (165) (3 ms, 0.08%) @@ -10189,7 +10189,7 @@ -ThemeCheck::JsonFile#content (209) (0 ms, 0.00%) +PlatformosCheck::JsonFile#content (209) (0 ms, 0.00%) @@ -10201,15 +10201,15 @@ -ThemeCheck::Checks#call_check_method (165024) (196 ms, 5.22%) -ThemeCheck.. +PlatformosCheck::Checks#call_check_method (165024) (196 ms, 5.22%) +PlatformosCheck.. StringScanner#scan (353) (0 ms, 0.00%) -ThemeCheck::Position#start_index (240) (3 ms, 0.08%) +PlatformosCheck::Position#start_index (240) (3 ms, 0.08%) @@ -10221,7 +10221,7 @@ Array#each (908) -ThemeCheck::Position#needle (365) (2 ms, 0.05%) +PlatformosCheck::Position#needle (365) (2 ms, 0.05%) @@ -10233,15 +10233,15 @@ -ThemeCheck::Node#start_index (330) (3 ms, 0.08%) +PlatformosCheck::Node#start_index (330) (3 ms, 0.08%) -ThemeCheck::Visitor#call_checks (1610) (53 ms, 1.41%) +PlatformosCheck::Visitor#call_checks (1610) (53 ms, 1.41%) T.. -ThemeCheck::SpaceInsideBraces#on_tag (4) (0 ms, 0.00%) +PlatformosCheck::SpaceInsideBraces#on_tag (4) (0 ms, 0.00%) @@ -10249,7 +10249,7 @@ Liq.. -ThemeCheck::UnknownFilter#on_variable (88) (0 ms, 0.00%) +PlatformosCheck::UnknownFilter#on_variable (88) (0 ms, 0.00%) @@ -10257,7 +10257,7 @@ -ThemeCheck::PositionHelper#from_row_column_to_index (70) (7 ms, 0.19%) +PlatformosCheck::PositionHelper#from_row_column_to_index (70) (7 ms, 0.19%) @@ -10265,7 +10265,7 @@ -ThemeCheck::LiquidTag#on_string (318) (1 ms, 0.03%) +PlatformosCheck::LiquidTag#on_string (318) (1 ms, 0.03%) @@ -10277,11 +10277,11 @@ -ThemeCheck::Node#tag? (2369) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (2369) (1 ms, 0.03%) -ThemeCheck::Node#inside_liquid_tag? (31) (6 ms, 0.16%) +PlatformosCheck::Node#inside_liquid_tag? (31) (6 ms, 0.16%) @@ -10293,7 +10293,7 @@ -ThemeCheck::ThemeFile#name (165) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (165) (1 ms, 0.03%) @@ -10301,19 +10301,19 @@ -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (1090) (0 ms, 0.00%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (1090) (0 ms, 0.00%) -ThemeCheck::Position#contents (1896) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1896) (1 ms, 0.03%) -ThemeCheck::Node#block_tag? (1415) (1 ms, 0.03%) +PlatformosCheck::Node#block_tag? (1415) (1 ms, 0.03%) -ThemeCheck::RemoteAsset#on_element (230) (1 ms, 0.03%) +PlatformosCheck::RemoteAsset#on_element (230) (1 ms, 0.03%) @@ -10321,11 +10321,11 @@ -ThemeCheck::UnknownFilter#on_variable (204) (1 ms, 0.03%) +PlatformosCheck::UnknownFilter#on_variable (204) (1 ms, 0.03%) -ThemeCheck::Node#inside_liquid_tag? (39) (8 ms, 0.21%) +PlatformosCheck::Node#inside_liquid_tag? (39) (8 ms, 0.21%) @@ -10373,7 +10373,7 @@ -ThemeCheck::StringHelpers#underscore (52) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#underscore (52) (0 ms, 0.00%) @@ -10385,7 +10385,7 @@ -ThemeCheck::Node#comment? (1695) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (1695) (1 ms, 0.03%) @@ -10397,7 +10397,7 @@ -ThemeCheck::StringHelpers#underscore (793) (4 ms, 0.11%) +PlatformosCheck::StringHelpers#underscore (793) (4 ms, 0.11%) @@ -10409,7 +10409,7 @@ -ThemeCheck::LiquidTag#on_string (793) (3 ms, 0.08%) +PlatformosCheck::LiquidTag#on_string (793) (3 ms, 0.08%) @@ -10437,7 +10437,7 @@ -ThemeCheck::HtmlNode#name (486) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#name (486) (0 ms, 0.00%) @@ -10445,11 +10445,11 @@ -ThemeCheck::UndefinedObject#ignore? (209) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#ignore? (209) (1 ms, 0.03%) -ThemeCheck::Node#markup (373) (1 ms, 0.03%) +PlatformosCheck::Node#markup (373) (1 ms, 0.03%) @@ -10469,7 +10469,7 @@ -ThemeCheck::Position#contents (365) (0 ms, 0.00%) +PlatformosCheck::Position#contents (365) (0 ms, 0.00%) @@ -10485,7 +10485,7 @@ -ThemeCheck::Node#line_number (73) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (73) (0 ms, 0.00%) @@ -10497,7 +10497,7 @@ -ThemeCheck::Check#ignored? (7639) (2 ms, 0.05%) +PlatformosCheck::Check#ignored? (7639) (2 ms, 0.05%) @@ -10513,7 +10513,7 @@ -ThemeCheck::ThemeFile#relative_path (2003) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#relative_path (2003) (1 ms, 0.03%) @@ -10529,7 +10529,7 @@ -ThemeCheck::Theme#json (1) (41 ms, 1.09%) +PlatformosCheck::Theme#json (1) (41 ms, 1.09%) @@ -10557,7 +10557,7 @@ -ThemeCheck::Node#start_index (773) (23 ms, 0.61%) +PlatformosCheck::Node#start_index (773) (23 ms, 0.61%) @@ -10581,7 +10581,7 @@ -ThemeCheck::ParsingHelpers#outside_of_strings (305) (4 ms, 0.11%) +PlatformosCheck::ParsingHelpers#outside_of_strings (305) (4 ms, 0.11%) @@ -10589,15 +10589,15 @@ -ThemeCheck::Position#start_line_offset (85) (7 ms, 0.19%) +PlatformosCheck::Position#start_line_offset (85) (7 ms, 0.19%) -ThemeCheck::ThemeFile#name (1586) (8 ms, 0.21%) +PlatformosCheck::ThemeFile#name (1586) (8 ms, 0.21%) -ThemeCheck::Node#markup (673) (1 ms, 0.03%) +PlatformosCheck::Node#markup (673) (1 ms, 0.03%) @@ -10609,15 +10609,15 @@ -ThemeCheck::Check#ignored? (3938) (1 ms, 0.03%) +PlatformosCheck::Check#ignored? (3938) (1 ms, 0.03%) -ThemeCheck::ParsingHelpers#outside_of_strings (48) (1 ms, 0.03%) +PlatformosCheck::ParsingHelpers#outside_of_strings (48) (1 ms, 0.03%) -ThemeCheck::ThemeFile#name (342) (4 ms, 0.11%) +PlatformosCheck::ThemeFile#name (342) (4 ms, 0.11%) @@ -10633,7 +10633,7 @@ -ThemeCheck::Checks#call (82) (2 ms, 0.05%) +PlatformosCheck::Checks#call (82) (2 ms, 0.05%) @@ -10645,7 +10645,7 @@ -ThemeCheck::Node#markup (987) (9 ms, 0.24%) +PlatformosCheck::Node#markup (987) (9 ms, 0.24%) @@ -10665,11 +10665,11 @@ -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (2267) (1 ms, 0.03%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (2267) (1 ms, 0.03%) -ThemeCheck::Checks#call_check_method (1968) (1 ms, 0.03%) +PlatformosCheck::Checks#call_check_method (1968) (1 ms, 0.03%) @@ -10681,7 +10681,7 @@ -ThemeCheck::Template#snippet? (342) (1 ms, 0.03%) +PlatformosCheck::Template#snippet? (342) (1 ms, 0.03%) @@ -10693,7 +10693,7 @@ -ThemeCheck::Position#compute_start_offset (31) (3 ms, 0.08%) +PlatformosCheck::Position#compute_start_offset (31) (3 ms, 0.08%) @@ -10701,11 +10701,11 @@ -ThemeCheck::Node#type_name (50) (0 ms, 0.00%) +PlatformosCheck::Node#type_name (50) (0 ms, 0.00%) -ThemeCheck::StringHelpers#underscore (62) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#underscore (62) (0 ms, 0.00%) @@ -10717,7 +10717,7 @@ -ThemeCheck::JsonFile#content (104) (76 ms, 2.02%) +PlatformosCheck::JsonFile#content (104) (76 ms, 2.02%) Th.. @@ -10769,7 +10769,7 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (58) (0 ms, 0.00%) +PlatformosCheck::UnusedAssign#on_variable_lookup (58) (0 ms, 0.00%) @@ -10781,7 +10781,7 @@ -ThemeCheck::Template#snippet? (165) (1 ms, 0.03%) +PlatformosCheck::Template#snippet? (165) (1 ms, 0.03%) @@ -10797,11 +10797,11 @@ -ThemeCheck::Position#start_offset (1680) (0 ms, 0.00%) +PlatformosCheck::Position#start_offset (1680) (0 ms, 0.00%) -ThemeCheck::Node#position (411) (0 ms, 0.00%) +PlatformosCheck::Node#position (411) (0 ms, 0.00%) @@ -10833,7 +10833,7 @@ -ThemeCheck::StringHelpers#demodulize (1578) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#demodulize (1578) (2 ms, 0.05%) @@ -10845,7 +10845,7 @@ -ThemeCheck::ThemeFile#source (1) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#source (1) (0 ms, 0.00%) @@ -10853,7 +10853,7 @@ -ThemeCheck::DeprecatedGlobalAppBlockType#on_variable (204) (0 ms, 0.00%) +PlatformosCheck::DeprecatedGlobalAppBlockType#on_variable (204) (0 ms, 0.00%) @@ -10865,7 +10865,7 @@ -ThemeCheck::Position#contents (452) (0 ms, 0.00%) +PlatformosCheck::Position#contents (452) (0 ms, 0.00%) @@ -10873,7 +10873,7 @@ -ThemeCheck::LiquidTag#on_tag (70) (15 ms, 0.40%) +PlatformosCheck::LiquidTag#on_tag (70) (15 ms, 0.40%) @@ -10885,11 +10885,11 @@ -ThemeCheck::ThemeFile#source (1344) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#source (1344) (0 ms, 0.00%) -ThemeCheck::Node#markup (343) (1 ms, 0.03%) +PlatformosCheck::Node#markup (343) (1 ms, 0.03%) @@ -10897,7 +10897,7 @@ -ThemeCheck::UnknownFilter#on_variable (193) (1 ms, 0.03%) +PlatformosCheck::UnknownFilter#on_variable (193) (1 ms, 0.03%) @@ -10909,15 +10909,15 @@ -ThemeCheck::Node#children (508) (4 ms, 0.11%) +PlatformosCheck::Node#children (508) (4 ms, 0.11%) -ThemeCheck::Position#can_find_needle? (105) (0 ms, 0.00%) +PlatformosCheck::Position#can_find_needle? (105) (0 ms, 0.00%) -ThemeCheck::Node#line_number (256) (1 ms, 0.03%) +PlatformosCheck::Node#line_number (256) (1 ms, 0.03%) @@ -10925,7 +10925,7 @@ -ThemeCheck::Position#can_find_needle? (220) (1 ms, 0.03%) +PlatformosCheck::Position#can_find_needle? (220) (1 ms, 0.03%) @@ -10949,7 +10949,7 @@ -ThemeCheck::ThemeFile#source (1693) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#source (1693) (0 ms, 0.00%) @@ -10961,7 +10961,7 @@ -ThemeCheck::HtmlNode#children (553) (3 ms, 0.08%) +PlatformosCheck::HtmlNode#children (553) (3 ms, 0.08%) @@ -10969,7 +10969,7 @@ -ThemeCheck::DeprecatedFilter#on_variable (313) (1 ms, 0.03%) +PlatformosCheck::DeprecatedFilter#on_variable (313) (1 ms, 0.03%) @@ -11001,7 +11001,7 @@ -ThemeCheck::Node#start_index (160) (2 ms, 0.05%) +PlatformosCheck::Node#start_index (160) (2 ms, 0.05%) @@ -11017,19 +11017,19 @@ -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (29) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (29) (0 ms, 0.00%) -ThemeCheck::Node#tag? (1134) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (1134) (1 ms, 0.03%) -ThemeCheck::ThemeFile#name (681) (2 ms, 0.05%) +PlatformosCheck::ThemeFile#name (681) (2 ms, 0.05%) -ThemeCheck::Node#markup (217) (0 ms, 0.00%) +PlatformosCheck::Node#markup (217) (0 ms, 0.00%) @@ -11045,7 +11045,7 @@ -ThemeCheck::SpaceInsideBraces#on_tag (373) (21 ms, 0.56%) +PlatformosCheck::SpaceInsideBraces#on_tag (373) (21 ms, 0.56%) @@ -11057,19 +11057,19 @@ -ThemeCheck::Node#initialize (316) (0 ms, 0.00%) +PlatformosCheck::Node#initialize (316) (0 ms, 0.00%) -ThemeCheck::Theme#[] (1) (0 ms, 0.00%) +PlatformosCheck::Theme#[] (1) (0 ms, 0.00%) -ThemeCheck::Theme#[] (7) (2 ms, 0.05%) +PlatformosCheck::Theme#[] (7) (2 ms, 0.05%) -ThemeCheck::Node#inside_liquid_tag? (165) (8 ms, 0.21%) +PlatformosCheck::Node#inside_liquid_tag? (165) (8 ms, 0.21%) @@ -11077,7 +11077,7 @@ -ThemeCheck::Position#can_find_needle? (150) (1 ms, 0.03%) +PlatformosCheck::Position#can_find_needle? (150) (1 ms, 0.03%) @@ -11085,7 +11085,7 @@ -ThemeCheck::StringHelpers#underscore (473) (3 ms, 0.08%) +PlatformosCheck::StringHelpers#underscore (473) (3 ms, 0.08%) @@ -11097,23 +11097,23 @@ -ThemeCheck::Node#tag_markup (714) (24 ms, 0.64%) +PlatformosCheck::Node#tag_markup (714) (24 ms, 0.64%) -ThemeCheck::Node#tag? (639) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (639) (0 ms, 0.00%) -ThemeCheck::RequiredLayoutThemeObject#on_variable (209) (0 ms, 0.00%) +PlatformosCheck::RequiredLayoutThemeObject#on_variable (209) (0 ms, 0.00%) -ThemeCheck::Node#start_index (40) (2 ms, 0.05%) +PlatformosCheck::Node#start_index (40) (2 ms, 0.05%) -ThemeCheck::HtmlNode#name (746) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#name (746) (1 ms, 0.03%) @@ -11129,7 +11129,7 @@ -ThemeCheck::Node#inside_liquid_tag? (256) (39 ms, 1.04%) +PlatformosCheck::Node#inside_liquid_tag? (256) (39 ms, 1.04%) @@ -11161,7 +11161,7 @@ -ThemeCheck::Position#line_number (256) (1 ms, 0.03%) +PlatformosCheck::Position#line_number (256) (1 ms, 0.03%) @@ -11169,7 +11169,7 @@ -ThemeCheck::UndefinedObject#ignore? (249) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#ignore? (249) (1 ms, 0.03%) @@ -11193,11 +11193,11 @@ -ThemeCheck::HtmlNode#name (1007) (2 ms, 0.05%) +PlatformosCheck::HtmlNode#name (1007) (2 ms, 0.05%) -ThemeCheck::Node#comment? (2263) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (2263) (1 ms, 0.03%) @@ -11205,11 +11205,11 @@ -ThemeCheck::Visitor#call_checks (4318) (180 ms, 4.79%) +PlatformosCheck::Visitor#call_checks (4318) (180 ms, 4.79%) ThemeChec.. -ThemeCheck::ShopifyLiquid::Filter#labels (313) (6 ms, 0.16%) +PlatformosCheck::ShopifyLiquid::Filter#labels (313) (6 ms, 0.16%) @@ -11217,11 +11217,11 @@ -ThemeCheck::UndefinedObject#on_variable_lookup (197) (4 ms, 0.11%) +PlatformosCheck::UndefinedObject#on_variable_lookup (197) (4 ms, 0.11%) -ThemeCheck::SpaceInsideBraces#on_tag (31) (2 ms, 0.05%) +PlatformosCheck::SpaceInsideBraces#on_tag (31) (2 ms, 0.05%) @@ -11229,7 +11229,7 @@ -ThemeCheck::Position#start_index (220) (2 ms, 0.05%) +PlatformosCheck::Position#start_index (220) (2 ms, 0.05%) @@ -11237,7 +11237,7 @@ -ThemeCheck::Node#inside_liquid_tag? (52) (8 ms, 0.21%) +PlatformosCheck::Node#inside_liquid_tag? (52) (8 ms, 0.21%) @@ -11253,7 +11253,7 @@ -ThemeCheck::Node#children (48) (1 ms, 0.03%) +PlatformosCheck::Node#children (48) (1 ms, 0.03%) @@ -11273,15 +11273,15 @@ -ThemeCheck::ThemeFile#name (165) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (165) (1 ms, 0.03%) -ThemeCheck::Node#type_name (253) (1 ms, 0.03%) +PlatformosCheck::Node#type_name (253) (1 ms, 0.03%) -ThemeCheck::HtmlNode#initialize (377) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#initialize (377) (0 ms, 0.00%) @@ -11313,7 +11313,7 @@ -ThemeCheck::ThemeFile#name (209) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (209) (1 ms, 0.03%) @@ -11325,7 +11325,7 @@ -ThemeCheck::Node#comment? (2248) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (2248) (1 ms, 0.03%) @@ -11333,7 +11333,7 @@ -ThemeCheck::Position#start_offset (250) (2 ms, 0.05%) +PlatformosCheck::Position#start_offset (250) (2 ms, 0.05%) @@ -11373,11 +11373,11 @@ -ThemeCheck::Visitor#call_checks (2588) (72 ms, 1.92%) +PlatformosCheck::Visitor#call_checks (2588) (72 ms, 1.92%) Th.. -ThemeCheck::Position#can_find_needle? (70) (0 ms, 0.00%) +PlatformosCheck::Position#can_find_needle? (70) (0 ms, 0.00%) @@ -11413,11 +11413,11 @@ -ThemeCheck::Position#contents (452) (0 ms, 0.00%) +PlatformosCheck::Position#contents (452) (0 ms, 0.00%) -ThemeCheck::SpaceInsideBraces#on_variable (193) (1 ms, 0.03%) +PlatformosCheck::SpaceInsideBraces#on_variable (193) (1 ms, 0.03%) @@ -11433,15 +11433,15 @@ -ThemeCheck::Node#literal? (2286) (2 ms, 0.05%) +PlatformosCheck::Node#literal? (2286) (2 ms, 0.05%) -ThemeCheck::Node#block? (949) (2 ms, 0.05%) +PlatformosCheck::Node#block? (949) (2 ms, 0.05%) -ThemeCheck::Node#type_name (2594) (14 ms, 0.37%) +PlatformosCheck::Node#type_name (2594) (14 ms, 0.37%) @@ -11461,11 +11461,11 @@ -ThemeCheck::Node#start_index (486) (14 ms, 0.37%) +PlatformosCheck::Node#start_index (486) (14 ms, 0.37%) -ThemeCheck::Position#start_line_offset (256) (17 ms, 0.45%) +PlatformosCheck::Position#start_line_offset (256) (17 ms, 0.45%) @@ -11473,11 +11473,11 @@ -ThemeCheck::Checks#call (60) (2 ms, 0.05%) +PlatformosCheck::Checks#call (60) (2 ms, 0.05%) -ThemeCheck::HtmlVisitor#call_checks (524) (4 ms, 0.11%) +PlatformosCheck::HtmlVisitor#call_checks (524) (4 ms, 0.11%) @@ -11493,11 +11493,11 @@ -ThemeCheck::Node#start_index (95) (3 ms, 0.08%) +PlatformosCheck::Node#start_index (95) (3 ms, 0.08%) -ThemeCheck::Position#contents (1680) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1680) (1 ms, 0.03%) @@ -11509,7 +11509,7 @@ -ThemeCheck::Position#can_find_needle? (240) (1 ms, 0.03%) +PlatformosCheck::Position#can_find_needle? (240) (1 ms, 0.03%) @@ -11521,7 +11521,7 @@ -ThemeCheck::HtmlNode#attributes (54) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#attributes (54) (0 ms, 0.00%) @@ -11529,7 +11529,7 @@ -ThemeCheck::ValidHTMLTranslation#parse_and_add_offense (310) (14 ms, 0.37%) +PlatformosCheck::ValidHTMLTranslation#parse_and_add_offense (310) (14 ms, 0.37%) @@ -11545,7 +11545,7 @@ -ThemeCheck::Template#snippet? (312) (1 ms, 0.03%) +PlatformosCheck::Template#snippet? (312) (1 ms, 0.03%) @@ -11565,7 +11565,7 @@ -ThemeCheck::Node#start_index (2267) (48 ms, 1.28%) +PlatformosCheck::Node#start_index (2267) (48 ms, 1.28%) T.. @@ -11573,7 +11573,7 @@ -ThemeCheck::SpaceInsideBraces#on_tag (14) (1 ms, 0.03%) +PlatformosCheck::SpaceInsideBraces#on_tag (14) (1 ms, 0.03%) @@ -11593,15 +11593,15 @@ -ThemeCheck::UndefinedObject#ignore? (88) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject#ignore? (88) (0 ms, 0.00%) -ThemeCheck::Checks#call (1401) (17 ms, 0.45%) +PlatformosCheck::Checks#call (1401) (17 ms, 0.45%) -ThemeCheck::HtmlNode#replace_placeholders (192) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#replace_placeholders (192) (0 ms, 0.00%) @@ -11609,7 +11609,7 @@ -ThemeCheck::Visitor#call_checks (1460) (48 ms, 1.28%) +PlatformosCheck::Visitor#call_checks (1460) (48 ms, 1.28%) T.. @@ -11621,7 +11621,7 @@ -ThemeCheck::HtmlNode#children (91) (5 ms, 0.13%) +PlatformosCheck::HtmlNode#children (91) (5 ms, 0.13%) @@ -11629,7 +11629,7 @@ -ThemeCheck::LiquidTag#on_string (85) (0 ms, 0.00%) +PlatformosCheck::LiquidTag#on_string (85) (0 ms, 0.00%) @@ -11641,8 +11641,8 @@ -ThemeCheck::Visitor#visit (1581) (2,813 ms, 74.86%) -ThemeCheck::Visitor#visit (1581) +PlatformosCheck::Visitor#visit (1581) (2,813 ms, 74.86%) +PlatformosCheck::Visitor#visit (1581) Liquid::Block#parse_body (6) (0 ms, 0.00%) @@ -11653,7 +11653,7 @@ -ThemeCheck::Node#type_name (706) (3 ms, 0.08%) +PlatformosCheck::Node#type_name (706) (3 ms, 0.08%) @@ -11661,7 +11661,7 @@ -ThemeCheck::Node#inside_liquid_tag? (19) (1 ms, 0.03%) +PlatformosCheck::Node#inside_liquid_tag? (19) (1 ms, 0.03%) @@ -11669,19 +11669,19 @@ -ThemeCheck::Checks#call_check_method (3668) (2 ms, 0.05%) +PlatformosCheck::Checks#call_check_method (3668) (2 ms, 0.05%) -ThemeCheck::ValidHTMLTranslation#visit_nested (4042) (18 ms, 0.48%) +PlatformosCheck::ValidHTMLTranslation#visit_nested (4042) (18 ms, 0.48%) -ThemeCheck::SpaceInsideBraces#on_variable (313) (3 ms, 0.08%) +PlatformosCheck::SpaceInsideBraces#on_variable (313) (3 ms, 0.08%) -ThemeCheck::HtmlNode#children (377) (2 ms, 0.05%) +PlatformosCheck::HtmlNode#children (377) (2 ms, 0.05%) @@ -11689,7 +11689,7 @@ -ThemeCheck::LiquidTag#on_string (1133) (3 ms, 0.08%) +PlatformosCheck::LiquidTag#on_string (1133) (3 ms, 0.08%) @@ -11705,11 +11705,11 @@ -ThemeCheck::Checks#call_check_method (122448) (108 ms, 2.87%) +PlatformosCheck::Checks#call_check_method (122448) (108 ms, 2.87%) Theme.. -ThemeCheck::ParsingHelpers#outside_of_strings (124) (2 ms, 0.05%) +PlatformosCheck::ParsingHelpers#outside_of_strings (124) (2 ms, 0.05%) @@ -11729,7 +11729,7 @@ -ThemeCheck::Node#markup (165) (0 ms, 0.00%) +PlatformosCheck::Node#markup (165) (0 ms, 0.00%) @@ -11737,7 +11737,7 @@ -ThemeCheck::Node#comment? (899) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (899) (0 ms, 0.00%) @@ -11749,7 +11749,7 @@ -ThemeCheck::StringHelpers#underscore (127) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#underscore (127) (1 ms, 0.03%) @@ -11761,7 +11761,7 @@ -ThemeCheck::StringHelpers#underscore (50) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#underscore (50) (0 ms, 0.00%) @@ -11781,7 +11781,7 @@ -ThemeCheck::TranslationKeyExists#key_exists? (106) (1 ms, 0.03%) +PlatformosCheck::TranslationKeyExists#key_exists? (106) (1 ms, 0.03%) @@ -11789,11 +11789,11 @@ -ThemeCheck::Checks#call (6876) (256 ms, 6.81%) -ThemeCheck::Ch.. +PlatformosCheck::Checks#call (6876) (256 ms, 6.81%) +PlatformosCheck::Ch.. -ThemeCheck::Position#content_line_count (373) (1 ms, 0.03%) +PlatformosCheck::Position#content_line_count (373) (1 ms, 0.03%) @@ -11801,7 +11801,7 @@ Array#each (2351) -ThemeCheck::StringHelpers#demodulize (1710) (3 ms, 0.08%) +PlatformosCheck::StringHelpers#demodulize (1710) (3 ms, 0.08%) @@ -11817,11 +11817,11 @@ -ThemeCheck::Node#source (1344) (1 ms, 0.03%) +PlatformosCheck::Node#source (1344) (1 ms, 0.03%) -ThemeCheck::Node#inside_liquid_tag? (8) (1 ms, 0.03%) +PlatformosCheck::Node#inside_liquid_tag? (8) (1 ms, 0.03%) @@ -11849,12 +11849,12 @@ -ThemeCheck::Visitor#visit (559) (242 ms, 6.44%) -ThemeCheck::V.. +PlatformosCheck::Visitor#visit (559) (242 ms, 6.44%) +PlatformosCheck::V.. -ThemeCheck::Visitor#call_checks (7054) (302 ms, 8.04%) -ThemeCheck::Visit.. +PlatformosCheck::Visitor#call_checks (7054) (302 ms, 8.04%) +PlatformosCheck::Visit.. Array#each_index (269) (1 ms, 0.03%) @@ -11877,11 +11877,11 @@ -ThemeCheck::Visitor#visit (1872) (1,220 ms, 32.47%) -ThemeCheck::Visitor#visit (1872) +PlatformosCheck::Visitor#visit (1872) (1,220 ms, 32.47%) +PlatformosCheck::Visitor#visit (1872) -ThemeCheck::Checks#call (518) (16 ms, 0.43%) +PlatformosCheck::Checks#call (518) (16 ms, 0.43%) @@ -11905,15 +11905,15 @@ -ThemeCheck::FileSystemStorage#file (51) (7 ms, 0.19%) +PlatformosCheck::FileSystemStorage#file (51) (7 ms, 0.19%) -ThemeCheck::LiquidTag#reset_consecutive_statements (621) (0 ms, 0.00%) +PlatformosCheck::LiquidTag#reset_consecutive_statements (621) (0 ms, 0.00%) -ThemeCheck::MissingTemplate#add_missing_offense (1) (0 ms, 0.00%) +PlatformosCheck::MissingTemplate#add_missing_offense (1) (0 ms, 0.00%) @@ -11933,7 +11933,7 @@ -ThemeCheck::ThemeFile#name (246) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (246) (1 ms, 0.03%) @@ -11945,7 +11945,7 @@ -ThemeCheck::Position#line_number (165) (1 ms, 0.03%) +PlatformosCheck::Position#line_number (165) (1 ms, 0.03%) @@ -11953,8 +11953,8 @@ -ThemeCheck::Visitor#visit (821) (412 ms, 10.96%) -ThemeCheck::Visitor#visi.. +PlatformosCheck::Visitor#visit (821) (412 ms, 10.96%) +PlatformosCheck::Visitor#visi.. Liquid::Lexer#tokenize (43) (1 ms, 0.03%) @@ -11977,11 +11977,11 @@ -ThemeCheck::Node#source (1693) (1 ms, 0.03%) +PlatformosCheck::Node#source (1693) (1 ms, 0.03%) -ThemeCheck::AssetUrlFilters#html_resource_drop? (313) (0 ms, 0.00%) +PlatformosCheck::AssetUrlFilters#html_resource_drop? (313) (0 ms, 0.00%) @@ -11993,7 +11993,7 @@ Array#each (1941) -ThemeCheck::Position#can_find_needle? (545) (3 ms, 0.08%) +PlatformosCheck::Position#can_find_needle? (545) (3 ms, 0.08%) @@ -12005,7 +12005,7 @@ -ThemeCheck::Node#line_number (115) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (115) (0 ms, 0.00%) @@ -12025,11 +12025,11 @@ -ThemeCheck::Node#line_number (70) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (70) (0 ms, 0.00%) -ThemeCheck::Node#literal? (1407) (1 ms, 0.03%) +PlatformosCheck::Node#literal? (1407) (1 ms, 0.03%) @@ -12045,15 +12045,15 @@ -ThemeCheck::UndefinedObject#on_variable_lookup (58) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#on_variable_lookup (58) (1 ms, 0.03%) -ThemeCheck::PositionHelper#from_row_column_to_index (115) (13 ms, 0.35%) +PlatformosCheck::PositionHelper#from_row_column_to_index (115) (13 ms, 0.35%) -ThemeCheck::ThemeFile#name (91) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (91) (0 ms, 0.00%) @@ -12101,11 +12101,11 @@ -ThemeCheck::Visitor#call_checks (1274) (36 ms, 0.96%) +PlatformosCheck::Visitor#call_checks (1274) (36 ms, 0.96%) -ThemeCheck::HtmlNode#replace_placeholders (172) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#replace_placeholders (172) (0 ms, 0.00%) @@ -12113,7 +12113,7 @@ -ThemeCheck::Node#position (240) (0 ms, 0.00%) +PlatformosCheck::Node#position (240) (0 ms, 0.00%) @@ -12129,7 +12129,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (91) (0 ms, 0.00%) +PlatformosCheck::SpaceInsideBraces#on_node (91) (0 ms, 0.00%) @@ -12157,7 +12157,7 @@ -ThemeCheck::HtmlVisitor#parse (91) (87 ms, 2.32%) +PlatformosCheck::HtmlVisitor#parse (91) (87 ms, 2.32%) The.. @@ -12173,19 +12173,19 @@ Li.. -ThemeCheck::LiquidTag#reset_consecutive_statements (386) (0 ms, 0.00%) +PlatformosCheck::LiquidTag#reset_consecutive_statements (386) (0 ms, 0.00%) -ThemeCheck::StringHelpers#underscore (1710) (9 ms, 0.24%) +PlatformosCheck::StringHelpers#underscore (1710) (9 ms, 0.24%) -ThemeCheck::Node#block? (1133) (2 ms, 0.05%) +PlatformosCheck::Node#block? (1133) (2 ms, 0.05%) -ThemeCheck::Position#start_index (780) (6 ms, 0.16%) +PlatformosCheck::Position#start_index (780) (6 ms, 0.16%) @@ -12205,11 +12205,11 @@ -ThemeCheck::Position#start_index (160) (1 ms, 0.03%) +PlatformosCheck::Position#start_index (160) (1 ms, 0.03%) -ThemeCheck::Checks#call_check_method (62112) (49 ms, 1.30%) +PlatformosCheck::Checks#call_check_method (62112) (49 ms, 1.30%) T.. @@ -12221,7 +12221,7 @@ -ThemeCheck::Node#markup (146) (0 ms, 0.00%) +PlatformosCheck::Node#markup (146) (0 ms, 0.00%) @@ -12229,7 +12229,7 @@ -ThemeCheck::Checks#call (3) (14 ms, 0.37%) +PlatformosCheck::Checks#call (3) (14 ms, 0.37%) @@ -12245,11 +12245,11 @@ -ThemeCheck::Checks#call_check_method (9296) (8 ms, 0.21%) +PlatformosCheck::Checks#call_check_method (9296) (8 ms, 0.21%) -ThemeCheck::TranslationKeyExists#on_variable (41) (0 ms, 0.00%) +PlatformosCheck::TranslationKeyExists#on_variable (41) (0 ms, 0.00%) @@ -12265,7 +12265,7 @@ -ThemeCheck::Checks#call (4172) (128 ms, 3.41%) +PlatformosCheck::Checks#call (4172) (128 ms, 3.41%) ThemeC.. @@ -12285,7 +12285,7 @@ -ThemeCheck::PositionHelper#from_row_column_to_index (52) (3 ms, 0.08%) +PlatformosCheck::PositionHelper#from_row_column_to_index (52) (3 ms, 0.08%) @@ -12293,7 +12293,7 @@ -ThemeCheck::UndefinedObject#on_for (27) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject#on_for (27) (0 ms, 0.00%) @@ -12305,7 +12305,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (1597) (10 ms, 0.27%) +PlatformosCheck::SpaceInsideBraces#on_node (1597) (10 ms, 0.27%) @@ -12341,7 +12341,7 @@ -ThemeCheck::MissingTemplate#on_include (11) (3 ms, 0.08%) +PlatformosCheck::MissingTemplate#on_include (11) (3 ms, 0.08%) @@ -12357,7 +12357,7 @@ -ThemeCheck::HtmlNode#attributes (128) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#attributes (128) (1 ms, 0.03%) @@ -12377,11 +12377,11 @@ -ThemeCheck::Checks#call (182) (2 ms, 0.05%) +PlatformosCheck::Checks#call (182) (2 ms, 0.05%) -ThemeCheck::Node#literal? (2351) (2 ms, 0.05%) +PlatformosCheck::Node#literal? (2351) (2 ms, 0.05%) @@ -12389,15 +12389,15 @@ -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (54) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (54) (1 ms, 0.03%) -ThemeCheck::TranslationKeyExists#key_exists? (88) (1 ms, 0.03%) +PlatformosCheck::TranslationKeyExists#key_exists? (88) (1 ms, 0.03%) -ThemeCheck::ParsingHelpers#outside_of_strings (230) (3 ms, 0.08%) +PlatformosCheck::ParsingHelpers#outside_of_strings (230) (3 ms, 0.08%) @@ -12405,11 +12405,11 @@ -ThemeCheck::ThemeFile#relative_path (940) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#relative_path (940) (0 ms, 0.00%) -ThemeCheck::TranslationKeyExists#on_variable (88) (0 ms, 0.00%) +PlatformosCheck::TranslationKeyExists#on_variable (88) (0 ms, 0.00%) @@ -12417,7 +12417,7 @@ -ThemeCheck::Node#literal? (508) (0 ms, 0.00%) +PlatformosCheck::Node#literal? (508) (0 ms, 0.00%) @@ -12425,7 +12425,7 @@ -ThemeCheck::Position#can_find_needle? (1073) (4 ms, 0.11%) +PlatformosCheck::Position#can_find_needle? (1073) (4 ms, 0.11%) @@ -12433,7 +12433,7 @@ -ThemeCheck::RemoteAsset#on_element (248) (1 ms, 0.03%) +PlatformosCheck::RemoteAsset#on_element (248) (1 ms, 0.03%) @@ -12457,7 +12457,7 @@ Arra.. -ThemeCheck::Node#start_index (180) (2 ms, 0.05%) +PlatformosCheck::Node#start_index (180) (2 ms, 0.05%) @@ -12465,7 +12465,7 @@ -ThemeCheck::HtmlNode#literal? (377) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#literal? (377) (0 ms, 0.00%) @@ -12521,15 +12521,15 @@ -ThemeCheck::Position#needle (70) (0 ms, 0.00%) +PlatformosCheck::Position#needle (70) (0 ms, 0.00%) -ThemeCheck::SpaceInsideBraces#on_variable (41) (0 ms, 0.00%) +PlatformosCheck::SpaceInsideBraces#on_variable (41) (0 ms, 0.00%) -ThemeCheck::Node#literal? (1581) (1 ms, 0.03%) +PlatformosCheck::Node#literal? (1581) (1 ms, 0.03%) @@ -12589,7 +12589,7 @@ -ThemeCheck::Node#start_index (780) (6 ms, 0.16%) +PlatformosCheck::Node#start_index (780) (6 ms, 0.16%) @@ -12601,7 +12601,7 @@ -ThemeCheck::Node#tag? (1474) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (1474) (1 ms, 0.03%) @@ -12621,7 +12621,7 @@ -ThemeCheck::HtmlNode#name (230) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#name (230) (0 ms, 0.00%) @@ -12629,7 +12629,7 @@ -ThemeCheck::Checks#call_check_method (72624) (74 ms, 1.97%) +PlatformosCheck::Checks#call_check_method (72624) (74 ms, 1.97%) Th.. @@ -12645,7 +12645,7 @@ -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (545) (0 ms, 0.00%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (545) (0 ms, 0.00%) @@ -12657,19 +12657,19 @@ -ThemeCheck::Node#markup (218) (0 ms, 0.00%) +PlatformosCheck::Node#markup (218) (0 ms, 0.00%) -ThemeCheck::ThemeFile#name (312) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (312) (1 ms, 0.03%) -ThemeCheck::UnusedAssign#on_variable_lookup (197) (1 ms, 0.03%) +PlatformosCheck::UnusedAssign#on_variable_lookup (197) (1 ms, 0.03%) -ThemeCheck::Node#inside_liquid_tag? (85) (16 ms, 0.43%) +PlatformosCheck::Node#inside_liquid_tag? (85) (16 ms, 0.43%) @@ -12689,7 +12689,7 @@ -ThemeCheck::Position#needle (250) (1 ms, 0.03%) +PlatformosCheck::Position#needle (250) (1 ms, 0.03%) @@ -12697,7 +12697,7 @@ -ThemeCheck::ThemeFile#name (197) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (197) (1 ms, 0.03%) @@ -12725,11 +12725,11 @@ -ThemeCheck::SpaceInsideBraces#on_variable (196) (2 ms, 0.05%) +PlatformosCheck::SpaceInsideBraces#on_variable (196) (2 ms, 0.05%) -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (329) (4 ms, 0.11%) +PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (329) (4 ms, 0.11%) @@ -12745,12 +12745,12 @@ -ThemeCheck::SpaceInsideBraces#on_node (1407) (8 ms, 0.21%) +PlatformosCheck::SpaceInsideBraces#on_node (1407) (8 ms, 0.21%) -ThemeCheck::Cli#profile (1) (3,758 ms, 100.01%) -ThemeCheck::Cli#profile (1) +PlatformosCheck::Cli#profile (1) (3,758 ms, 100.01%) +PlatformosCheck::Cli#profile (1) Psych::Nodes::Node#to_ruby (1) (2 ms, 0.05%) @@ -12773,11 +12773,11 @@ -ThemeCheck::DeprecatedFilter#on_variable (193) (0 ms, 0.00%) +PlatformosCheck::DeprecatedFilter#on_variable (193) (0 ms, 0.00%) -ThemeCheck::Checks#call (157) (1 ms, 0.03%) +PlatformosCheck::Checks#call (157) (1 ms, 0.03%) @@ -12785,7 +12785,7 @@ -ThemeCheck::ThemeFile#name (193) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (193) (1 ms, 0.03%) @@ -12797,15 +12797,15 @@ -ThemeCheck::HtmlNode#element? (281) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#element? (281) (0 ms, 0.00%) -ThemeCheck::Checks#call_check_method (131616) (249 ms, 6.63%) -ThemeCheck::Ch.. +PlatformosCheck::Checks#call_check_method (131616) (249 ms, 6.63%) +PlatformosCheck::Ch.. -ThemeCheck::DeprecatedGlobalAppBlockType#on_condition (121) (0 ms, 0.00%) +PlatformosCheck::DeprecatedGlobalAppBlockType#on_condition (121) (0 ms, 0.00%) @@ -12821,7 +12821,7 @@ -ThemeCheck::Checks#call_check_method (9807) (12 ms, 0.32%) +PlatformosCheck::Checks#call_check_method (9807) (12 ms, 0.32%) @@ -12841,11 +12841,11 @@ Liquid.. -ThemeCheck::ThemeFile#name (88) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (88) (0 ms, 0.00%) -ThemeCheck::Position#start_index (74) (1 ms, 0.03%) +PlatformosCheck::Position#start_index (74) (1 ms, 0.03%) @@ -12853,7 +12853,7 @@ -ThemeCheck::HtmlNode#replace_placeholders (172) (2 ms, 0.05%) +PlatformosCheck::HtmlNode#replace_placeholders (172) (2 ms, 0.05%) @@ -12865,11 +12865,11 @@ -ThemeCheck::Checks#call_check_method (198) (198 ms, 5.27%) -ThemeCheck.. +PlatformosCheck::Checks#call_check_method (198) (198 ms, 5.27%) +PlatformosCheck.. -ThemeCheck::UndefinedObject#on_variable_lookup (88) (2 ms, 0.05%) +PlatformosCheck::UndefinedObject#on_variable_lookup (88) (2 ms, 0.05%) @@ -12893,7 +12893,7 @@ -ThemeCheck::Node#type_name (1093) (7 ms, 0.19%) +PlatformosCheck::Node#type_name (1093) (7 ms, 0.19%) @@ -12913,7 +12913,7 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (61) (0 ms, 0.00%) +PlatformosCheck::UnusedAssign#on_variable_lookup (61) (0 ms, 0.00%) @@ -12921,7 +12921,7 @@ -ThemeCheck::Position#can_find_needle? (40) (0 ms, 0.00%) +PlatformosCheck::Position#can_find_needle? (40) (0 ms, 0.00%) @@ -12929,7 +12929,7 @@ -ThemeCheck::Visitor#visit (22) (6 ms, 0.16%) +PlatformosCheck::Visitor#visit (22) (6 ms, 0.16%) @@ -12953,7 +12953,7 @@ -ThemeCheck::Node#comment? (1407) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (1407) (1 ms, 0.03%) @@ -12977,7 +12977,7 @@ -ThemeCheck::MissingTemplate#on_include (22) (6 ms, 0.16%) +PlatformosCheck::MissingTemplate#on_include (22) (6 ms, 0.16%) @@ -13041,7 +13041,7 @@ -ThemeCheck::Checks#call_check_method (4396) (3 ms, 0.08%) +PlatformosCheck::Checks#call_check_method (4396) (3 ms, 0.08%) @@ -13049,11 +13049,11 @@ -ThemeCheck::Position#start_offset (452) (4 ms, 0.11%) +PlatformosCheck::Position#start_offset (452) (4 ms, 0.11%) -ThemeCheck::Node#line_number (85) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (85) (0 ms, 0.00%) @@ -13065,7 +13065,7 @@ -ThemeCheck::TranslationKeyExists#key_exists? (41) (0 ms, 0.00%) +PlatformosCheck::TranslationKeyExists#key_exists? (41) (0 ms, 0.00%) @@ -13073,7 +13073,7 @@ -ThemeCheck::RemoteAsset#on_element (193) (1 ms, 0.03%) +PlatformosCheck::RemoteAsset#on_element (193) (1 ms, 0.03%) @@ -13097,7 +13097,7 @@ -ThemeCheck::HtmlNode#initialize (638) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#initialize (638) (0 ms, 0.00%) @@ -13109,7 +13109,7 @@ -ThemeCheck::Node#tag? (2884) (2 ms, 0.05%) +PlatformosCheck::Node#tag? (2884) (2 ms, 0.05%) @@ -13117,7 +13117,7 @@ -ThemeCheck::Position#line_number (115) (1 ms, 0.03%) +PlatformosCheck::Position#line_number (115) (1 ms, 0.03%) @@ -13133,7 +13133,7 @@ -ThemeCheck::HtmlNode#replace_placeholders (564) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#replace_placeholders (564) (1 ms, 0.03%) @@ -13145,8 +13145,8 @@ -ThemeCheck::Visitor#visit (908) (503 ms, 13.39%) -ThemeCheck::Visitor#visit (908) +PlatformosCheck::Visitor#visit (908) (503 ms, 13.39%) +PlatformosCheck::Visitor#visit (908) Kernel#loop (187) (1 ms, 0.03%) @@ -13169,7 +13169,7 @@ -ThemeCheck::SpaceInsideBraces#on_variable (415) (6 ms, 0.16%) +PlatformosCheck::SpaceInsideBraces#on_variable (415) (6 ms, 0.16%) @@ -13177,7 +13177,7 @@ -ThemeCheck::Position#compute_start_offset (8) (1 ms, 0.03%) +PlatformosCheck::Position#compute_start_offset (8) (1 ms, 0.03%) @@ -13201,7 +13201,7 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (54) (0 ms, 0.00%) +PlatformosCheck::UnusedAssign#on_variable_lookup (54) (0 ms, 0.00%) @@ -13213,11 +13213,11 @@ -ThemeCheck::Position#needle (40) (0 ms, 0.00%) +PlatformosCheck::Position#needle (40) (0 ms, 0.00%) -ThemeCheck::Node#inside_liquid_tag? (8) (2 ms, 0.05%) +PlatformosCheck::Node#inside_liquid_tag? (8) (2 ms, 0.05%) @@ -13225,7 +13225,7 @@ -ThemeCheck::Checks#call_check_method (100128) (91 ms, 2.42%) +PlatformosCheck::Checks#call_check_method (100128) (91 ms, 2.42%) The.. @@ -13265,7 +13265,7 @@ -ThemeCheck::Node#initialize (543) (1 ms, 0.03%) +PlatformosCheck::Node#initialize (543) (1 ms, 0.03%) @@ -13289,15 +13289,15 @@ -ThemeCheck::ThemeFile#name (123) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (123) (1 ms, 0.03%) -ThemeCheck::Position#can_find_needle? (1896) (5 ms, 0.13%) +PlatformosCheck::Position#can_find_needle? (1896) (5 ms, 0.13%) -ThemeCheck::Node#initialize (1501) (2 ms, 0.05%) +PlatformosCheck::Node#initialize (1501) (2 ms, 0.05%) @@ -13305,7 +13305,7 @@ -ThemeCheck::LiquidTag#on_string (963) (3 ms, 0.08%) +PlatformosCheck::LiquidTag#on_string (963) (3 ms, 0.08%) @@ -13313,7 +13313,7 @@ -ThemeCheck::HtmlNode#attributes (118) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#attributes (118) (1 ms, 0.03%) @@ -13325,7 +13325,7 @@ -ThemeCheck::Position#contents (373) (0 ms, 0.00%) +PlatformosCheck::Position#contents (373) (0 ms, 0.00%) @@ -13349,8 +13349,8 @@ -<Class::ThemeCheck::Template>#parse (91) (330 ms, 8.78%) -<Class::ThemeCheck:.. +<Class::PlatformosCheck::Template>#parse (91) (330 ms, 8.78%) +<Class::PlatformosCheck:.. Liquid::Block#parse_body (6) (1 ms, 0.03%) @@ -13361,7 +13361,7 @@ -ThemeCheck::UndefinedObject#ignore? (82) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject#ignore? (82) (0 ms, 0.00%) @@ -13373,7 +13373,7 @@ -ThemeCheck::Node#block_body? (963) (0 ms, 0.00%) +PlatformosCheck::Node#block_body? (963) (0 ms, 0.00%) @@ -13381,7 +13381,7 @@ -ThemeCheck::Node#initialize (505) (1 ms, 0.03%) +PlatformosCheck::Node#initialize (505) (1 ms, 0.03%) @@ -13401,7 +13401,7 @@ -ThemeCheck::UndefinedObject#on_render (37) (0 ms, 0.00%) +PlatformosCheck::UndefinedObject#on_render (37) (0 ms, 0.00%) @@ -13421,7 +13421,7 @@ -ThemeCheck::ThemeFile#name (82) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (82) (0 ms, 0.00%) @@ -13429,7 +13429,7 @@ -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (486) (0 ms, 0.00%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (486) (0 ms, 0.00%) @@ -13449,7 +13449,7 @@ -ThemeCheck::HtmlNode#name (896) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#name (896) (1 ms, 0.03%) @@ -13461,15 +13461,15 @@ -ThemeCheck::Node#comment? (1581) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (1581) (1 ms, 0.03%) -ThemeCheck::HtmlVisitor#visit (638) (135 ms, 3.59%) +PlatformosCheck::HtmlVisitor#visit (638) (135 ms, 3.59%) ThemeC.. -ThemeCheck::UndefinedObject#on_variable_lookup (82) (2 ms, 0.05%) +PlatformosCheck::UndefinedObject#on_variable_lookup (82) (2 ms, 0.05%) @@ -13481,7 +13481,7 @@ -ThemeCheck::Node#line_number (66) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (66) (0 ms, 0.00%) @@ -13493,7 +13493,7 @@ -ThemeCheck::Node#comment? (1475) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (1475) (1 ms, 0.03%) @@ -13501,7 +13501,7 @@ -ThemeCheck::Visitor#call_checks (5248) (154 ms, 4.10%) +PlatformosCheck::Visitor#call_checks (5248) (154 ms, 4.10%) ThemeCh.. @@ -13521,7 +13521,7 @@ -ThemeCheck::HtmlVisitor#visit (377) (33 ms, 0.88%) +PlatformosCheck::HtmlVisitor#visit (377) (33 ms, 0.88%) @@ -13533,7 +13533,7 @@ -ThemeCheck::StringHelpers#demodulize (1204) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#demodulize (1204) (2 ms, 0.05%) @@ -13549,7 +13549,7 @@ -ThemeCheck::Node#comment? (1881) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (1881) (1 ms, 0.03%) @@ -13557,7 +13557,7 @@ -ThemeCheck::Position#start_index (773) (21 ms, 0.56%) +PlatformosCheck::Position#start_index (773) (21 ms, 0.56%) @@ -13565,11 +13565,11 @@ -ThemeCheck::Position#can_find_needle? (486) (3 ms, 0.08%) +PlatformosCheck::Position#can_find_needle? (486) (3 ms, 0.08%) -ThemeCheck::LiquidTag#on_string (529) (2 ms, 0.05%) +PlatformosCheck::LiquidTag#on_string (529) (2 ms, 0.05%) @@ -13581,7 +13581,7 @@ -ThemeCheck::Printer#print_offense (2) (0 ms, 0.00%) +PlatformosCheck::Printer#print_offense (2) (0 ms, 0.00%) @@ -13589,7 +13589,7 @@ -ThemeCheck::HtmlNode#literal? (734) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#literal? (734) (0 ms, 0.00%) @@ -13609,7 +13609,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (1581) (47 ms, 1.25%) +PlatformosCheck::SpaceInsideBraces#on_node (1581) (47 ms, 1.25%) T.. @@ -13621,7 +13621,7 @@ -ThemeCheck::Node#tag_markup (16) (1 ms, 0.03%) +PlatformosCheck::Node#tag_markup (16) (1 ms, 0.03%) @@ -13629,7 +13629,7 @@ -ThemeCheck::HtmlNode#children (212) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#children (212) (1 ms, 0.03%) @@ -13641,15 +13641,15 @@ -ThemeCheck::Theme#default_locale (31) (0 ms, 0.00%) +PlatformosCheck::Theme#default_locale (31) (0 ms, 0.00%) -ThemeCheck::HtmlNode#children (632) (4 ms, 0.11%) +PlatformosCheck::HtmlNode#children (632) (4 ms, 0.11%) -ThemeCheck::Node#tag_markup (11) (1 ms, 0.03%) +PlatformosCheck::Node#tag_markup (11) (1 ms, 0.03%) @@ -13657,7 +13657,7 @@ -ThemeCheck::ThemeFile#relative_path (342) (2 ms, 0.05%) +PlatformosCheck::ThemeFile#relative_path (342) (2 ms, 0.05%) @@ -13685,15 +13685,15 @@ -ThemeCheck::Checks#call (5872) (180 ms, 4.79%) +PlatformosCheck::Checks#call (5872) (180 ms, 4.79%) ThemeChec.. -ThemeCheck::Template#snippet? (91) (0 ms, 0.00%) +PlatformosCheck::Template#snippet? (91) (0 ms, 0.00%) -ThemeCheck::Position#compute_start_offset (70) (8 ms, 0.21%) +PlatformosCheck::Position#compute_start_offset (70) (8 ms, 0.21%) @@ -13705,7 +13705,7 @@ -ThemeCheck::HtmlNode#attributes (9) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#attributes (9) (0 ms, 0.00%) @@ -13733,7 +13733,7 @@ -ThemeCheck::Position#start_index (40) (1 ms, 0.03%) +PlatformosCheck::Position#start_index (40) (1 ms, 0.03%) @@ -13761,11 +13761,11 @@ -ThemeCheck::SpaceInsideBraces#on_variable (193) (1 ms, 0.03%) +PlatformosCheck::SpaceInsideBraces#on_variable (193) (1 ms, 0.03%) -ThemeCheck::MatchingSchemaTranslations#visit_object (62) (4 ms, 0.11%) +PlatformosCheck::MatchingSchemaTranslations#visit_object (62) (4 ms, 0.11%) @@ -13773,7 +13773,7 @@ -ThemeCheck::Node#inside_liquid_tag? (24) (1 ms, 0.03%) +PlatformosCheck::Node#inside_liquid_tag? (24) (1 ms, 0.03%) @@ -13781,7 +13781,7 @@ -ThemeCheck::Node#markup (609) (3 ms, 0.08%) +PlatformosCheck::Node#markup (609) (3 ms, 0.08%) @@ -13789,7 +13789,7 @@ -ThemeCheck::Tags::Paginate#initialize (4) (0 ms, 0.00%) +PlatformosCheck::Tags::Paginate#initialize (4) (0 ms, 0.00%) @@ -13801,7 +13801,7 @@ -ThemeCheck::Position#contents (411) (0 ms, 0.00%) +PlatformosCheck::Position#contents (411) (0 ms, 0.00%) @@ -13813,7 +13813,7 @@ -ThemeCheck::Checks#call (1460) (48 ms, 1.28%) +PlatformosCheck::Checks#call (1460) (48 ms, 1.28%) T.. @@ -13829,11 +13829,11 @@ -ThemeCheck::Checks#call_check_method (8736) (13 ms, 0.35%) +PlatformosCheck::Checks#call_check_method (8736) (13 ms, 0.35%) -ThemeCheck::LiquidTag#on_string (1415) (4 ms, 0.11%) +PlatformosCheck::LiquidTag#on_string (1415) (4 ms, 0.11%) @@ -13881,7 +13881,7 @@ -ThemeCheck::Node#inside_liquid_tag? (14) (2 ms, 0.05%) +PlatformosCheck::Node#inside_liquid_tag? (14) (2 ms, 0.05%) @@ -13893,11 +13893,11 @@ -ThemeCheck::Node#type_name (786) (4 ms, 0.11%) +PlatformosCheck::Node#type_name (786) (4 ms, 0.11%) -ThemeCheck::Position#contents (545) (0 ms, 0.00%) +PlatformosCheck::Position#contents (545) (0 ms, 0.00%) @@ -13905,7 +13905,7 @@ -ThemeCheck::MissingRequiredTemplateFiles#on_end (1) (1 ms, 0.03%) +PlatformosCheck::MissingRequiredTemplateFiles#on_end (1) (1 ms, 0.03%) @@ -13917,7 +13917,7 @@ -ThemeCheck::Node#initialize (1521) (2 ms, 0.05%) +PlatformosCheck::Node#initialize (1521) (2 ms, 0.05%) @@ -13937,7 +13937,7 @@ -ThemeCheck::Node#line_number (165) (1 ms, 0.03%) +PlatformosCheck::Node#line_number (165) (1 ms, 0.03%) @@ -13961,7 +13961,7 @@ -ThemeCheck::TranslationKeyExists#on_variable (27) (0 ms, 0.00%) +PlatformosCheck::TranslationKeyExists#on_variable (27) (0 ms, 0.00%) @@ -13973,7 +13973,7 @@ -ThemeCheck::Check#ignored? (5877) (2 ms, 0.05%) +PlatformosCheck::Check#ignored? (5877) (2 ms, 0.05%) @@ -13985,7 +13985,7 @@ -ThemeCheck::Checks#call_check_method (20784) (16 ms, 0.43%) +PlatformosCheck::Checks#call_check_method (20784) (16 ms, 0.43%) @@ -14001,7 +14001,7 @@ -ThemeCheck::Node#position (486) (1 ms, 0.03%) +PlatformosCheck::Node#position (486) (1 ms, 0.03%) @@ -14017,11 +14017,11 @@ -ThemeCheck::Node#markup (156) (0 ms, 0.00%) +PlatformosCheck::Node#markup (156) (0 ms, 0.00%) -ThemeCheck::PositionHelper#from_row_column_to_index (373) (23 ms, 0.61%) +PlatformosCheck::PositionHelper#from_row_column_to_index (373) (23 ms, 0.61%) @@ -14029,11 +14029,11 @@ -ThemeCheck::Node#type_name (2369) (7 ms, 0.19%) +PlatformosCheck::Node#type_name (2369) (7 ms, 0.19%) -ThemeCheck::Position#can_find_needle? (183) (1 ms, 0.03%) +PlatformosCheck::Position#can_find_needle? (183) (1 ms, 0.03%) @@ -14049,7 +14049,7 @@ -ThemeCheck::Node#tag? (609) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (609) (0 ms, 0.00%) @@ -14061,7 +14061,7 @@ -ThemeCheck::FileSystemStorage#read (91) (56 ms, 1.49%) +PlatformosCheck::FileSystemStorage#read (91) (56 ms, 1.49%) T.. @@ -14093,11 +14093,11 @@ -ThemeCheck::HtmlNode#children (632) (3 ms, 0.08%) +PlatformosCheck::HtmlNode#children (632) (3 ms, 0.08%) -ThemeCheck::Node#tag? (847) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (847) (0 ms, 0.00%) @@ -14109,7 +14109,7 @@ -ThemeCheck::Checks#call_check_method (35040) (37 ms, 0.98%) +PlatformosCheck::Checks#call_check_method (35040) (37 ms, 0.98%) @@ -14121,11 +14121,11 @@ -ThemeCheck::Node#tag? (532) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (532) (0 ms, 0.00%) -ThemeCheck::Position#start_index (95) (3 ms, 0.08%) +PlatformosCheck::Position#start_index (95) (3 ms, 0.08%) @@ -14133,7 +14133,7 @@ -ThemeCheck::MissingTemplate#on_include (37) (14 ms, 0.37%) +PlatformosCheck::MissingTemplate#on_include (37) (14 ms, 0.37%) @@ -14145,19 +14145,19 @@ -ThemeCheck::ThemeFile#name (91) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (91) (0 ms, 0.00%) -ThemeCheck::DeprecatedFilter#on_variable (196) (0 ms, 0.00%) +PlatformosCheck::DeprecatedFilter#on_variable (196) (0 ms, 0.00%) -ThemeCheck::Node#tag? (2055) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (2055) (1 ms, 0.03%) -ThemeCheck::Node#markup (623) (3 ms, 0.08%) +PlatformosCheck::Node#markup (623) (3 ms, 0.08%) @@ -14205,7 +14205,7 @@ -ThemeCheck::DeprecatedFilter#on_variable (193) (0 ms, 0.00%) +PlatformosCheck::DeprecatedFilter#on_variable (193) (0 ms, 0.00%) @@ -14221,7 +14221,7 @@ -ThemeCheck::UndefinedObject#on_variable_lookup (54) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#on_variable_lookup (54) (1 ms, 0.03%) @@ -14229,7 +14229,7 @@ -ThemeCheck::Node#block_tag? (529) (0 ms, 0.00%) +PlatformosCheck::Node#block_tag? (529) (0 ms, 0.00%) @@ -14237,11 +14237,11 @@ -ThemeCheck::ParsingHelpers#outside_of_strings (71) (1 ms, 0.03%) +PlatformosCheck::ParsingHelpers#outside_of_strings (71) (1 ms, 0.03%) -ThemeCheck::Position#needle (250) (1 ms, 0.03%) +PlatformosCheck::Position#needle (250) (1 ms, 0.03%) @@ -14249,15 +14249,15 @@ -ThemeCheck::Node#position (1090) (0 ms, 0.00%) +PlatformosCheck::Node#position (1090) (0 ms, 0.00%) -ThemeCheck::Node#start_index (183) (6 ms, 0.16%) +PlatformosCheck::Node#start_index (183) (6 ms, 0.16%) -ThemeCheck::Check#ignored? (5266) (2 ms, 0.05%) +PlatformosCheck::Check#ignored? (5266) (2 ms, 0.05%) @@ -14297,11 +14297,11 @@ -ThemeCheck::UndefinedObject#ignore? (197) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#ignore? (197) (1 ms, 0.03%) -ThemeCheck::Node#type_name (569) (5 ms, 0.13%) +PlatformosCheck::Node#type_name (569) (5 ms, 0.13%) @@ -14321,11 +14321,11 @@ -ThemeCheck::Node#document? (632) (0 ms, 0.00%) +PlatformosCheck::Node#document? (632) (0 ms, 0.00%) -ThemeCheck::SpaceInsideBraces#on_node (22) (0 ms, 0.00%) +PlatformosCheck::SpaceInsideBraces#on_node (22) (0 ms, 0.00%) @@ -14345,7 +14345,7 @@ -ThemeCheck::Node#source (330) (0 ms, 0.00%) +PlatformosCheck::Node#source (330) (0 ms, 0.00%) @@ -14361,7 +14361,7 @@ -ThemeCheck::Node#type_name (243) (2 ms, 0.05%) +PlatformosCheck::Node#type_name (243) (2 ms, 0.05%) @@ -14385,7 +14385,7 @@ -ThemeCheck::ValidHTMLTranslation#parse_and_add_offense (124) (6 ms, 0.16%) +PlatformosCheck::ValidHTMLTranslation#parse_and_add_offense (124) (6 ms, 0.16%) @@ -14417,7 +14417,7 @@ -ThemeCheck::Theme#[] (10) (3 ms, 0.08%) +PlatformosCheck::Theme#[] (10) (3 ms, 0.08%) @@ -14433,7 +14433,7 @@ -ThemeCheck::RequiredLayoutThemeObject#on_document (91) (0 ms, 0.00%) +PlatformosCheck::RequiredLayoutThemeObject#on_document (91) (0 ms, 0.00%) @@ -14461,7 +14461,7 @@ -ThemeCheck::Position#start_line_offset (115) (13 ms, 0.35%) +PlatformosCheck::Position#start_line_offset (115) (13 ms, 0.35%) @@ -14469,11 +14469,11 @@ -ThemeCheck::Visitor#call_checks (158) (5 ms, 0.13%) +PlatformosCheck::Visitor#call_checks (158) (5 ms, 0.13%) -ThemeCheck::Node#block? (202) (0 ms, 0.00%) +PlatformosCheck::Node#block? (202) (0 ms, 0.00%) @@ -14481,15 +14481,15 @@ -ThemeCheck::MissingTemplate#add_missing_offense (21) (6 ms, 0.16%) +PlatformosCheck::MissingTemplate#add_missing_offense (21) (6 ms, 0.16%) -ThemeCheck::ThemeFile#name (165) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (165) (1 ms, 0.03%) -ThemeCheck::Node#markup (2337) (27 ms, 0.72%) +PlatformosCheck::Node#markup (2337) (27 ms, 0.72%) @@ -14513,15 +14513,15 @@ -ThemeCheck::AssetUrlFilters#on_variable (193) (0 ms, 0.00%) +PlatformosCheck::AssetUrlFilters#on_variable (193) (0 ms, 0.00%) -ThemeCheck::Node#children (1515) (9 ms, 0.24%) +PlatformosCheck::Node#children (1515) (9 ms, 0.24%) -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (721) (0 ms, 0.00%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (721) (0 ms, 0.00%) @@ -14533,11 +14533,11 @@ -ThemeCheck::HtmlVisitor#visit (734) (93 ms, 2.47%) +PlatformosCheck::HtmlVisitor#visit (734) (93 ms, 2.47%) Them.. -ThemeCheck::PositionHelper#from_row_column_to_index (24) (1 ms, 0.03%) +PlatformosCheck::PositionHelper#from_row_column_to_index (24) (1 ms, 0.03%) @@ -14549,8 +14549,8 @@ -ThemeCheck::Checks#call (66) (198 ms, 5.27%) -ThemeCheck.. +PlatformosCheck::Checks#call (66) (198 ms, 5.27%) +PlatformosCheck.. Liquid::Block#parse_body (5) (2 ms, 0.05%) @@ -14561,15 +14561,15 @@ -ThemeCheck::Template#snippet? (197) (1 ms, 0.03%) +PlatformosCheck::Template#snippet? (197) (1 ms, 0.03%) -ThemeCheck::Node#line_number (336) (1 ms, 0.03%) +PlatformosCheck::Node#line_number (336) (1 ms, 0.03%) -ThemeCheck::TranslationKeyExists#on_variable (313) (4 ms, 0.11%) +PlatformosCheck::TranslationKeyExists#on_variable (313) (4 ms, 0.11%) @@ -14589,15 +14589,15 @@ -ThemeCheck::PositionHelper#from_row_column_to_index (165) (10 ms, 0.27%) +PlatformosCheck::PositionHelper#from_row_column_to_index (165) (10 ms, 0.27%) -ThemeCheck::SpaceInsideBraces#on_tag (38) (3 ms, 0.08%) +PlatformosCheck::SpaceInsideBraces#on_tag (38) (3 ms, 0.08%) -ThemeCheck::Node#start_index (1896) (35 ms, 0.93%) +PlatformosCheck::Node#start_index (1896) (35 ms, 0.93%) @@ -14609,7 +14609,7 @@ -ThemeCheck::DeprecatedFilter#on_variable (88) (0 ms, 0.00%) +PlatformosCheck::DeprecatedFilter#on_variable (88) (0 ms, 0.00%) @@ -14629,7 +14629,7 @@ -ThemeCheck::Node#tag? (623) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (623) (0 ms, 0.00%) @@ -14637,11 +14637,11 @@ -ThemeCheck::Node#children (908) (6 ms, 0.16%) +PlatformosCheck::Node#children (908) (6 ms, 0.16%) -ThemeCheck::Node#markup (2160) (11 ms, 0.29%) +PlatformosCheck::Node#markup (2160) (11 ms, 0.29%) @@ -14653,7 +14653,7 @@ -ThemeCheck::StringHelpers#demodulize (91) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#demodulize (91) (0 ms, 0.00%) @@ -14661,11 +14661,11 @@ -ThemeCheck::Node#comment? (501) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (501) (0 ms, 0.00%) -ThemeCheck::MissingTemplate#add_missing_offense (33) (14 ms, 0.37%) +PlatformosCheck::MissingTemplate#add_missing_offense (33) (14 ms, 0.37%) @@ -14681,7 +14681,7 @@ -ThemeCheck::ParsingHelpers#outside_of_strings (125) (2 ms, 0.05%) +PlatformosCheck::ParsingHelpers#outside_of_strings (125) (2 ms, 0.05%) @@ -14705,7 +14705,7 @@ -ThemeCheck::Checks#call_check_method (140928) (130 ms, 3.46%) +PlatformosCheck::Checks#call_check_method (140928) (130 ms, 3.46%) ThemeC.. @@ -14717,11 +14717,11 @@ -ThemeCheck::UnknownFilter#on_variable (101) (0 ms, 0.00%) +PlatformosCheck::UnknownFilter#on_variable (101) (0 ms, 0.00%) -ThemeCheck::Node#comment? (2351) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (2351) (1 ms, 0.03%) @@ -14737,7 +14737,7 @@ -ThemeCheck::ValidHTMLTranslation#visit_nested (9241) (35 ms, 0.93%) +PlatformosCheck::ValidHTMLTranslation#visit_nested (9241) (35 ms, 0.93%) @@ -14769,7 +14769,7 @@ -ThemeCheck::Node#tag? (1280) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (1280) (1 ms, 0.03%) @@ -14793,7 +14793,7 @@ -ThemeCheck::HtmlNode#children (266) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#children (266) (1 ms, 0.03%) @@ -14813,19 +14813,19 @@ -ThemeCheck::TranslationKeyExists#on_variable (75) (1 ms, 0.03%) +PlatformosCheck::TranslationKeyExists#on_variable (75) (1 ms, 0.03%) -ThemeCheck::ParsingHelpers#outside_of_strings (166) (4 ms, 0.11%) +PlatformosCheck::ParsingHelpers#outside_of_strings (166) (4 ms, 0.11%) -ThemeCheck::Position#needle (411) (3 ms, 0.08%) +PlatformosCheck::Position#needle (411) (3 ms, 0.08%) -ThemeCheck::Position#start_line_offset (39) (3 ms, 0.08%) +PlatformosCheck::Position#start_line_offset (39) (3 ms, 0.08%) @@ -14837,11 +14837,11 @@ -ThemeCheck::HtmlVisitor#visit (266) (16 ms, 0.43%) +PlatformosCheck::HtmlVisitor#visit (266) (16 ms, 0.43%) -ThemeCheck::Position#start_index (486) (13 ms, 0.35%) +PlatformosCheck::Position#start_index (486) (13 ms, 0.35%) @@ -14849,19 +14849,19 @@ -ThemeCheck::Position#contents (365) (0 ms, 0.00%) +PlatformosCheck::Position#contents (365) (0 ms, 0.00%) -ThemeCheck::Node#start_index (452) (8 ms, 0.21%) +PlatformosCheck::Node#start_index (452) (8 ms, 0.21%) -ThemeCheck::UnusedAssign#on_variable_lookup (375) (2 ms, 0.05%) +PlatformosCheck::UnusedAssign#on_variable_lookup (375) (2 ms, 0.05%) -ThemeCheck::Position#needle (183) (2 ms, 0.05%) +PlatformosCheck::Position#needle (183) (2 ms, 0.05%) @@ -14873,7 +14873,7 @@ -ThemeCheck::HtmlNode#initialize (632) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#initialize (632) (0 ms, 0.00%) @@ -14881,11 +14881,11 @@ -ThemeCheck::ValidHTMLTranslation#on_file (66) (190 ms, 5.06%) -ThemeCheck.. +PlatformosCheck::ValidHTMLTranslation#on_file (66) (190 ms, 5.06%) +PlatformosCheck.. -ThemeCheck::Node#inside_liquid_tag? (373) (53 ms, 1.41%) +PlatformosCheck::Node#inside_liquid_tag? (373) (53 ms, 1.41%) T.. @@ -14893,7 +14893,7 @@ -ThemeCheck::Node#type_name (129) (1 ms, 0.03%) +PlatformosCheck::Node#type_name (129) (1 ms, 0.03%) @@ -14901,15 +14901,15 @@ -ThemeCheck::SpaceInsideBraces#on_variable (90) (0 ms, 0.00%) +PlatformosCheck::SpaceInsideBraces#on_variable (90) (0 ms, 0.00%) -ThemeCheck::SpaceInsideBraces#on_node (190) (2 ms, 0.05%) +PlatformosCheck::SpaceInsideBraces#on_node (190) (2 ms, 0.05%) -ThemeCheck::HtmlNode#name (414) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#name (414) (0 ms, 0.00%) @@ -14925,11 +14925,11 @@ -ThemeCheck::StringHelpers#demodulize (1500) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#demodulize (1500) (2 ms, 0.05%) -ThemeCheck::Node#markup (1134) (2 ms, 0.05%) +PlatformosCheck::Node#markup (1134) (2 ms, 0.05%) @@ -14941,7 +14941,7 @@ -ThemeCheck::ShopifyLiquid::DeprecatedFilter#alternatives (254) (0 ms, 0.00%) +PlatformosCheck::ShopifyLiquid::DeprecatedFilter#alternatives (254) (0 ms, 0.00%) @@ -14965,7 +14965,7 @@ -ThemeCheck::DeprecatedGlobalAppBlockType#on_schema (31) (1 ms, 0.03%) +PlatformosCheck::DeprecatedGlobalAppBlockType#on_schema (31) (1 ms, 0.03%) @@ -14977,7 +14977,7 @@ -ThemeCheck::Checks#call (4318) (178 ms, 4.74%) +PlatformosCheck::Checks#call (4318) (178 ms, 4.74%) ThemeChec.. @@ -14985,7 +14985,7 @@ -ThemeCheck::Position#compute_start_offset (256) (17 ms, 0.45%) +PlatformosCheck::Position#compute_start_offset (256) (17 ms, 0.45%) @@ -14997,19 +14997,19 @@ -ThemeCheck::ThemeFile#name (92) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (92) (0 ms, 0.00%) -ThemeCheck::Node#markup (336) (1 ms, 0.03%) +PlatformosCheck::Node#markup (336) (1 ms, 0.03%) -ThemeCheck::TranslationKeyExists#on_variable (193) (2 ms, 0.05%) +PlatformosCheck::TranslationKeyExists#on_variable (193) (2 ms, 0.05%) -ThemeCheck::Node#line_number (271) (1 ms, 0.03%) +PlatformosCheck::Node#line_number (271) (1 ms, 0.03%) @@ -15021,7 +15021,7 @@ -ThemeCheck::Node#comment? (505) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (505) (0 ms, 0.00%) @@ -15037,19 +15037,19 @@ Array#.. -ThemeCheck::Checks#call_check_method (7680) (5 ms, 0.13%) +PlatformosCheck::Checks#call_check_method (7680) (5 ms, 0.13%) -ThemeCheck::Position#compute_start_offset (14) (1 ms, 0.03%) +PlatformosCheck::Position#compute_start_offset (14) (1 ms, 0.03%) -ThemeCheck::Node#tag_markup (74) (4 ms, 0.11%) +PlatformosCheck::Node#tag_markup (74) (4 ms, 0.11%) -ThemeCheck::PositionHelper#from_row_column_to_index (50) (2 ms, 0.05%) +PlatformosCheck::PositionHelper#from_row_column_to_index (50) (2 ms, 0.05%) @@ -15065,7 +15065,7 @@ -ThemeCheck::MissingTemplate#add_missing_offense (17) (9 ms, 0.24%) +PlatformosCheck::MissingTemplate#add_missing_offense (17) (9 ms, 0.24%) @@ -15077,7 +15077,7 @@ -ThemeCheck::ThemeFile#name (3014) (13 ms, 0.35%) +PlatformosCheck::ThemeFile#name (3014) (13 ms, 0.35%) @@ -15089,11 +15089,11 @@ -ThemeCheck::Node#tag? (624) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (624) (0 ms, 0.00%) -ThemeCheck::Node#tag_markup (476) (25 ms, 0.67%) +PlatformosCheck::Node#tag_markup (476) (25 ms, 0.67%) @@ -15105,11 +15105,11 @@ -ThemeCheck::StringHelpers#demodulize (231) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#demodulize (231) (0 ms, 0.00%) -ThemeCheck::Checks#call_check_method (12432) (12 ms, 0.32%) +PlatformosCheck::Checks#call_check_method (12432) (12 ms, 0.32%) @@ -15129,7 +15129,7 @@ -ThemeCheck::Position#start_index (1896) (31 ms, 0.82%) +PlatformosCheck::Position#start_index (1896) (31 ms, 0.82%) @@ -15145,7 +15145,7 @@ -ThemeCheck::Visitor#call_checks (5872) (183 ms, 4.87%) +PlatformosCheck::Visitor#call_checks (5872) (183 ms, 4.87%) ThemeChec.. @@ -15153,15 +15153,15 @@ -ThemeCheck::HtmlNode#element? (352) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#element? (352) (0 ms, 0.00%) -ThemeCheck::ValidJson#on_file (66) (7 ms, 0.19%) +PlatformosCheck::ValidJson#on_file (66) (7 ms, 0.19%) -ThemeCheck::MissingTemplate#add_missing_offense (3) (1 ms, 0.03%) +PlatformosCheck::MissingTemplate#add_missing_offense (3) (1 ms, 0.03%) @@ -15169,7 +15169,7 @@ -ThemeCheck::Checks#call (524) (4 ms, 0.11%) +PlatformosCheck::Checks#call (524) (4 ms, 0.11%) @@ -15177,7 +15177,7 @@ -ThemeCheck::Position#start_offset (1090) (0 ms, 0.00%) +PlatformosCheck::Position#start_offset (1090) (0 ms, 0.00%) @@ -15193,11 +15193,11 @@ -ThemeCheck::Visitor#visit (456) (117 ms, 3.11%) +PlatformosCheck::Visitor#visit (456) (117 ms, 3.11%) Theme.. -ThemeCheck::JsonFile#content (204) (0 ms, 0.00%) +PlatformosCheck::JsonFile#content (204) (0 ms, 0.00%) @@ -15205,7 +15205,7 @@ -ThemeCheck::MissingTemplate#add_missing_offense (22) (6 ms, 0.16%) +PlatformosCheck::MissingTemplate#add_missing_offense (22) (6 ms, 0.16%) @@ -15217,7 +15217,7 @@ -ThemeCheck::ThemeFile#name (176) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (176) (1 ms, 0.03%) @@ -15237,7 +15237,7 @@ -ThemeCheck::Position#start_line_offset (6) (1 ms, 0.03%) +PlatformosCheck::Position#start_line_offset (6) (1 ms, 0.03%) @@ -15245,11 +15245,11 @@ -ThemeCheck::Node#markup (131) (0 ms, 0.00%) +PlatformosCheck::Node#markup (131) (0 ms, 0.00%) -ThemeCheck::UnusedAssign#on_assign (6) (2 ms, 0.05%) +PlatformosCheck::UnusedAssign#on_assign (6) (2 ms, 0.05%) @@ -15257,7 +15257,7 @@ -ThemeCheck::HtmlVisitor#call_checks (1364) (12 ms, 0.32%) +PlatformosCheck::HtmlVisitor#call_checks (1364) (12 ms, 0.32%) @@ -15289,11 +15289,11 @@ -ThemeCheck::HtmlNode#name (880) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#name (880) (1 ms, 0.03%) -ThemeCheck::Position#start_offset (240) (2 ms, 0.05%) +PlatformosCheck::Position#start_offset (240) (2 ms, 0.05%) @@ -15345,7 +15345,7 @@ -ThemeCheck::DeprecateBgsizes#on_div (59) (1 ms, 0.03%) +PlatformosCheck::DeprecateBgsizes#on_div (59) (1 ms, 0.03%) @@ -15365,7 +15365,7 @@ -ThemeCheck::Node#initialize (222) (0 ms, 0.00%) +PlatformosCheck::Node#initialize (222) (0 ms, 0.00%) @@ -15373,7 +15373,7 @@ -ThemeCheck::Node#initialize (1581) (2 ms, 0.05%) +PlatformosCheck::Node#initialize (1581) (2 ms, 0.05%) @@ -15381,7 +15381,7 @@ -ThemeCheck::DeprecateBgsizes#on_div (64) (1 ms, 0.03%) +PlatformosCheck::DeprecateBgsizes#on_div (64) (1 ms, 0.03%) @@ -15389,15 +15389,15 @@ -ThemeCheck::Position#start_index (25) (0 ms, 0.00%) +PlatformosCheck::Position#start_index (25) (0 ms, 0.00%) -ThemeCheck::UndefinedObject#on_variable_lookup (342) (6 ms, 0.16%) +PlatformosCheck::UndefinedObject#on_variable_lookup (342) (6 ms, 0.16%) -ThemeCheck::Node#literal? (908) (1 ms, 0.03%) +PlatformosCheck::Node#literal? (908) (1 ms, 0.03%) @@ -15409,7 +15409,7 @@ -ThemeCheck::ThemeFile#source (14) (7 ms, 0.19%) +PlatformosCheck::ThemeFile#source (14) (7 ms, 0.19%) @@ -15429,7 +15429,7 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (110) (1 ms, 0.03%) +PlatformosCheck::UnusedAssign#on_variable_lookup (110) (1 ms, 0.03%) @@ -15449,11 +15449,11 @@ -ThemeCheck::Position#contents (1680) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1680) (1 ms, 0.03%) -ThemeCheck::HtmlVisitor#call_checks (157) (1 ms, 0.03%) +PlatformosCheck::HtmlVisitor#call_checks (157) (1 ms, 0.03%) @@ -15465,11 +15465,11 @@ -ThemeCheck::Template#snippet? (123) (0 ms, 0.00%) +PlatformosCheck::Template#snippet? (123) (0 ms, 0.00%) -ThemeCheck::LiquidTag#on_string (542) (2 ms, 0.05%) +PlatformosCheck::LiquidTag#on_string (542) (2 ms, 0.05%) @@ -15481,7 +15481,7 @@ -ThemeCheck::Node#block_tag? (593) (0 ms, 0.00%) +PlatformosCheck::Node#block_tag? (593) (0 ms, 0.00%) @@ -15497,7 +15497,7 @@ -ThemeCheck::DisabledChecks#update (13) (0 ms, 0.00%) +PlatformosCheck::DisabledChecks#update (13) (0 ms, 0.00%) @@ -15505,19 +15505,19 @@ -ThemeCheck::ParsingHelpers#outside_of_strings (21) (1 ms, 0.03%) +PlatformosCheck::ParsingHelpers#outside_of_strings (21) (1 ms, 0.03%) -ThemeCheck::UnusedAssign#on_assign (36) (0 ms, 0.00%) +PlatformosCheck::UnusedAssign#on_assign (36) (0 ms, 0.00%) -ThemeCheck::SpaceInsideBraces#on_tag (85) (5 ms, 0.13%) +PlatformosCheck::SpaceInsideBraces#on_tag (85) (5 ms, 0.13%) -ThemeCheck::TranslationKeyExists#on_variable (90) (1 ms, 0.03%) +PlatformosCheck::TranslationKeyExists#on_variable (90) (1 ms, 0.03%) @@ -15553,7 +15553,7 @@ -ThemeCheck::Theme#[] (3) (1 ms, 0.03%) +PlatformosCheck::Theme#[] (3) (1 ms, 0.03%) @@ -15561,7 +15561,7 @@ -ThemeCheck::Position#can_find_needle? (160) (1 ms, 0.03%) +PlatformosCheck::Position#can_find_needle? (160) (1 ms, 0.03%) @@ -15569,15 +15569,15 @@ -ThemeCheck::Node#tag? (1721) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (1721) (1 ms, 0.03%) -ThemeCheck::Node#inside_liquid_tag? (373) (18 ms, 0.48%) +PlatformosCheck::Node#inside_liquid_tag? (373) (18 ms, 0.48%) -ThemeCheck::Node#markup (2884) (30 ms, 0.80%) +PlatformosCheck::Node#markup (2884) (30 ms, 0.80%) @@ -15605,12 +15605,12 @@ -ThemeCheck::Node#type_name (52) (0 ms, 0.00%) +PlatformosCheck::Node#type_name (52) (0 ms, 0.00%) -ThemeCheck::Visitor#call_checks (6876) (259 ms, 6.89%) -ThemeCheck::Vi.. +PlatformosCheck::Visitor#call_checks (6876) (259 ms, 6.89%) +PlatformosCheck::Vi.. Nokogiri::XML::Node#children (553) (1 ms, 0.03%) @@ -15669,7 +15669,7 @@ -ThemeCheck::Check#ignored? (1841) (1 ms, 0.03%) +PlatformosCheck::Check#ignored? (1841) (1 ms, 0.03%) @@ -15685,7 +15685,7 @@ -ThemeCheck::StringHelpers#demodulize (473) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#demodulize (473) (1 ms, 0.03%) @@ -15717,11 +15717,11 @@ -ThemeCheck::Node#type_name (160) (1 ms, 0.03%) +PlatformosCheck::Node#type_name (160) (1 ms, 0.03%) -ThemeCheck::Node#line_number (373) (2 ms, 0.05%) +PlatformosCheck::Node#line_number (373) (2 ms, 0.05%) @@ -15745,7 +15745,7 @@ -ThemeCheck::HtmlNode#replace_placeholders (80) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#replace_placeholders (80) (1 ms, 0.03%) @@ -15757,19 +15757,19 @@ Array#each (1743) -ThemeCheck::TranslationKeyExists#key_exists? (40) (0 ms, 0.00%) +PlatformosCheck::TranslationKeyExists#key_exists? (40) (0 ms, 0.00%) -ThemeCheck::Position#start_line_offset (38) (4 ms, 0.11%) +PlatformosCheck::Position#start_line_offset (38) (4 ms, 0.11%) -ThemeCheck::Position#contents (780) (0 ms, 0.00%) +PlatformosCheck::Position#contents (780) (0 ms, 0.00%) -ThemeCheck::Node#children (190) (1 ms, 0.03%) +PlatformosCheck::Node#children (190) (1 ms, 0.03%) @@ -15825,7 +15825,7 @@ -ThemeCheck::HtmlNode#name (248) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#name (248) (0 ms, 0.00%) @@ -15833,7 +15833,7 @@ -ThemeCheck::HtmlVisitor#visit (632) (69 ms, 1.84%) +PlatformosCheck::HtmlVisitor#visit (632) (69 ms, 1.84%) Th.. @@ -15845,7 +15845,7 @@ -ThemeCheck::HtmlVisitor#visit (307) (24 ms, 0.64%) +PlatformosCheck::HtmlVisitor#visit (307) (24 ms, 0.64%) @@ -15861,7 +15861,7 @@ -ThemeCheck::HtmlNode#element? (486) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#element? (486) (0 ms, 0.00%) @@ -15881,7 +15881,7 @@ -ThemeCheck::StringHelpers#underscore (1782) (9 ms, 0.24%) +PlatformosCheck::StringHelpers#underscore (1782) (9 ms, 0.24%) @@ -15897,7 +15897,7 @@ -ThemeCheck::ParserBlockingScriptTag#on_variable (209) (0 ms, 0.00%) +PlatformosCheck::ParserBlockingScriptTag#on_variable (209) (0 ms, 0.00%) @@ -15913,11 +15913,11 @@ -ThemeCheck::Position#contents (411) (0 ms, 0.00%) +PlatformosCheck::Position#contents (411) (0 ms, 0.00%) -ThemeCheck::HtmlNode#replace_placeholders (162) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#replace_placeholders (162) (0 ms, 0.00%) @@ -15941,7 +15941,7 @@ -ThemeCheck::DeprecatedFilter#on_variable (101) (0 ms, 0.00%) +PlatformosCheck::DeprecatedFilter#on_variable (101) (0 ms, 0.00%) @@ -15949,7 +15949,7 @@ -ThemeCheck::TranslationKeyExists#key_exists? (48) (0 ms, 0.00%) +PlatformosCheck::TranslationKeyExists#key_exists? (48) (0 ms, 0.00%) @@ -15973,11 +15973,11 @@ -ThemeCheck::Node#block_tag? (963) (1 ms, 0.03%) +PlatformosCheck::Node#block_tag? (963) (1 ms, 0.03%) -ThemeCheck::Node#children (821) (5 ms, 0.13%) +PlatformosCheck::Node#children (821) (5 ms, 0.13%) @@ -15985,11 +15985,11 @@ -ThemeCheck::Position#start_index (2267) (42 ms, 1.12%) +PlatformosCheck::Position#start_index (2267) (42 ms, 1.12%) -ThemeCheck::Visitor#visit (13) (1 ms, 0.03%) +PlatformosCheck::Visitor#visit (13) (1 ms, 0.03%) @@ -16001,11 +16001,11 @@ -ThemeCheck::Position#can_find_needle? (330) (2 ms, 0.05%) +PlatformosCheck::Position#can_find_needle? (330) (2 ms, 0.05%) -ThemeCheck::Node#comment? (1941) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (1941) (1 ms, 0.03%) @@ -16013,19 +16013,19 @@ -ThemeCheck::Position#line_number (52) (0 ms, 0.00%) +PlatformosCheck::Position#line_number (52) (0 ms, 0.00%) -ThemeCheck::Node#type_name (3271) (15 ms, 0.40%) +PlatformosCheck::Node#type_name (3271) (15 ms, 0.40%) -ThemeCheck::Tags::Render#initialize (7) (0 ms, 0.00%) +PlatformosCheck::Tags::Render#initialize (7) (0 ms, 0.00%) -ThemeCheck::Node#block? (318) (1 ms, 0.03%) +PlatformosCheck::Node#block? (318) (1 ms, 0.03%) @@ -16033,7 +16033,7 @@ -ThemeCheck::HtmlVisitor#call_checks (1553) (15 ms, 0.40%) +PlatformosCheck::HtmlVisitor#call_checks (1553) (15 ms, 0.40%) @@ -16041,7 +16041,7 @@ -ThemeCheck::Position#needle (238) (2 ms, 0.05%) +PlatformosCheck::Position#needle (238) (2 ms, 0.05%) @@ -16049,7 +16049,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (1872) (19 ms, 0.51%) +PlatformosCheck::SpaceInsideBraces#on_node (1872) (19 ms, 0.51%) @@ -16065,8 +16065,8 @@ -ThemeCheck::Visitor#visit (1941) (1,754 ms, 46.68%) -ThemeCheck::Visitor#visit (1941) +PlatformosCheck::Visitor#visit (1941) (1,754 ms, 46.68%) +PlatformosCheck::Visitor#visit (1941) Liquid::For#initialize (4) (0 ms, 0.00%) @@ -16081,7 +16081,7 @@ -ThemeCheck::Node#start_index (238) (7 ms, 0.19%) +PlatformosCheck::Node#start_index (238) (7 ms, 0.19%) @@ -16113,7 +16113,7 @@ -ThemeCheck::SpaceInsideBraces#on_variable (101) (1 ms, 0.03%) +PlatformosCheck::SpaceInsideBraces#on_variable (101) (1 ms, 0.03%) @@ -16149,15 +16149,15 @@ -ThemeCheck::Visitor#visit (2286) (1,528 ms, 40.66%) -ThemeCheck::Visitor#visit (2286) +PlatformosCheck::Visitor#visit (2286) (1,528 ms, 40.66%) +PlatformosCheck::Visitor#visit (2286) -ThemeCheck::HtmlNode#replace_placeholders (78) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#replace_placeholders (78) (0 ms, 0.00%) -ThemeCheck::Node#markup (1478) (6 ms, 0.16%) +PlatformosCheck::Node#markup (1478) (6 ms, 0.16%) @@ -16189,7 +16189,7 @@ -ThemeCheck::LiquidTag#on_tag (19) (4 ms, 0.11%) +PlatformosCheck::LiquidTag#on_tag (19) (4 ms, 0.11%) @@ -16197,7 +16197,7 @@ -ThemeCheck::ThemeFile#name (91) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (91) (0 ms, 0.00%) @@ -16205,7 +16205,7 @@ -ThemeCheck::JsonFile#parse_error (66) (7 ms, 0.19%) +PlatformosCheck::JsonFile#parse_error (66) (7 ms, 0.19%) @@ -16213,7 +16213,7 @@ -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (1073) (1 ms, 0.03%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (1073) (1 ms, 0.03%) @@ -16229,11 +16229,11 @@ -ThemeCheck::ValidHTMLTranslation#visit_nested (3279) (9 ms, 0.24%) +PlatformosCheck::ValidHTMLTranslation#visit_nested (3279) (9 ms, 0.24%) -ThemeCheck::Check#ignored? (2671) (1 ms, 0.03%) +PlatformosCheck::Check#ignored? (2671) (1 ms, 0.03%) @@ -16245,7 +16245,7 @@ -ThemeCheck::Position#can_find_needle? (238) (1 ms, 0.03%) +PlatformosCheck::Position#can_find_needle? (238) (1 ms, 0.03%) @@ -16257,11 +16257,11 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (312) (2 ms, 0.05%) +PlatformosCheck::UnusedAssign#on_variable_lookup (312) (2 ms, 0.05%) -ThemeCheck::Node#tag? (673) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (673) (0 ms, 0.00%) @@ -16269,7 +16269,7 @@ -ThemeCheck::Checks#call (1610) (53 ms, 1.41%) +PlatformosCheck::Checks#call (1610) (53 ms, 1.41%) T.. @@ -16277,15 +16277,15 @@ -ThemeCheck::Checks#call_check_method (169296) (239 ms, 6.36%) -ThemeCheck::C.. +PlatformosCheck::Checks#call_check_method (169296) (239 ms, 6.36%) +PlatformosCheck::C.. Regexp#match (255) (0 ms, 0.00%) -ThemeCheck::Node#type_name (41) (0 ms, 0.00%) +PlatformosCheck::Node#type_name (41) (0 ms, 0.00%) @@ -16301,7 +16301,7 @@ -ThemeCheck::ParserBlockingScriptTag#on_variable (313) (0 ms, 0.00%) +PlatformosCheck::ParserBlockingScriptTag#on_variable (313) (0 ms, 0.00%) @@ -16321,7 +16321,7 @@ -ThemeCheck::UndefinedObject#on_document (91) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#on_document (91) (1 ms, 0.03%) @@ -16329,15 +16329,15 @@ -ThemeCheck::Node#markup (956) (3 ms, 0.08%) +PlatformosCheck::Node#markup (956) (3 ms, 0.08%) -ThemeCheck::Node#start_index (25) (0 ms, 0.00%) +PlatformosCheck::Node#start_index (25) (0 ms, 0.00%) -ThemeCheck::SpaceInsideBraces#on_node (456) (3 ms, 0.08%) +PlatformosCheck::SpaceInsideBraces#on_node (456) (3 ms, 0.08%) @@ -16345,7 +16345,7 @@ -ThemeCheck::UndefinedObject#check_object (48) (6 ms, 0.16%) +PlatformosCheck::UndefinedObject#check_object (48) (6 ms, 0.16%) @@ -16357,7 +16357,7 @@ -ThemeCheck::Theme#[] (5) (2 ms, 0.05%) +PlatformosCheck::Theme#[] (5) (2 ms, 0.05%) @@ -16365,7 +16365,7 @@ -ThemeCheck::JsonFile#content (313) (1 ms, 0.03%) +PlatformosCheck::JsonFile#content (313) (1 ms, 0.03%) @@ -16381,11 +16381,11 @@ -ThemeCheck::Checks#call_check_method (1274) (1 ms, 0.03%) +PlatformosCheck::Checks#call_check_method (1274) (1 ms, 0.03%) -ThemeCheck::NestedSnippet::TemplateInfo#with_deep_nested (189) (1 ms, 0.03%) +PlatformosCheck::NestedSnippet::TemplateInfo#with_deep_nested (189) (1 ms, 0.03%) @@ -16393,11 +16393,11 @@ -ThemeCheck::Visitor#call_checks (26) (1 ms, 0.03%) +PlatformosCheck::Visitor#call_checks (26) (1 ms, 0.03%) -ThemeCheck::Template#snippet? (209) (1 ms, 0.03%) +PlatformosCheck::Template#snippet? (209) (1 ms, 0.03%) @@ -16409,7 +16409,7 @@ -ThemeCheck::Node#tag_markup (44) (2 ms, 0.05%) +PlatformosCheck::Node#tag_markup (44) (2 ms, 0.05%) @@ -16429,15 +16429,15 @@ -ThemeCheck::Position#contents (780) (0 ms, 0.00%) +PlatformosCheck::Position#contents (780) (0 ms, 0.00%) -ThemeCheck::Node#line_number (182) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (182) (0 ms, 0.00%) -ThemeCheck::TranslationKeyExists#on_variable (196) (1 ms, 0.03%) +PlatformosCheck::TranslationKeyExists#on_variable (196) (1 ms, 0.03%) @@ -16449,7 +16449,7 @@ -ThemeCheck::Position#start_index (183) (5 ms, 0.13%) +PlatformosCheck::Position#start_index (183) (5 ms, 0.13%) @@ -16465,7 +16465,7 @@ -ThemeCheck::ThemeFile#name (1940) (5 ms, 0.13%) +PlatformosCheck::ThemeFile#name (1940) (5 ms, 0.13%) @@ -16493,11 +16493,11 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (165) (1 ms, 0.03%) +PlatformosCheck::UnusedAssign#on_variable_lookup (165) (1 ms, 0.03%) -ThemeCheck::Node#block_tag? (793) (1 ms, 0.03%) +PlatformosCheck::Node#block_tag? (793) (1 ms, 0.03%) @@ -16513,7 +16513,7 @@ -ThemeCheck::Position#needle (220) (1 ms, 0.03%) +PlatformosCheck::Position#needle (220) (1 ms, 0.03%) @@ -16529,7 +16529,7 @@ -ThemeCheck::Position#contents (1896) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1896) (1 ms, 0.03%) @@ -16545,11 +16545,11 @@ -ThemeCheck::Node#markup (256) (0 ms, 0.00%) +PlatformosCheck::Node#markup (256) (0 ms, 0.00%) -ThemeCheck::Node#comment? (908) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (908) (0 ms, 0.00%) @@ -16557,7 +16557,7 @@ -ThemeCheck::Node#document? (793) (0 ms, 0.00%) +PlatformosCheck::Node#document? (793) (0 ms, 0.00%) @@ -16569,11 +16569,11 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (123) (1 ms, 0.03%) +PlatformosCheck::UnusedAssign#on_variable_lookup (123) (1 ms, 0.03%) -ThemeCheck::HtmlNode#element? (182) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#element? (182) (0 ms, 0.00%) @@ -16585,11 +16585,11 @@ -ThemeCheck::SpaceInsideBraces#on_node (559) (4 ms, 0.11%) +PlatformosCheck::SpaceInsideBraces#on_node (559) (4 ms, 0.11%) -ThemeCheck::StringHelpers#demodulize (569) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#demodulize (569) (1 ms, 0.03%) @@ -16597,7 +16597,7 @@ -ThemeCheck::Position#start_line_offset (24) (2 ms, 0.05%) +PlatformosCheck::Position#start_line_offset (24) (2 ms, 0.05%) @@ -16617,7 +16617,7 @@ -ThemeCheck::Checks#call (1376) (13 ms, 0.35%) +PlatformosCheck::Checks#call (1376) (13 ms, 0.35%) @@ -16625,11 +16625,11 @@ -ThemeCheck::Checks#call_check_method (125952) (108 ms, 2.87%) +PlatformosCheck::Checks#call_check_method (125952) (108 ms, 2.87%) Theme.. -ThemeCheck::Node#tag? (336) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (336) (0 ms, 0.00%) @@ -16645,15 +16645,15 @@ -ThemeCheck::Node#markup (1721) (7 ms, 0.19%) +PlatformosCheck::Node#markup (1721) (7 ms, 0.19%) -ThemeCheck::UndefinedObject#each_template (1) (6 ms, 0.16%) +PlatformosCheck::UndefinedObject#each_template (1) (6 ms, 0.16%) -ThemeCheck::HtmlNode#name (861) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#name (861) (1 ms, 0.03%) @@ -16669,15 +16669,15 @@ -ThemeCheck::Analyzer#analyze_theme (1) (3,716 ms, 98.89%) -ThemeCheck::Analyzer#analyze_theme (1) +PlatformosCheck::Analyzer#analyze_theme (1) (3,716 ms, 98.89%) +PlatformosCheck::Analyzer#analyze_theme (1) Kernel#respond_to? (9548) (1 ms, 0.03%) -ThemeCheck::SpaceInsideBraces#on_node (1941) (14 ms, 0.37%) +PlatformosCheck::SpaceInsideBraces#on_node (1941) (14 ms, 0.37%) @@ -16685,15 +16685,15 @@ -ThemeCheck::Position#start_index (105) (1 ms, 0.03%) +PlatformosCheck::Position#start_index (105) (1 ms, 0.03%) -ThemeCheck::ParsingHelpers#outside_of_strings (50) (1 ms, 0.03%) +PlatformosCheck::ParsingHelpers#outside_of_strings (50) (1 ms, 0.03%) -ThemeCheck::Node#initialize (1780) (2 ms, 0.05%) +PlatformosCheck::Node#initialize (1780) (2 ms, 0.05%) @@ -16701,7 +16701,7 @@ -ThemeCheck::Node#comment? (456) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (456) (0 ms, 0.00%) @@ -16709,11 +16709,11 @@ -ThemeCheck::UndefinedObject#on_variable_lookup (165) (3 ms, 0.08%) +PlatformosCheck::UndefinedObject#on_variable_lookup (165) (3 ms, 0.08%) -ThemeCheck::UnusedAssign#on_end (1) (1 ms, 0.03%) +PlatformosCheck::UnusedAssign#on_end (1) (1 ms, 0.03%) @@ -16757,7 +16757,7 @@ -ThemeCheck::Position#can_find_needle? (74) (0 ms, 0.00%) +PlatformosCheck::Position#can_find_needle? (74) (0 ms, 0.00%) @@ -16773,7 +16773,7 @@ -ThemeCheck::Theme#[] (17) (9 ms, 0.24%) +PlatformosCheck::Theme#[] (17) (9 ms, 0.24%) @@ -16781,7 +16781,7 @@ -ThemeCheck::AssetUrlFilters#html_resource_drop? (415) (0 ms, 0.00%) +PlatformosCheck::AssetUrlFilters#html_resource_drop? (415) (0 ms, 0.00%) @@ -16801,11 +16801,11 @@ -ThemeCheck::HtmlVisitor#call_checks (704) (5 ms, 0.13%) +PlatformosCheck::HtmlVisitor#call_checks (704) (5 ms, 0.13%) -ThemeCheck::Position#contents (1073) (1 ms, 0.03%) +PlatformosCheck::Position#contents (1073) (1 ms, 0.03%) @@ -16821,7 +16821,7 @@ -ThemeCheck::Node#markup (165) (0 ms, 0.00%) +PlatformosCheck::Node#markup (165) (0 ms, 0.00%) @@ -16829,11 +16829,11 @@ -ThemeCheck::PositionHelper#from_row_column_to_index (6) (0 ms, 0.00%) +PlatformosCheck::PositionHelper#from_row_column_to_index (6) (0 ms, 0.00%) -ThemeCheck::ParsingHelpers#outside_of_strings (359) (5 ms, 0.13%) +PlatformosCheck::ParsingHelpers#outside_of_strings (359) (5 ms, 0.13%) @@ -16841,7 +16841,7 @@ -ThemeCheck::Position#contents (2267) (1 ms, 0.03%) +PlatformosCheck::Position#contents (2267) (1 ms, 0.03%) @@ -16857,7 +16857,7 @@ -ThemeCheck::Node#inside_liquid_tag? (6) (0 ms, 0.00%) +PlatformosCheck::Node#inside_liquid_tag? (6) (0 ms, 0.00%) @@ -16877,7 +16877,7 @@ -ThemeCheck::Node#source (1332) (1 ms, 0.03%) +PlatformosCheck::Node#source (1332) (1 ms, 0.03%) @@ -16889,7 +16889,7 @@ -ThemeCheck::Template#snippet? (58) (0 ms, 0.00%) +PlatformosCheck::Template#snippet? (58) (0 ms, 0.00%) @@ -16909,15 +16909,15 @@ -ThemeCheck::Position#needle (150) (1 ms, 0.03%) +PlatformosCheck::Position#needle (150) (1 ms, 0.03%) -ThemeCheck::Node#children (1743) (12 ms, 0.32%) +PlatformosCheck::Node#children (1743) (12 ms, 0.32%) -ThemeCheck::Node#markup (700) (1 ms, 0.03%) +PlatformosCheck::Node#markup (700) (1 ms, 0.03%) @@ -16929,7 +16929,7 @@ -ThemeCheck::Checks#call_check_method (8708) (9 ms, 0.24%) +PlatformosCheck::Checks#call_check_method (8708) (9 ms, 0.24%) @@ -16937,11 +16937,11 @@ -ThemeCheck::Checks#call (5484) (295 ms, 7.85%) -ThemeCheck::Check.. +PlatformosCheck::Checks#call (5484) (295 ms, 7.85%) +PlatformosCheck::Check.. -ThemeCheck::Node#inside_liquid_tag? (31) (2 ms, 0.05%) +PlatformosCheck::Node#inside_liquid_tag? (31) (2 ms, 0.05%) @@ -16949,7 +16949,7 @@ -ThemeCheck::ValidHTMLTranslation#html_key? (2261) (2 ms, 0.05%) +PlatformosCheck::ValidHTMLTranslation#html_key? (2261) (2 ms, 0.05%) @@ -16965,11 +16965,11 @@ -ThemeCheck::JsonFile#load! (104) (76 ms, 2.02%) +PlatformosCheck::JsonFile#load! (104) (76 ms, 2.02%) Th.. -ThemeCheck::StringHelpers#underscore (294) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#underscore (294) (1 ms, 0.03%) @@ -16977,7 +16977,7 @@ -ThemeCheck::Node#initialize (434) (0 ms, 0.00%) +PlatformosCheck::Node#initialize (434) (0 ms, 0.00%) @@ -17001,11 +17001,11 @@ -ThemeCheck::ValidSchema#on_schema (31) (1 ms, 0.03%) +PlatformosCheck::ValidSchema#on_schema (31) (1 ms, 0.03%) -ThemeCheck::Node#block_body? (1097) (1 ms, 0.03%) +PlatformosCheck::Node#block_body? (1097) (1 ms, 0.03%) @@ -17013,7 +17013,7 @@ -ThemeCheck::PaginationSize#on_schema (31) (1 ms, 0.03%) +PlatformosCheck::PaginationSize#on_schema (31) (1 ms, 0.03%) @@ -17021,11 +17021,11 @@ -ThemeCheck::Node#type_name (3273) (18 ms, 0.48%) +PlatformosCheck::Node#type_name (3273) (18 ms, 0.48%) -ThemeCheck::MissingTemplate#on_include (17) (9 ms, 0.24%) +PlatformosCheck::MissingTemplate#on_include (17) (9 ms, 0.24%) @@ -17033,7 +17033,7 @@ -ThemeCheck::Position#compute_start_offset (38) (4 ms, 0.11%) +PlatformosCheck::Position#compute_start_offset (38) (4 ms, 0.11%) @@ -17041,7 +17041,7 @@ -ThemeCheck::Visitor#visit (34) (4 ms, 0.11%) +PlatformosCheck::Visitor#visit (34) (4 ms, 0.11%) @@ -17081,7 +17081,7 @@ -ThemeCheck::JsonFile#load! (313) (1 ms, 0.03%) +PlatformosCheck::JsonFile#load! (313) (1 ms, 0.03%) @@ -17089,19 +17089,19 @@ -ThemeCheck::ThemeFile#name (61) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (61) (0 ms, 0.00%) -ThemeCheck::Node#line_number (704) (1 ms, 0.03%) +PlatformosCheck::Node#line_number (704) (1 ms, 0.03%) -ThemeCheck::Template#parse (91) (387 ms, 10.30%) -ThemeCheck::Template#pa.. +PlatformosCheck::Template#parse (91) (387 ms, 10.30%) +PlatformosCheck::Template#pa.. -ThemeCheck::LiquidTag#on_string (949) (3 ms, 0.08%) +PlatformosCheck::LiquidTag#on_string (949) (3 ms, 0.08%) @@ -17121,11 +17121,11 @@ -ThemeCheck::Node#comment? (2286) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (2286) (1 ms, 0.03%) -ThemeCheck::ValidHTMLTranslation#html_key? (2352) (2 ms, 0.05%) +PlatformosCheck::ValidHTMLTranslation#html_key? (2352) (2 ms, 0.05%) @@ -17141,7 +17141,7 @@ -ThemeCheck::MatchingSchemaTranslations#visit_object (422) (2 ms, 0.05%) +PlatformosCheck::MatchingSchemaTranslations#visit_object (422) (2 ms, 0.05%) @@ -17157,7 +17157,7 @@ -ThemeCheck::Node#comment? (820) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (820) (0 ms, 0.00%) @@ -17165,15 +17165,15 @@ -ThemeCheck::HtmlNode#children (638) (4 ms, 0.11%) +PlatformosCheck::HtmlNode#children (638) (4 ms, 0.11%) -ThemeCheck::SpaceInsideBraces#on_tag (256) (13 ms, 0.35%) +PlatformosCheck::SpaceInsideBraces#on_tag (256) (13 ms, 0.35%) -ThemeCheck::RemoteAsset#on_element (107) (1 ms, 0.03%) +PlatformosCheck::RemoteAsset#on_element (107) (1 ms, 0.03%) @@ -17193,19 +17193,19 @@ -ThemeCheck::Theme#all (1) (41 ms, 1.09%) +PlatformosCheck::Theme#all (1) (41 ms, 1.09%) -ThemeCheck::Visitor#visit (1743) (2,486 ms, 66.16%) -ThemeCheck::Visitor#visit (1743) +PlatformosCheck::Visitor#visit (1743) (2,486 ms, 66.16%) +PlatformosCheck::Visitor#visit (1743) -ThemeCheck::ThemeFile#name (155) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (155) (0 ms, 0.00%) -ThemeCheck::Visitor#call_checks (2326) (97 ms, 2.58%) +PlatformosCheck::Visitor#call_checks (2326) (97 ms, 2.58%) Them.. @@ -17213,11 +17213,11 @@ -ThemeCheck::Position#start_index (40) (0 ms, 0.00%) +PlatformosCheck::Position#start_index (40) (0 ms, 0.00%) -ThemeCheck::Node#children (38) (1 ms, 0.03%) +PlatformosCheck::Node#children (38) (1 ms, 0.03%) @@ -17237,7 +17237,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (1515) (22 ms, 0.59%) +PlatformosCheck::SpaceInsideBraces#on_node (1515) (22 ms, 0.59%) @@ -17245,11 +17245,11 @@ -ThemeCheck::HtmlNode#element? (861) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#element? (861) (1 ms, 0.03%) -ThemeCheck::Node#tag_markup (373) (0 ms, 0.00%) +PlatformosCheck::Node#tag_markup (373) (0 ms, 0.00%) @@ -17261,7 +17261,7 @@ -ThemeCheck::Visitor#visit (515) (177 ms, 4.71%) +PlatformosCheck::Visitor#visit (515) (177 ms, 4.71%) ThemeChec.. @@ -17285,7 +17285,7 @@ -ThemeCheck::StringHelpers#demodulize (243) (0 ms, 0.00%) +PlatformosCheck::StringHelpers#demodulize (243) (0 ms, 0.00%) @@ -17301,7 +17301,7 @@ -ThemeCheck::Node#tag_markup (101) (4 ms, 0.11%) +PlatformosCheck::Node#tag_markup (101) (4 ms, 0.11%) @@ -17321,7 +17321,7 @@ -ThemeCheck::Node#tag? (436) (0 ms, 0.00%) +PlatformosCheck::Node#tag? (436) (0 ms, 0.00%) @@ -17333,15 +17333,15 @@ -ThemeCheck::ThemeFile#name (88) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#name (88) (0 ms, 0.00%) -ThemeCheck::Node#start_index (40) (0 ms, 0.00%) +PlatformosCheck::Node#start_index (40) (0 ms, 0.00%) -ThemeCheck::Visitor#call_checks (518) (17 ms, 0.45%) +PlatformosCheck::Visitor#call_checks (518) (17 ms, 0.45%) @@ -17349,11 +17349,11 @@ -ThemeCheck::Position#needle (330) (3 ms, 0.08%) +PlatformosCheck::Position#needle (330) (3 ms, 0.08%) -ThemeCheck::Node#tag_markup (99) (3 ms, 0.08%) +PlatformosCheck::Node#tag_markup (99) (3 ms, 0.08%) @@ -17393,7 +17393,7 @@ -ThemeCheck::StringHelpers#underscore (231) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#underscore (231) (1 ms, 0.03%) @@ -17405,7 +17405,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (821) (15 ms, 0.40%) +PlatformosCheck::SpaceInsideBraces#on_node (821) (15 ms, 0.40%) @@ -17417,7 +17417,7 @@ -ThemeCheck::StringHelpers#underscore (302) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#underscore (302) (2 ms, 0.05%) @@ -17425,7 +17425,7 @@ -ThemeCheck::HtmlNode#attributes (7) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#attributes (7) (0 ms, 0.00%) @@ -17445,7 +17445,7 @@ -ThemeCheck::SpaceInsideBraces#on_tag (70) (5 ms, 0.13%) +PlatformosCheck::SpaceInsideBraces#on_tag (70) (5 ms, 0.13%) @@ -17485,7 +17485,7 @@ -ThemeCheck::LiquidTag#on_tag (256) (39 ms, 1.04%) +PlatformosCheck::LiquidTag#on_tag (256) (39 ms, 1.04%) @@ -17493,11 +17493,11 @@ -ThemeCheck::Position#needle (70) (0 ms, 0.00%) +PlatformosCheck::Position#needle (70) (0 ms, 0.00%) -ThemeCheck::Template#snippet? (249) (1 ms, 0.03%) +PlatformosCheck::Template#snippet? (249) (1 ms, 0.03%) @@ -17505,7 +17505,7 @@ -ThemeCheck::PositionHelper#from_row_column_to_index (19) (2 ms, 0.05%) +PlatformosCheck::PositionHelper#from_row_column_to_index (19) (2 ms, 0.05%) @@ -17517,7 +17517,7 @@ -ThemeCheck::Node#markup (256) (0 ms, 0.00%) +PlatformosCheck::Node#markup (256) (0 ms, 0.00%) @@ -17537,7 +17537,7 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (249) (2 ms, 0.05%) +PlatformosCheck::UnusedAssign#on_variable_lookup (249) (2 ms, 0.05%) @@ -17569,7 +17569,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (508) (2 ms, 0.05%) +PlatformosCheck::SpaceInsideBraces#on_node (508) (2 ms, 0.05%) @@ -17577,11 +17577,11 @@ -ThemeCheck::Position#needle (2267) (12 ms, 0.32%) +PlatformosCheck::Position#needle (2267) (12 ms, 0.32%) -ThemeCheck::Node#source (510) (0 ms, 0.00%) +PlatformosCheck::Node#source (510) (0 ms, 0.00%) @@ -17601,7 +17601,7 @@ -ThemeCheck::Position#start_offset (40) (1 ms, 0.03%) +PlatformosCheck::Position#start_offset (40) (1 ms, 0.03%) @@ -17625,7 +17625,7 @@ -ThemeCheck::SpaceInsideBraces#on_variable (204) (3 ms, 0.08%) +PlatformosCheck::SpaceInsideBraces#on_variable (204) (3 ms, 0.08%) @@ -17637,7 +17637,7 @@ -ThemeCheck::UndefinedObject#on_variable_lookup (209) (4 ms, 0.11%) +PlatformosCheck::UndefinedObject#on_variable_lookup (209) (4 ms, 0.11%) @@ -17665,7 +17665,7 @@ -ThemeCheck::Node#block? (292) (1 ms, 0.03%) +PlatformosCheck::Node#block? (292) (1 ms, 0.03%) @@ -17673,19 +17673,19 @@ -ThemeCheck::Checks#call (1542) (44 ms, 1.17%) +PlatformosCheck::Checks#call (1542) (44 ms, 1.17%) -ThemeCheck::Node#line_number (109) (0 ms, 0.00%) +PlatformosCheck::Node#line_number (109) (0 ms, 0.00%) -ThemeCheck::ThemeFile#name (249) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (249) (1 ms, 0.03%) -ThemeCheck::MatchingSchemaTranslations#on_schema (31) (6 ms, 0.16%) +PlatformosCheck::MatchingSchemaTranslations#on_schema (31) (6 ms, 0.16%) @@ -17705,7 +17705,7 @@ -ThemeCheck::AssetUrlFilters#on_variable (313) (1 ms, 0.03%) +PlatformosCheck::AssetUrlFilters#on_variable (313) (1 ms, 0.03%) @@ -17725,7 +17725,7 @@ -ThemeCheck::ThemeFile#name (165) (1 ms, 0.03%) +PlatformosCheck::ThemeFile#name (165) (1 ms, 0.03%) @@ -17733,11 +17733,11 @@ -ThemeCheck::ValidHTMLTranslation#visit_nested (2648) (110 ms, 2.93%) +PlatformosCheck::ValidHTMLTranslation#visit_nested (2648) (110 ms, 2.93%) Theme.. -ThemeCheck::MissingTemplate#on_include (7) (2 ms, 0.05%) +PlatformosCheck::MissingTemplate#on_include (7) (2 ms, 0.05%) @@ -17749,15 +17749,15 @@ -ThemeCheck::AssetUrlFilters#record_variable_offense (193) (0 ms, 0.00%) +PlatformosCheck::AssetUrlFilters#record_variable_offense (193) (0 ms, 0.00%) -ThemeCheck::AssetUrlFilters#record_variable_offense (313) (0 ms, 0.00%) +PlatformosCheck::AssetUrlFilters#record_variable_offense (313) (0 ms, 0.00%) -ThemeCheck::UndefinedObject#ignore? (312) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#ignore? (312) (1 ms, 0.03%) @@ -17769,19 +17769,19 @@ -ThemeCheck::Checks#call (2326) (96 ms, 2.55%) +PlatformosCheck::Checks#call (2326) (96 ms, 2.55%) Them.. -ThemeCheck::ShopifyLiquid::Object#labels (1) (2 ms, 0.05%) +PlatformosCheck::ShopifyLiquid::Object#labels (1) (2 ms, 0.05%) -ThemeCheck::Node#tag? (987) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (987) (1 ms, 0.03%) -ThemeCheck::RemoteAsset#on_element (234) (1 ms, 0.03%) +PlatformosCheck::RemoteAsset#on_element (234) (1 ms, 0.03%) @@ -17789,19 +17789,19 @@ -ThemeCheck::MissingTemplate#add_missing_offense (7) (2 ms, 0.05%) +PlatformosCheck::MissingTemplate#add_missing_offense (7) (2 ms, 0.05%) -ThemeCheck::UndefinedObject#ignore? (165) (1 ms, 0.03%) +PlatformosCheck::UndefinedObject#ignore? (165) (1 ms, 0.03%) -ThemeCheck::StringHelpers#underscore (403) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#underscore (403) (2 ms, 0.05%) -ThemeCheck::Node#block_body? (506) (0 ms, 0.00%) +PlatformosCheck::Node#block_body? (506) (0 ms, 0.00%) @@ -17809,15 +17809,15 @@ -ThemeCheck::HtmlNode#initialize (553) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#initialize (553) (0 ms, 0.00%) -ThemeCheck::HtmlNode#initialize (590) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#initialize (590) (0 ms, 0.00%) -ThemeCheck::Node#comment? (515) (0 ms, 0.00%) +PlatformosCheck::Node#comment? (515) (0 ms, 0.00%) @@ -17833,7 +17833,7 @@ -ThemeCheck::Position#compute_start_offset (373) (25 ms, 0.67%) +PlatformosCheck::Position#compute_start_offset (373) (25 ms, 0.67%) @@ -17841,7 +17841,7 @@ -ThemeCheck::SpaceInsideBraces#on_tag (39) (2 ms, 0.05%) +PlatformosCheck::SpaceInsideBraces#on_tag (39) (2 ms, 0.05%) @@ -17865,7 +17865,7 @@ -ThemeCheck::HtmlNode#children (590) (3 ms, 0.08%) +PlatformosCheck::HtmlNode#children (590) (3 ms, 0.08%) @@ -17893,7 +17893,7 @@ -ThemeCheck::HtmlVisitor#visit (11) (1 ms, 0.03%) +PlatformosCheck::HtmlVisitor#visit (11) (1 ms, 0.03%) @@ -17909,15 +17909,15 @@ -ThemeCheck::Visitor#visit (91) (2,837 ms, 75.50%) -ThemeCheck::Visitor#visit (91) +PlatformosCheck::Visitor#visit (91) (2,837 ms, 75.50%) +PlatformosCheck::Visitor#visit (91) -ThemeCheck::Position#start_line_offset (165) (11 ms, 0.29%) +PlatformosCheck::Position#start_line_offset (165) (11 ms, 0.29%) -ThemeCheck::Node#inside_liquid_tag? (4) (0 ms, 0.00%) +PlatformosCheck::Node#inside_liquid_tag? (4) (0 ms, 0.00%) @@ -17929,7 +17929,7 @@ -ThemeCheck::Position#start_index (70) (1 ms, 0.03%) +PlatformosCheck::Position#start_index (70) (1 ms, 0.03%) @@ -17937,7 +17937,7 @@ -ThemeCheck::HtmlNode#element? (1007) (1 ms, 0.03%) +PlatformosCheck::HtmlNode#element? (1007) (1 ms, 0.03%) @@ -17957,7 +17957,7 @@ -ThemeCheck::Node#children (2286) (15 ms, 0.40%) +PlatformosCheck::Node#children (2286) (15 ms, 0.40%) @@ -17993,11 +17993,11 @@ -ThemeCheck::LiquidTag#on_tag (14) (2 ms, 0.05%) +PlatformosCheck::LiquidTag#on_tag (14) (2 ms, 0.05%) -ThemeCheck::Position#start_index (40) (1 ms, 0.03%) +PlatformosCheck::Position#start_index (40) (1 ms, 0.03%) @@ -18009,7 +18009,7 @@ -ThemeCheck::ValidHTMLTranslation#visit_nested (8658) (95 ms, 2.53%) +PlatformosCheck::ValidHTMLTranslation#visit_nested (8658) (95 ms, 2.53%) Them.. @@ -18017,7 +18017,7 @@ -ThemeCheck::Position#has_content_and_line_number_but_no_needle? (773) (0 ms, 0.00%) +PlatformosCheck::Position#has_content_and_line_number_but_no_needle? (773) (0 ms, 0.00%) @@ -18025,7 +18025,7 @@ -ThemeCheck::Node#inside_liquid_tag? (8) (1 ms, 0.03%) +PlatformosCheck::Node#inside_liquid_tag? (8) (1 ms, 0.03%) @@ -18049,7 +18049,7 @@ -ThemeCheck::TranslationKeyExists#on_variable (193) (2 ms, 0.05%) +PlatformosCheck::TranslationKeyExists#on_variable (193) (2 ms, 0.05%) @@ -18057,7 +18057,7 @@ -ThemeCheck::ThemeFile#relative_path (1940) (0 ms, 0.00%) +PlatformosCheck::ThemeFile#relative_path (1940) (0 ms, 0.00%) @@ -18085,11 +18085,11 @@ Array#e.. -ThemeCheck::Node#tag_markup (373) (0 ms, 0.00%) +PlatformosCheck::Node#tag_markup (373) (0 ms, 0.00%) -ThemeCheck::Node#comment? (987) (1 ms, 0.03%) +PlatformosCheck::Node#comment? (987) (1 ms, 0.03%) @@ -18109,11 +18109,11 @@ -ThemeCheck::Position#contents (486) (0 ms, 0.00%) +PlatformosCheck::Position#contents (486) (0 ms, 0.00%) -ThemeCheck::LiquidTag#reset_consecutive_statements (616) (0 ms, 0.00%) +PlatformosCheck::LiquidTag#reset_consecutive_statements (616) (0 ms, 0.00%) @@ -18125,7 +18125,7 @@ -ThemeCheck::StringHelpers#demodulize (1335) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#demodulize (1335) (2 ms, 0.05%) @@ -18133,7 +18133,7 @@ -ThemeCheck::Node#inside_liquid_tag? (38) (7 ms, 0.19%) +PlatformosCheck::Node#inside_liquid_tag? (38) (7 ms, 0.19%) @@ -18153,7 +18153,7 @@ -ThemeCheck::FileSystemStorage#file (91) (6 ms, 0.16%) +PlatformosCheck::FileSystemStorage#file (91) (6 ms, 0.16%) @@ -18161,7 +18161,7 @@ -ThemeCheck::Node#block_body? (810) (0 ms, 0.00%) +PlatformosCheck::Node#block_body? (810) (0 ms, 0.00%) @@ -18169,7 +18169,7 @@ -ThemeCheck::NestedSnippet#on_end (1) (1 ms, 0.03%) +PlatformosCheck::NestedSnippet#on_end (1) (1 ms, 0.03%) @@ -18177,11 +18177,11 @@ -ThemeCheck::HtmlNode#replace_placeholders (84) (0 ms, 0.00%) +PlatformosCheck::HtmlNode#replace_placeholders (84) (0 ms, 0.00%) -ThemeCheck::Template#snippet? (393) (2 ms, 0.05%) +PlatformosCheck::Template#snippet? (393) (2 ms, 0.05%) @@ -18189,7 +18189,7 @@ -ThemeCheck::StringHelpers#demodulize (509) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#demodulize (509) (1 ms, 0.03%) @@ -18197,15 +18197,15 @@ -ThemeCheck::UnusedAssign#on_variable_lookup (342) (4 ms, 0.11%) +PlatformosCheck::UnusedAssign#on_variable_lookup (342) (4 ms, 0.11%) -ThemeCheck::Checks#call (2588) (71 ms, 1.89%) +PlatformosCheck::Checks#call (2588) (71 ms, 1.89%) Th.. -ThemeCheck::Node#tag? (956) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (956) (1 ms, 0.03%) @@ -18213,7 +18213,7 @@ -ThemeCheck::StringHelpers#underscore (369) (2 ms, 0.05%) +PlatformosCheck::StringHelpers#underscore (369) (2 ms, 0.05%) @@ -18241,11 +18241,11 @@ A.. -ThemeCheck::SpaceInsideBraces#on_tag (6) (0 ms, 0.00%) +PlatformosCheck::SpaceInsideBraces#on_tag (6) (0 ms, 0.00%) -ThemeCheck::HtmlVisitor#call_checks (628) (5 ms, 0.13%) +PlatformosCheck::HtmlVisitor#call_checks (628) (5 ms, 0.13%) @@ -18269,7 +18269,7 @@ -ThemeCheck::Node#tag_markup (436) (0 ms, 0.00%) +PlatformosCheck::Node#tag_markup (436) (0 ms, 0.00%) @@ -18277,11 +18277,11 @@ -ThemeCheck::Checks#call (5102) (150 ms, 3.99%) +PlatformosCheck::Checks#call (5102) (150 ms, 3.99%) ThemeCh.. -ThemeCheck::Node#type_name (35) (0 ms, 0.00%) +PlatformosCheck::Node#type_name (35) (0 ms, 0.00%) @@ -18289,11 +18289,11 @@ -ThemeCheck::Position#start_offset (238) (4 ms, 0.11%) +PlatformosCheck::Position#start_offset (238) (4 ms, 0.11%) -ThemeCheck::Node#start_index (1680) (14 ms, 0.37%) +PlatformosCheck::Node#start_index (1680) (14 ms, 0.37%) @@ -18313,23 +18313,23 @@ -ThemeCheck::Node#block? (977) (2 ms, 0.05%) +PlatformosCheck::Node#block? (977) (2 ms, 0.05%) -ThemeCheck::UndefinedObject::TemplateInfo#add_variable_lookup (246) (2 ms, 0.05%) +PlatformosCheck::UndefinedObject::TemplateInfo#add_variable_lookup (246) (2 ms, 0.05%) -ThemeCheck::AssetUrlFilters#record_variable_offense (209) (0 ms, 0.00%) +PlatformosCheck::AssetUrlFilters#record_variable_offense (209) (0 ms, 0.00%) -ThemeCheck::Checks#call (1553) (14 ms, 0.37%) +PlatformosCheck::Checks#call (1553) (14 ms, 0.37%) -ThemeCheck::Node#tag? (1093) (1 ms, 0.03%) +PlatformosCheck::Node#tag? (1093) (1 ms, 0.03%) @@ -18337,8 +18337,8 @@ -ThemeCheck::Visitor#visit (1013) (623 ms, 16.58%) -ThemeCheck::Visitor#visit (1013) +PlatformosCheck::Visitor#visit (1013) (623 ms, 16.58%) +PlatformosCheck::Visitor#visit (1013) Liquid::Variable#initialize (2) (0 ms, 0.00%) @@ -18353,11 +18353,11 @@ -ThemeCheck::Position#needle (240) (1 ms, 0.03%) +PlatformosCheck::Position#needle (240) (1 ms, 0.03%) -ThemeCheck::MissingEnableComment#on_document (91) (0 ms, 0.00%) +PlatformosCheck::MissingEnableComment#on_document (91) (0 ms, 0.00%) @@ -18369,15 +18369,15 @@ -ThemeCheck::MissingTemplate#add_missing_offense (11) (3 ms, 0.08%) +PlatformosCheck::MissingTemplate#add_missing_offense (11) (3 ms, 0.08%) -ThemeCheck::Position#compute_start_offset (52) (4 ms, 0.11%) +PlatformosCheck::Position#compute_start_offset (52) (4 ms, 0.11%) -ThemeCheck::Checks#call (628) (5 ms, 0.13%) +PlatformosCheck::Checks#call (628) (5 ms, 0.13%) @@ -18385,7 +18385,7 @@ -ThemeCheck::StringHelpers#demodulize (369) (1 ms, 0.03%) +PlatformosCheck::StringHelpers#demodulize (369) (1 ms, 0.03%) @@ -18409,11 +18409,11 @@ -ThemeCheck::HtmlVisitor#call_checks (1244) (14 ms, 0.37%) +PlatformosCheck::HtmlVisitor#call_checks (1244) (14 ms, 0.37%) -ThemeCheck::Position#needle (95) (1 ms, 0.03%) +PlatformosCheck::Position#needle (95) (1 ms, 0.03%) @@ -18425,7 +18425,7 @@ -ThemeCheck::SpaceInsideBraces#on_node (1013) (9 ms, 0.24%) +PlatformosCheck::SpaceInsideBraces#on_node (1013) (9 ms, 0.24%) @@ -18437,15 +18437,15 @@ -ThemeCheck::Position#compute_start_offset (6) (1 ms, 0.03%) +PlatformosCheck::Position#compute_start_offset (6) (1 ms, 0.03%) -ThemeCheck::Node#block_body? (793) (0 ms, 0.00%) +PlatformosCheck::Node#block_body? (793) (0 ms, 0.00%) -ThemeCheck::StringHelpers#underscore (509) (3 ms, 0.08%) +PlatformosCheck::StringHelpers#underscore (509) (3 ms, 0.08%) @@ -18461,7 +18461,7 @@ -ThemeCheck::Node#inside_liquid_tag? (19) (3 ms, 0.08%) +PlatformosCheck::Node#inside_liquid_tag? (19) (3 ms, 0.08%) diff --git a/docs/language_server/how_to_correct_code_with_code_actions_and_execute_command.md b/docs/language_server/how_to_correct_code_with_code_actions_and_execute_command.md index b596b52e..82cb763c 100644 --- a/docs/language_server/how_to_correct_code_with_code_actions_and_execute_command.md +++ b/docs/language_server/how_to_correct_code_with_code_actions_and_execute_command.md @@ -42,12 +42,12 @@ We handle two Client->Server LSP requests: We define providers: - Two `CodeActionProvider`: - 1. [`QuickFixCodeActionProvider`](/lib/theme_check/language_server/code_action_providers/quickfix_code_action_provider.rb) - This one provides code actions that fix _one_ diagnostic. - 2. [`SourceFixAllCodeActionProvider`](/lib/theme_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb) - This one provides code actions that fix _all diagnostics in the current file_. + 1. [`QuickFixCodeActionProvider`](/lib/platformos_check/language_server/code_action_providers/quickfix_code_action_provider.rb) - This one provides code actions that fix _one_ diagnostic. + 2. [`SourceFixAllCodeActionProvider`](/lib/platformos_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb) - This one provides code actions that fix _all diagnostics in the current file_. - One `ExecuteCommandProvider`: - 1. [`CorrectionExecuteCommandProvider`](/lib/theme_check/language_server/execute_command_providers/correction_execute_command_provider.rb) - This one takes a list of diagnostics as arguments, turns them into a [WorkspaceEdit](#workspace-edit) and tries to apply them with the server->client `workspace/applyEdit` request. + 1. [`CorrectionExecuteCommandProvider`](/lib/platformos_check/language_server/execute_command_providers/correction_execute_command_provider.rb) - This one takes a list of diagnostics as arguments, turns them into a [WorkspaceEdit](#workspace-edit) and tries to apply them with the server->client `workspace/applyEdit` request. -We define a [`DocumentChangeCorrector`](/lib/theme_check/language_server/document_change_corrector.rb) (an LSP analog to our [`Corrector`](/lib/theme_check/corrector.rb) class). This class turns corrector calls into document changes supported by the LSP. For more details, see the [LSP reference on resource changes][lspresourcechange]. +We define a [`DocumentChangeCorrector`](/lib/platformos_check/language_server/document_change_corrector.rb) (an LSP analog to our [`Corrector`](/lib/platformos_check/corrector.rb) class). This class turns corrector calls into document changes supported by the LSP. For more details, see the [LSP reference on resource changes][lspresourcechange]. ## Definitions diff --git a/exe/theme-check b/exe/theme-check index 0124dcec..4dfe6405 100755 --- a/exe/theme-check +++ b/exe/theme-check @@ -1,6 +1,6 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require "theme_check" +quire "platformos_check" -ThemeCheck::Cli.parse_and_run(ARGV) +atformosCheck::Cli.parse_and_run(ARGV) diff --git a/exe/theme-check-language-server b/exe/theme-check-language-server index a7f08752..13f9baef 100755 --- a/exe/theme-check-language-server +++ b/exe/theme-check-language-server @@ -1,7 +1,7 @@ #!/usr/bin/env ruby # frozen_string_literal: true -require 'theme_check' +quire 'platformos_check' -status_code = ThemeCheck::LanguageServer.start -exit! status_code +atus_code = PlatformosCheck::LanguageServer.start +it! status_code diff --git a/lib/platformos_check.rb b/lib/platformos_check.rb new file mode 100644 index 00000000..516093b3 --- /dev/null +++ b/lib/platformos_check.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true +require "liquid" + +require_relative "platformos_check/version" +require_relative "platformos_check/bug" +require_relative "platformos_check/exceptions" +require_relative "platformos_check/schema_helper" +require_relative "platformos_check/theme_file_rewriter" +require_relative "platformos_check/theme_file" +require_relative "platformos_check/liquid_file" +require_relative "platformos_check/asset_file" +require_relative "platformos_check/json_file" +require_relative "platformos_check/analyzer" +require_relative "platformos_check/check" +require_relative "platformos_check/checks_tracking" +require_relative "platformos_check/liquid_check" +require_relative "platformos_check/html_check" +require_relative "platformos_check/json_check" +require_relative "platformos_check/cli" +require_relative "platformos_check/disabled_check" +require_relative "platformos_check/disabled_checks" +require_relative "platformos_check/locale_diff" +require_relative "platformos_check/remote_asset_file" +require_relative "platformos_check/regex_helpers" +require_relative "platformos_check/json_helpers" +require_relative "platformos_check/position_helper" +require_relative "platformos_check/position" +require_relative "platformos_check/checks" +require_relative "platformos_check/config" +require_relative "platformos_check/node" +require_relative "platformos_check/tags" +require_relative "platformos_check/liquid_node" +require_relative "platformos_check/html_node" +require_relative "platformos_check/offense" +require_relative "platformos_check/printer" +require_relative "platformos_check/json_printer" +require_relative "platformos_check/shopify_liquid" +require_relative "platformos_check/string_helpers" +require_relative "platformos_check/storage" +require_relative "platformos_check/file_system_storage" +require_relative "platformos_check/in_memory_storage" +require_relative "platformos_check/theme" +require_relative "platformos_check/corrector" +require_relative "platformos_check/liquid_visitor" +require_relative "platformos_check/html_visitor" +require_relative "platformos_check/language_server" + +Dir[__dir__ + "/platformos_check/checks/*.rb"].each { |file| require file } + +Encoding.default_external = Encoding::UTF_8 +Encoding.default_internal = Encoding::UTF_8 + +module PlatformosCheck + def self.debug? + ENV["PLATFORMOS_CHECK_DEBUG"] == "true" + end + + def self.debug_log_file + ENV["PLATFORMOS_CHECK_DEBUG_LOG_FILE"] + end + + def self.with_liquid_c_disabled + if defined?(Liquid::C) + was_enabled = Liquid::C.enabled + Liquid::C.enabled = false if was_enabled + end + yield + ensure + if defined?(Liquid::C) && was_enabled + Liquid::C.enabled = true + end + end +end diff --git a/lib/theme_check/analyzer.rb b/lib/platformos_check/analyzer.rb similarity index 97% rename from lib/theme_check/analyzer.rb rename to lib/platformos_check/analyzer.rb index 61d5a790..2c6847d8 100644 --- a/lib/theme_check/analyzer.rb +++ b/lib/platformos_check/analyzer.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Analyzer def initialize(theme, checks = Check.all.map(&:new), auto_correct = false) @theme = theme @@ -48,7 +48,7 @@ def analyze_theme liquid_visitor = LiquidVisitor.new(@liquid_checks, @disabled_checks) html_visitor = HtmlVisitor.new(@html_checks) - ThemeCheck.with_liquid_c_disabled do + PlatformosCheck.with_liquid_c_disabled do @theme.liquid.each_with_index do |liquid_file, i| yield(liquid_file.relative_path.to_s, i, total_file_count) if block_given? liquid_visitor.visit_liquid_file(liquid_file) @@ -81,7 +81,7 @@ def analyze_theme def analyze_files(files, only_single_file: false) reset - ThemeCheck.with_liquid_c_disabled do + PlatformosCheck.with_liquid_c_disabled do total = files.size offset = 0 diff --git a/lib/theme_check/asset_file.rb b/lib/platformos_check/asset_file.rb similarity index 96% rename from lib/theme_check/asset_file.rb rename to lib/platformos_check/asset_file.rb index 85827075..a403a933 100644 --- a/lib/theme_check/asset_file.rb +++ b/lib/platformos_check/asset_file.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "zlib" -module ThemeCheck +module PlatformosCheck class AssetFile < ThemeFile def initialize(relative_path, storage) super diff --git a/lib/theme_check/bug.rb b/lib/platformos_check/bug.rb similarity index 74% rename from lib/theme_check/bug.rb rename to lib/platformos_check/bug.rb index de1ff3dd..8df43d4e 100644 --- a/lib/theme_check/bug.rb +++ b/lib/platformos_check/bug.rb @@ -1,8 +1,8 @@ # frozen_string_literal: true -require 'theme_check/version' +require 'platformos_check/version' -module ThemeCheck - class ThemeCheckError < StandardError; end +module PlatformosCheck + class PlatformosCheckError < StandardError; end BUG_POSTAMBLE = <<~EOS Theme Check Version: #{VERSION} @@ -17,6 +17,6 @@ class ThemeCheckError < StandardError; end EOS def self.bug(message) - raise ThemeCheckError, message + BUG_POSTAMBLE + raise PlatformosCheckError, message + BUG_POSTAMBLE end end diff --git a/lib/theme_check/check.rb b/lib/platformos_check/check.rb similarity index 99% rename from lib/theme_check/check.rb rename to lib/platformos_check/check.rb index aab36cfb..06b14644 100644 --- a/lib/theme_check/check.rb +++ b/lib/platformos_check/check.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require_relative "json_helpers" -module ThemeCheck +module PlatformosCheck class Check include JsonHelpers diff --git a/lib/theme_check/checks.rb b/lib/platformos_check/checks.rb similarity index 87% rename from lib/theme_check/checks.rb rename to lib/platformos_check/checks.rb index cba97e20..014bbb44 100644 --- a/lib/theme_check/checks.rb +++ b/lib/platformos_check/checks.rb @@ -2,7 +2,7 @@ require "pp" require "timeout" -module ThemeCheck +module PlatformosCheck class Checks < Array CHECK_METHOD_TIMEOUT = 5 # sec @@ -30,19 +30,19 @@ def call_check_method(check, method, *args) return unless check.respond_to?(method) && !check.ignored? # If you want to use binding.pry in unit tests, define the - # THEME_CHECK_DEBUG environment variable. e.g. + # PLATFORMOS_CHECK_DEBUG environment variable. e.g. # - # $ export THEME_CHECK_DEBUG=true + # $ export PLATFORMOS_CHECK_DEBUG=true # $ bundle exec rake tests:in_memory # - if ENV['THEME_CHECK_DEBUG'] + if ENV['PLATFORMOS_CHECK_DEBUG'] check.send(method, *args) else Timeout.timeout(CHECK_METHOD_TIMEOUT) do check.send(method, *args) end end - rescue Liquid::Error, ThemeCheckError + rescue Liquid::Error, PlatformosCheckError raise rescue => e node = args.first @@ -51,7 +51,7 @@ def call_check_method(check, method, *args) node_class = node.respond_to?(:value) ? node.value.class : "?" line_number = node.respond_to?(:line_number) ? node.line_number : "?" - ThemeCheck.bug(<<~EOS) + PlatformosCheck.bug(<<~EOS) Exception while running `#{check.code_name}##{method}`: ``` #{e.class}: #{e.message} diff --git a/lib/theme_check/checks/TEMPLATE.rb.erb b/lib/platformos_check/checks/TEMPLATE.rb.erb similarity index 91% rename from lib/theme_check/checks/TEMPLATE.rb.erb rename to lib/platformos_check/checks/TEMPLATE.rb.erb index 642dea93..71e5abe4 100644 --- a/lib/theme_check/checks/TEMPLATE.rb.erb +++ b/lib/platformos_check/checks/TEMPLATE.rb.erb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # TODO: inherit from HtmlCheck or JsonCheck if working on a non-Liquid check class <%= class_name %> < LiquidCheck severity :suggestion diff --git a/lib/theme_check/checks/app_block_valid_tags.rb b/lib/platformos_check/checks/app_block_valid_tags.rb similarity index 89% rename from lib/theme_check/checks/app_block_valid_tags.rb rename to lib/platformos_check/checks/app_block_valid_tags.rb index d675fdbe..c984f1ad 100644 --- a/lib/theme_check/checks/app_block_valid_tags.rb +++ b/lib/platformos_check/checks/app_block_valid_tags.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when invalid tags are used in a Theme App # Extension block class AppBlockValidTags < LiquidCheck @@ -21,6 +21,10 @@ def on_stylesheet(node) add_offense(OFFENSE_MSG % 'stylesheet', node: node) end + def on_background(node) + add_offense(OFFENSE_MSG % 'background', node: node) + end + def on_include(node) add_offense(OFFENSE_MSG % 'include', node: node) end diff --git a/lib/theme_check/checks/asset_preload.rb b/lib/platformos_check/checks/asset_preload.rb similarity index 96% rename from lib/theme_check/checks/asset_preload.rb rename to lib/platformos_check/checks/asset_preload.rb index f6ee0b13..c5074402 100644 --- a/lib/theme_check/checks/asset_preload.rb +++ b/lib/platformos_check/checks/asset_preload.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class AssetPreload < HtmlCheck severity :suggestion categories :html, :performance diff --git a/lib/theme_check/checks/asset_size_app_block_css.rb b/lib/platformos_check/checks/asset_size_app_block_css.rb similarity index 97% rename from lib/theme_check/checks/asset_size_app_block_css.rb rename to lib/platformos_check/checks/asset_size_app_block_css.rb index 606917cb..07f76c78 100644 --- a/lib/theme_check/checks/asset_size_app_block_css.rb +++ b/lib/platformos_check/checks/asset_size_app_block_css.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when too much CSS is being referenced from a Theme App # Extension block class AssetSizeAppBlockCSS < LiquidCheck diff --git a/lib/theme_check/checks/asset_size_app_block_javascript.rb b/lib/platformos_check/checks/asset_size_app_block_javascript.rb similarity index 97% rename from lib/theme_check/checks/asset_size_app_block_javascript.rb rename to lib/platformos_check/checks/asset_size_app_block_javascript.rb index 7415b82d..d9825ee6 100644 --- a/lib/theme_check/checks/asset_size_app_block_javascript.rb +++ b/lib/platformos_check/checks/asset_size_app_block_javascript.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when too much JS is being referenced from a Theme App # Extension block class AssetSizeAppBlockJavaScript < LiquidCheck diff --git a/lib/theme_check/checks/asset_size_css.rb b/lib/platformos_check/checks/asset_size_css.rb similarity index 98% rename from lib/theme_check/checks/asset_size_css.rb rename to lib/platformos_check/checks/asset_size_css.rb index a027ceab..987466bb 100644 --- a/lib/theme_check/checks/asset_size_css.rb +++ b/lib/platformos_check/checks/asset_size_css.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class AssetSizeCSS < HtmlCheck include RegexHelpers severity :error diff --git a/lib/theme_check/checks/asset_size_css_stylesheet_tag.rb b/lib/platformos_check/checks/asset_size_css_stylesheet_tag.rb similarity index 98% rename from lib/theme_check/checks/asset_size_css_stylesheet_tag.rb rename to lib/platformos_check/checks/asset_size_css_stylesheet_tag.rb index 77c60659..50e812f3 100644 --- a/lib/theme_check/checks/asset_size_css_stylesheet_tag.rb +++ b/lib/platformos_check/checks/asset_size_css_stylesheet_tag.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class AssetSizeCSSStylesheetTag < LiquidCheck include RegexHelpers severity :error diff --git a/lib/theme_check/checks/asset_size_javascript.rb b/lib/platformos_check/checks/asset_size_javascript.rb similarity index 98% rename from lib/theme_check/checks/asset_size_javascript.rb rename to lib/platformos_check/checks/asset_size_javascript.rb index 53ac2a3d..267070c2 100644 --- a/lib/theme_check/checks/asset_size_javascript.rb +++ b/lib/platformos_check/checks/asset_size_javascript.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when trying to use too much JavaScript on page load # Encourages the use of the Import on Interaction pattern [1]. # [1]: https://addyosmani.com/blog/import-on-interaction/ diff --git a/lib/theme_check/checks/asset_url_filters.rb b/lib/platformos_check/checks/asset_url_filters.rb similarity index 98% rename from lib/theme_check/checks/asset_url_filters.rb rename to lib/platformos_check/checks/asset_url_filters.rb index 24ece43c..3cf82f73 100644 --- a/lib/theme_check/checks/asset_url_filters.rb +++ b/lib/platformos_check/checks/asset_url_filters.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class AssetUrlFilters < LiquidCheck severity :suggestion categories :liquid, :performance diff --git a/lib/theme_check/checks/cdn_preconnect.rb b/lib/platformos_check/checks/cdn_preconnect.rb similarity index 95% rename from lib/theme_check/checks/cdn_preconnect.rb rename to lib/platformos_check/checks/cdn_preconnect.rb index 0e66ff8f..c38544c9 100644 --- a/lib/theme_check/checks/cdn_preconnect.rb +++ b/lib/platformos_check/checks/cdn_preconnect.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class CdnPreconnect < HtmlCheck severity :suggestion categories :html, :performance diff --git a/lib/theme_check/checks/content_for_header_modification.rb b/lib/platformos_check/checks/content_for_header_modification.rb similarity index 97% rename from lib/theme_check/checks/content_for_header_modification.rb rename to lib/platformos_check/checks/content_for_header_modification.rb index 86375161..f37ddef3 100644 --- a/lib/theme_check/checks/content_for_header_modification.rb +++ b/lib/platformos_check/checks/content_for_header_modification.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class ContentForHeaderModification < LiquidCheck severity :error category :liquid diff --git a/lib/theme_check/checks/convert_include_to_render.rb b/lib/platformos_check/checks/convert_include_to_render.rb similarity index 95% rename from lib/theme_check/checks/convert_include_to_render.rb rename to lib/platformos_check/checks/convert_include_to_render.rb index 2652bd5c..f1a59621 100644 --- a/lib/theme_check/checks/convert_include_to_render.rb +++ b/lib/platformos_check/checks/convert_include_to_render.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Recommends replacing `include` for `render` class ConvertIncludeToRender < LiquidCheck severity :suggestion diff --git a/lib/theme_check/checks/default_locale.rb b/lib/platformos_check/checks/default_locale.rb similarity index 95% rename from lib/theme_check/checks/default_locale.rb rename to lib/platformos_check/checks/default_locale.rb index 1d16a334..72386349 100644 --- a/lib/theme_check/checks/default_locale.rb +++ b/lib/platformos_check/checks/default_locale.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DefaultLocale < JsonCheck severity :suggestion category :translation diff --git a/lib/theme_check/checks/deprecate_bgsizes.rb b/lib/platformos_check/checks/deprecate_bgsizes.rb similarity index 95% rename from lib/theme_check/checks/deprecate_bgsizes.rb rename to lib/platformos_check/checks/deprecate_bgsizes.rb index 2cf165e1..84fb04f3 100644 --- a/lib/theme_check/checks/deprecate_bgsizes.rb +++ b/lib/platformos_check/checks/deprecate_bgsizes.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DeprecateBgsizes < HtmlCheck severity :suggestion category :html, :performance diff --git a/lib/theme_check/checks/deprecate_lazysizes.rb b/lib/platformos_check/checks/deprecate_lazysizes.rb similarity index 97% rename from lib/theme_check/checks/deprecate_lazysizes.rb rename to lib/platformos_check/checks/deprecate_lazysizes.rb index ab315b8f..5b4f41c1 100644 --- a/lib/theme_check/checks/deprecate_lazysizes.rb +++ b/lib/platformos_check/checks/deprecate_lazysizes.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DeprecateLazysizes < HtmlCheck severity :suggestion category :html, :performance diff --git a/lib/theme_check/checks/deprecated_filter.rb b/lib/platformos_check/checks/deprecated_filter.rb similarity index 99% rename from lib/theme_check/checks/deprecated_filter.rb rename to lib/platformos_check/checks/deprecated_filter.rb index a61120a4..a47fbd26 100644 --- a/lib/theme_check/checks/deprecated_filter.rb +++ b/lib/platformos_check/checks/deprecated_filter.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DeprecatedFilter < LiquidCheck doc docs_url(__FILE__) category :liquid diff --git a/lib/theme_check/checks/deprecated_global_app_block_type.rb b/lib/platformos_check/checks/deprecated_global_app_block_type.rb similarity index 98% rename from lib/theme_check/checks/deprecated_global_app_block_type.rb rename to lib/platformos_check/checks/deprecated_global_app_block_type.rb index f6644150..002fa79b 100644 --- a/lib/theme_check/checks/deprecated_global_app_block_type.rb +++ b/lib/platformos_check/checks/deprecated_global_app_block_type.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DeprecatedGlobalAppBlockType < LiquidCheck severity :error category :liquid diff --git a/lib/theme_check/checks/html_parsing_error.rb b/lib/platformos_check/checks/html_parsing_error.rb similarity index 92% rename from lib/theme_check/checks/html_parsing_error.rb rename to lib/platformos_check/checks/html_parsing_error.rb index 9a5f7072..b0218a5c 100644 --- a/lib/theme_check/checks/html_parsing_error.rb +++ b/lib/platformos_check/checks/html_parsing_error.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class HtmlParsingError < HtmlCheck severity :error category :html diff --git a/lib/theme_check/checks/img_lazy_loading.rb b/lib/platformos_check/checks/img_lazy_loading.rb similarity index 95% rename from lib/theme_check/checks/img_lazy_loading.rb rename to lib/platformos_check/checks/img_lazy_loading.rb index ad693cb5..e5abded4 100644 --- a/lib/theme_check/checks/img_lazy_loading.rb +++ b/lib/platformos_check/checks/img_lazy_loading.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class ImgLazyLoading < HtmlCheck severity :suggestion categories :html, :performance diff --git a/lib/theme_check/checks/img_width_and_height.rb b/lib/platformos_check/checks/img_width_and_height.rb similarity index 98% rename from lib/theme_check/checks/img_width_and_height.rb rename to lib/platformos_check/checks/img_width_and_height.rb index 47d5bc65..bfa6d8f6 100644 --- a/lib/theme_check/checks/img_width_and_height.rb +++ b/lib/platformos_check/checks/img_width_and_height.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when trying to use parser-blocking script tags class ImgWidthAndHeight < HtmlCheck severity :error diff --git a/lib/theme_check/checks/liquid_tag.rb b/lib/platformos_check/checks/liquid_tag.rb similarity index 98% rename from lib/theme_check/checks/liquid_tag.rb rename to lib/platformos_check/checks/liquid_tag.rb index 93c5ca46..0832da26 100644 --- a/lib/theme_check/checks/liquid_tag.rb +++ b/lib/platformos_check/checks/liquid_tag.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Recommends using {% liquid ... %} if 5 or more consecutive {% ... %} are found. class LiquidTag < LiquidCheck severity :suggestion diff --git a/lib/theme_check/checks/matching_schema_translations.rb b/lib/platformos_check/checks/matching_schema_translations.rb similarity index 98% rename from lib/theme_check/checks/matching_schema_translations.rb rename to lib/platformos_check/checks/matching_schema_translations.rb index d4f3fa59..80c8042d 100644 --- a/lib/theme_check/checks/matching_schema_translations.rb +++ b/lib/platformos_check/checks/matching_schema_translations.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class MatchingSchemaTranslations < LiquidCheck severity :suggestion category :translation diff --git a/lib/theme_check/checks/matching_translations.rb b/lib/platformos_check/checks/matching_translations.rb similarity index 96% rename from lib/theme_check/checks/matching_translations.rb rename to lib/platformos_check/checks/matching_translations.rb index d6dfe656..f50ce288 100644 --- a/lib/theme_check/checks/matching_translations.rb +++ b/lib/platformos_check/checks/matching_translations.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class MatchingTranslations < JsonCheck severity :suggestion category :translation diff --git a/lib/theme_check/checks/missing_enable_comment.rb b/lib/platformos_check/checks/missing_enable_comment.rb similarity index 97% rename from lib/theme_check/checks/missing_enable_comment.rb rename to lib/platformos_check/checks/missing_enable_comment.rb index 50588728..90cef451 100644 --- a/lib/theme_check/checks/missing_enable_comment.rb +++ b/lib/platformos_check/checks/missing_enable_comment.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class MissingEnableComment < LiquidCheck severity :error doc docs_url(__FILE__) diff --git a/lib/theme_check/checks/missing_required_template_files.rb b/lib/platformos_check/checks/missing_required_template_files.rb similarity index 98% rename from lib/theme_check/checks/missing_required_template_files.rb rename to lib/platformos_check/checks/missing_required_template_files.rb index 99e821a9..3dd0c1e1 100644 --- a/lib/theme_check/checks/missing_required_template_files.rb +++ b/lib/platformos_check/checks/missing_required_template_files.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports missing shopify required theme files # required templates: https://shopify.dev/tutorials/review-theme-store-requirements-files class MissingRequiredTemplateFiles < LiquidCheck diff --git a/lib/theme_check/checks/missing_template.rb b/lib/platformos_check/checks/missing_template.rb similarity index 98% rename from lib/theme_check/checks/missing_template.rb rename to lib/platformos_check/checks/missing_template.rb index 1e19f075..6b87b82f 100644 --- a/lib/theme_check/checks/missing_template.rb +++ b/lib/platformos_check/checks/missing_template.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports missing include/render/section liquid file class MissingTemplate < LiquidCheck severity :suggestion diff --git a/lib/theme_check/checks/nested_snippet.rb b/lib/platformos_check/checks/nested_snippet.rb similarity index 98% rename from lib/theme_check/checks/nested_snippet.rb rename to lib/platformos_check/checks/nested_snippet.rb index 1c550339..99e80aca 100644 --- a/lib/theme_check/checks/nested_snippet.rb +++ b/lib/platformos_check/checks/nested_snippet.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports deeply nested {% include ... %} or {% render ... %} class NestedSnippet < LiquidCheck severity :suggestion diff --git a/lib/theme_check/checks/pagination_size.rb b/lib/platformos_check/checks/pagination_size.rb similarity index 99% rename from lib/theme_check/checks/pagination_size.rb rename to lib/platformos_check/checks/pagination_size.rb index d4005eab..22915c88 100644 --- a/lib/theme_check/checks/pagination_size.rb +++ b/lib/platformos_check/checks/pagination_size.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class PaginationSize < LiquidCheck severity :suggestion categories :performance diff --git a/lib/theme_check/checks/parser_blocking_javascript.rb b/lib/platformos_check/checks/parser_blocking_javascript.rb similarity index 95% rename from lib/theme_check/checks/parser_blocking_javascript.rb rename to lib/platformos_check/checks/parser_blocking_javascript.rb index b0310959..b9dcc47f 100644 --- a/lib/theme_check/checks/parser_blocking_javascript.rb +++ b/lib/platformos_check/checks/parser_blocking_javascript.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when trying to use parser-blocking script tags class ParserBlockingJavaScript < HtmlCheck severity :error diff --git a/lib/theme_check/checks/parser_blocking_script_tag.rb b/lib/platformos_check/checks/parser_blocking_script_tag.rb similarity index 96% rename from lib/theme_check/checks/parser_blocking_script_tag.rb rename to lib/platformos_check/checks/parser_blocking_script_tag.rb index 3f924316..a10dcadc 100644 --- a/lib/theme_check/checks/parser_blocking_script_tag.rb +++ b/lib/platformos_check/checks/parser_blocking_script_tag.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports errors when trying to use parser-blocking script tags class ParserBlockingScriptTag < LiquidCheck severity :error diff --git a/lib/theme_check/checks/remote_asset.rb b/lib/platformos_check/checks/remote_asset.rb similarity index 98% rename from lib/theme_check/checks/remote_asset.rb rename to lib/platformos_check/checks/remote_asset.rb index a309c429..254ae8c3 100644 --- a/lib/theme_check/checks/remote_asset.rb +++ b/lib/platformos_check/checks/remote_asset.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class RemoteAsset < HtmlCheck severity :suggestion categories :html, :performance diff --git a/lib/theme_check/checks/required_directories.rb b/lib/platformos_check/checks/required_directories.rb similarity index 96% rename from lib/theme_check/checks/required_directories.rb rename to lib/platformos_check/checks/required_directories.rb index e7163e8a..eea7f55d 100644 --- a/lib/theme_check/checks/required_directories.rb +++ b/lib/platformos_check/checks/required_directories.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports missing shopify required directories class RequiredDirectories < LiquidCheck diff --git a/lib/theme_check/checks/required_layout_theme_object.rb b/lib/platformos_check/checks/required_layout_theme_object.rb similarity index 98% rename from lib/theme_check/checks/required_layout_theme_object.rb rename to lib/platformos_check/checks/required_layout_theme_object.rb index d16259e0..7c7fd324 100644 --- a/lib/theme_check/checks/required_layout_theme_object.rb +++ b/lib/platformos_check/checks/required_layout_theme_object.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Reports missing content_for_header and content_for_layout in theme.liquid class RequiredLayoutThemeObject < LiquidCheck severity :error diff --git a/lib/theme_check/checks/schema_json_format.rb b/lib/platformos_check/checks/schema_json_format.rb similarity index 96% rename from lib/theme_check/checks/schema_json_format.rb rename to lib/platformos_check/checks/schema_json_format.rb index aa6ea2da..814f1b75 100644 --- a/lib/theme_check/checks/schema_json_format.rb +++ b/lib/platformos_check/checks/schema_json_format.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class SchemaJsonFormat < LiquidCheck severity :style category :liquid diff --git a/lib/theme_check/checks/space_inside_braces.rb b/lib/platformos_check/checks/space_inside_braces.rb similarity index 99% rename from lib/theme_check/checks/space_inside_braces.rb rename to lib/platformos_check/checks/space_inside_braces.rb index 07a98136..8d1a5a79 100644 --- a/lib/theme_check/checks/space_inside_braces.rb +++ b/lib/platformos_check/checks/space_inside_braces.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Ensure {% ... %} & {{ ... }} have consistent spaces. class SpaceInsideBraces < LiquidCheck severity :style diff --git a/lib/theme_check/checks/syntax_error.rb b/lib/platformos_check/checks/syntax_error.rb similarity index 97% rename from lib/theme_check/checks/syntax_error.rb rename to lib/platformos_check/checks/syntax_error.rb index 803e0f32..cdffad4a 100644 --- a/lib/theme_check/checks/syntax_error.rb +++ b/lib/platformos_check/checks/syntax_error.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Report Liquid syntax errors class SyntaxError < LiquidCheck severity :error diff --git a/lib/theme_check/checks/template_length.rb b/lib/platformos_check/checks/template_length.rb similarity index 98% rename from lib/theme_check/checks/template_length.rb rename to lib/platformos_check/checks/template_length.rb index f7c29a08..fcf5d0c2 100644 --- a/lib/theme_check/checks/template_length.rb +++ b/lib/platformos_check/checks/template_length.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class TemplateLength < LiquidCheck severity :suggestion category :liquid diff --git a/lib/theme_check/checks/translation_key_exists.rb b/lib/platformos_check/checks/translation_key_exists.rb similarity index 98% rename from lib/theme_check/checks/translation_key_exists.rb rename to lib/platformos_check/checks/translation_key_exists.rb index f70ccefc..38d886b7 100644 --- a/lib/theme_check/checks/translation_key_exists.rb +++ b/lib/platformos_check/checks/translation_key_exists.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class TranslationKeyExists < LiquidCheck severity :error category :translation diff --git a/lib/theme_check/checks/undefined_object.rb b/lib/platformos_check/checks/undefined_object.rb similarity index 95% rename from lib/theme_check/checks/undefined_object.rb rename to lib/platformos_check/checks/undefined_object.rb index 2024c215..645afbd8 100644 --- a/lib/theme_check/checks/undefined_object.rb +++ b/lib/platformos_check/checks/undefined_object.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class UndefinedObject < LiquidCheck category :liquid doc docs_url(__FILE__) @@ -106,13 +106,13 @@ def on_variable_lookup(node) end def on_end - all_global_objects = ThemeCheck::ShopifyLiquid::Object.labels + all_global_objects = PlatformosCheck::ShopifyLiquid::Object.labels all_global_objects.freeze - shopify_plus_objects = ThemeCheck::ShopifyLiquid::Object.plus_labels + shopify_plus_objects = PlatformosCheck::ShopifyLiquid::Object.plus_labels shopify_plus_objects.freeze - theme_app_extension_objects = ThemeCheck::ShopifyLiquid::Object.theme_app_extension_labels + theme_app_extension_objects = PlatformosCheck::ShopifyLiquid::Object.theme_app_extension_labels theme_app_extension_objects.freeze each_template do |(name, info)| diff --git a/lib/theme_check/checks/unknown_filter.rb b/lib/platformos_check/checks/unknown_filter.rb similarity index 95% rename from lib/theme_check/checks/unknown_filter.rb rename to lib/platformos_check/checks/unknown_filter.rb index 2ce3fbc1..41f023cb 100644 --- a/lib/theme_check/checks/unknown_filter.rb +++ b/lib/platformos_check/checks/unknown_filter.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # # Unwanted: # diff --git a/lib/theme_check/checks/unused_assign.rb b/lib/platformos_check/checks/unused_assign.rb similarity index 98% rename from lib/theme_check/checks/unused_assign.rb rename to lib/platformos_check/checks/unused_assign.rb index 7b217ea2..bc5f152f 100644 --- a/lib/theme_check/checks/unused_assign.rb +++ b/lib/platformos_check/checks/unused_assign.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # Checks unused {% assign x = ... %} class UnusedAssign < LiquidCheck severity :suggestion diff --git a/lib/theme_check/checks/unused_snippet.rb b/lib/platformos_check/checks/unused_snippet.rb similarity index 99% rename from lib/theme_check/checks/unused_snippet.rb rename to lib/platformos_check/checks/unused_snippet.rb index 406e4ca9..9b8589fd 100644 --- a/lib/theme_check/checks/unused_snippet.rb +++ b/lib/platformos_check/checks/unused_snippet.rb @@ -2,7 +2,7 @@ require "set" -module ThemeCheck +module PlatformosCheck class UnusedSnippet < LiquidCheck severity :suggestion category :liquid diff --git a/lib/theme_check/checks/valid_html_translation.rb b/lib/platformos_check/checks/valid_html_translation.rb similarity index 97% rename from lib/theme_check/checks/valid_html_translation.rb rename to lib/platformos_check/checks/valid_html_translation.rb index 61317cd5..4cd20f0a 100644 --- a/lib/theme_check/checks/valid_html_translation.rb +++ b/lib/platformos_check/checks/valid_html_translation.rb @@ -2,7 +2,7 @@ require 'nokogiri' -module ThemeCheck +module PlatformosCheck class ValidHTMLTranslation < JsonCheck severity :suggestion category :translation diff --git a/lib/theme_check/checks/valid_json.rb b/lib/platformos_check/checks/valid_json.rb similarity index 93% rename from lib/theme_check/checks/valid_json.rb rename to lib/platformos_check/checks/valid_json.rb index 6a5b9cfd..a00da98d 100644 --- a/lib/theme_check/checks/valid_json.rb +++ b/lib/platformos_check/checks/valid_json.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class ValidJson < JsonCheck severity :error category :json diff --git a/lib/theme_check/checks/valid_schema.rb b/lib/platformos_check/checks/valid_schema.rb similarity index 92% rename from lib/theme_check/checks/valid_schema.rb rename to lib/platformos_check/checks/valid_schema.rb index 107104a4..e59811ea 100644 --- a/lib/theme_check/checks/valid_schema.rb +++ b/lib/platformos_check/checks/valid_schema.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class ValidSchema < LiquidCheck severity :error category :json diff --git a/lib/theme_check/checks_tracking.rb b/lib/platformos_check/checks_tracking.rb similarity index 84% rename from lib/theme_check/checks_tracking.rb rename to lib/platformos_check/checks_tracking.rb index e4f5229f..9d14dfd8 100644 --- a/lib/theme_check/checks_tracking.rb +++ b/lib/platformos_check/checks_tracking.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ChecksTracking def inherited(klass) Check.all << klass diff --git a/lib/theme_check/cli.rb b/lib/platformos_check/cli.rb similarity index 83% rename from lib/theme_check/cli.rb rename to lib/platformos_check/cli.rb index c2c3f39b..62128989 100644 --- a/lib/theme_check/cli.rb +++ b/lib/platformos_check/cli.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "optparse" -module ThemeCheck +module PlatformosCheck class Cli class Abort < StandardError; end @@ -83,7 +83,7 @@ def option_parser(parser = OptionParser.new, help: true) "Print Theme Check version" ) { @command = :version } - if ENV["THEME_CHECK_DEBUG"] + if ENV["PLATFORMOS_CHECK_DEBUG"] @option_parser.separator("") @option_parser.separator("Debugging:") @option_parser.on( @@ -113,12 +113,12 @@ def parse(argv) def run! unless [:version, :init, :help].include?(@command) @config = if @config_path - ThemeCheck::Config.new( + PlatformosCheck::Config.new( root: @path, - configuration: ThemeCheck::Config.load_config(@config_path) + configuration: PlatformosCheck::Config.load_config(@config_path) ) else - ThemeCheck::Config.from_path(@path) + PlatformosCheck::Config.from_path(@path) end @config.include_categories = @include_categories unless @include_categories.empty? @config.exclude_categories = @exclude_categories unless @exclude_categories.empty? @@ -137,7 +137,7 @@ def run else abort(e.message) end - rescue ThemeCheckError => e + rescue PlatformosCheckError => e STDERR.puts(e.message) exit(2) end @@ -159,21 +159,21 @@ def list end def version - puts ThemeCheck::VERSION + puts PlatformosCheck::VERSION end def init - dotfile_path = ThemeCheck::Config.find(@path) + dotfile_path = PlatformosCheck::Config.find(@path) if dotfile_path.nil? config_name = @config_path || "default" File.write( - File.join(@path, ThemeCheck::Config::DOTFILE), - File.read(ThemeCheck::Config.bundled_config_path(config_name)) + File.join(@path, PlatformosCheck::Config::DOTFILE), + File.read(PlatformosCheck::Config.bundled_config_path(config_name)) ) - puts "Writing new #{ThemeCheck::Config::DOTFILE} to #{@path}" + puts "Writing new #{PlatformosCheck::Config::DOTFILE} to #{@path}" else - raise Abort, "#{ThemeCheck::Config::DOTFILE} already exists at #{@path}" + raise Abort, "#{PlatformosCheck::Config::DOTFILE} already exists at #{@path}" end end @@ -189,12 +189,12 @@ def check(out_stream = STDOUT) update_docs STDERR.puts "Checking #{@config.root} ..." - storage = ThemeCheck::FileSystemStorage.new(@config.root, ignored_patterns: @config.ignored_patterns) - theme = ThemeCheck::Theme.new(storage) + storage = PlatformosCheck::FileSystemStorage.new(@config.root, ignored_patterns: @config.ignored_patterns) + theme = PlatformosCheck::Theme.new(storage) if theme.all.empty? raise Abort, "No theme files found." end - analyzer = ThemeCheck::Analyzer.new(theme, @config.enabled_checks, @config.auto_correct) + analyzer = PlatformosCheck::Analyzer.new(theme, @config.enabled_checks, @config.auto_correct) analyzer.analyze_theme analyzer.correct_offenses print_with_format(theme, analyzer, out_stream) @@ -211,7 +211,7 @@ def update_docs STDERR.puts 'Updating documentation...' - ThemeCheck::ShopifyLiquid::SourceManager.download + PlatformosCheck::ShopifyLiquid::SourceManager.download end def profile @@ -231,9 +231,9 @@ def profile def print_with_format(theme, analyzer, out_stream) case @format when :text - ThemeCheck::Printer.new(out_stream).print(theme, analyzer.offenses, @config.auto_correct) + PlatformosCheck::Printer.new(out_stream).print(theme, analyzer.offenses, @config.auto_correct) when :json - ThemeCheck::JsonPrinter.new(out_stream).print(analyzer.offenses) + PlatformosCheck::JsonPrinter.new(out_stream).print(analyzer.offenses) end end end diff --git a/lib/theme_check/config.rb b/lib/platformos_check/config.rb similarity index 98% rename from lib/theme_check/config.rb rename to lib/platformos_check/config.rb index c438bf1b..daa5594e 100644 --- a/lib/theme_check/config.rb +++ b/lib/platformos_check/config.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Config DOTFILE = '.theme-check.yml' BUNDLED_CONFIGS_DIR = Pathname.new("#{__dir__}/../../config").realpath @@ -118,7 +118,7 @@ def enabled_checks @enabled_checks ||= check_configurations.map do |check_name, options| next unless options["enabled"] - check_class = ThemeCheck.const_get(check_name) + check_class = PlatformosCheck.const_get(check_name) next if check_class.categories.any? { |category| exclude_categories.include?(category) } next if include_categories.any? && !include_categories.all? { |category| check_class.categories.include?(category) } diff --git a/lib/theme_check/corrector.rb b/lib/platformos_check/corrector.rb similarity index 98% rename from lib/theme_check/corrector.rb rename to lib/platformos_check/corrector.rb index 65a5fbef..bc9039fb 100644 --- a/lib/theme_check/corrector.rb +++ b/lib/platformos_check/corrector.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Corrector include JsonHelpers diff --git a/lib/theme_check/disabled_check.rb b/lib/platformos_check/disabled_check.rb similarity index 97% rename from lib/theme_check/disabled_check.rb rename to lib/platformos_check/disabled_check.rb index 84d775ac..543979f9 100644 --- a/lib/theme_check/disabled_check.rb +++ b/lib/platformos_check/disabled_check.rb @@ -2,7 +2,7 @@ # This class keeps track of checks being turned on and off in ranges. # We'll use the node position to figure out if the test is disabled or not. -module ThemeCheck +module PlatformosCheck class DisabledCheck attr_reader :name, :theme_file, :ranges attr_accessor :first_line diff --git a/lib/theme_check/disabled_checks.rb b/lib/platformos_check/disabled_checks.rb similarity index 99% rename from lib/theme_check/disabled_checks.rb rename to lib/platformos_check/disabled_checks.rb index 0cabea26..045ba128 100644 --- a/lib/theme_check/disabled_checks.rb +++ b/lib/platformos_check/disabled_checks.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DisabledChecks DISABLE_START = 'theme-check-disable' DISABLE_END = 'theme-check-enable' diff --git a/lib/theme_check/exceptions.rb b/lib/platformos_check/exceptions.rb similarity index 96% rename from lib/theme_check/exceptions.rb rename to lib/platformos_check/exceptions.rb index c81b43d9..a9de2353 100644 --- a/lib/theme_check/exceptions.rb +++ b/lib/platformos_check/exceptions.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "net/http" -module ThemeCheck +module PlatformosCheck TIMEOUT_EXCEPTIONS = [ Net::ReadTimeout, Net::OpenTimeout, diff --git a/lib/theme_check/file_system_storage.rb b/lib/platformos_check/file_system_storage.rb similarity index 98% rename from lib/theme_check/file_system_storage.rb rename to lib/platformos_check/file_system_storage.rb index 70afb41e..e84ce9d1 100644 --- a/lib/theme_check/file_system_storage.rb +++ b/lib/platformos_check/file_system_storage.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "pathname" -module ThemeCheck +module PlatformosCheck class FileSystemStorage < Storage attr_reader :root diff --git a/lib/theme_check/html_check.rb b/lib/platformos_check/html_check.rb similarity index 85% rename from lib/theme_check/html_check.rb rename to lib/platformos_check/html_check.rb index c60e678c..184e6937 100644 --- a/lib/theme_check/html_check.rb +++ b/lib/platformos_check/html_check.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class HtmlCheck < Check extend ChecksTracking START_OR_END_QUOTE = /(^['"])|(['"]$)/ diff --git a/lib/theme_check/html_node.rb b/lib/platformos_check/html_node.rb similarity index 98% rename from lib/theme_check/html_node.rb rename to lib/platformos_check/html_node.rb index 249ec214..689baafd 100644 --- a/lib/theme_check/html_node.rb +++ b/lib/platformos_check/html_node.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "forwardable" -module ThemeCheck +module PlatformosCheck class HtmlNode < Node extend Forwardable include RegexHelpers @@ -151,7 +151,7 @@ def parseable_markup # Don't know what's up with the following issue. Don't think # null check is correct approach. This should give us more info. # https://github.com/Shopify/theme-check/issues/528 - ThemeCheck.bug(<<~MSG) + PlatformosCheck.bug(<<~MSG) Can't find a parseable tag of name #{name} inside the parseable HTML. Tag name: diff --git a/lib/theme_check/html_visitor.rb b/lib/platformos_check/html_visitor.rb similarity index 97% rename from lib/theme_check/html_visitor.rb rename to lib/platformos_check/html_visitor.rb index 473b29e5..80fd9e38 100644 --- a/lib/theme_check/html_visitor.rb +++ b/lib/platformos_check/html_visitor.rb @@ -2,7 +2,7 @@ require "nokogiri" require "forwardable" -module ThemeCheck +module PlatformosCheck class HtmlVisitor attr_reader :checks diff --git a/lib/theme_check/in_memory_storage.rb b/lib/platformos_check/in_memory_storage.rb similarity index 98% rename from lib/theme_check/in_memory_storage.rb rename to lib/platformos_check/in_memory_storage.rb index d3b8984c..69ea1d8a 100644 --- a/lib/theme_check/in_memory_storage.rb +++ b/lib/platformos_check/in_memory_storage.rb @@ -4,7 +4,7 @@ # want to do that are your own. The idea is to not write to disk # something that doesn't need to be there. If you have your theme # as a big hash already, leave it like that and save yourself some IO. -module ThemeCheck +module PlatformosCheck class InMemoryStorage < Storage attr_reader :root diff --git a/lib/theme_check/json_check.rb b/lib/platformos_check/json_check.rb similarity index 93% rename from lib/theme_check/json_check.rb rename to lib/platformos_check/json_check.rb index c965619e..4a3cabee 100644 --- a/lib/theme_check/json_check.rb +++ b/lib/platformos_check/json_check.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class JsonCheck < Check extend ChecksTracking diff --git a/lib/theme_check/json_file.rb b/lib/platformos_check/json_file.rb similarity index 97% rename from lib/theme_check/json_file.rb rename to lib/platformos_check/json_file.rb index c06bea74..28e5d7f5 100644 --- a/lib/theme_check/json_file.rb +++ b/lib/platformos_check/json_file.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "json" -module ThemeCheck +module PlatformosCheck class JsonFile < ThemeFile def initialize(relative_path, storage) super diff --git a/lib/theme_check/json_helpers.rb b/lib/platformos_check/json_helpers.rb similarity index 95% rename from lib/theme_check/json_helpers.rb rename to lib/platformos_check/json_helpers.rb index 5a1b2839..acb638d7 100644 --- a/lib/theme_check/json_helpers.rb +++ b/lib/platformos_check/json_helpers.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module JsonHelpers def format_json_parse_error(error) message = error.message[/\d+: (.+)$/, 1] || 'Invalid syntax' diff --git a/lib/theme_check/json_printer.rb b/lib/platformos_check/json_printer.rb similarity index 97% rename from lib/theme_check/json_printer.rb rename to lib/platformos_check/json_printer.rb index 36c4acc3..0d923f2f 100644 --- a/lib/theme_check/json_printer.rb +++ b/lib/platformos_check/json_printer.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'json' -module ThemeCheck +module PlatformosCheck class JsonPrinter def initialize(out_stream = STDOUT) @out = out_stream diff --git a/lib/theme_check/language_server.rb b/lib/platformos_check/language_server.rb similarity index 99% rename from lib/theme_check/language_server.rb rename to lib/platformos_check/language_server.rb index d1b905eb..b1e3ac8a 100644 --- a/lib/theme_check/language_server.rb +++ b/lib/platformos_check/language_server.rb @@ -56,7 +56,7 @@ require_relative "language_server/handler" -module ThemeCheck +module PlatformosCheck module LanguageServer def self.start Server.new(messenger: IOMessenger.new).listen diff --git a/lib/theme_check/language_server/bridge.rb b/lib/platformos_check/language_server/bridge.rb similarity index 96% rename from lib/theme_check/language_server/bridge.rb rename to lib/platformos_check/language_server/bridge.rb index e159921f..6a03dc9f 100644 --- a/lib/theme_check/language_server/bridge.rb +++ b/lib/platformos_check/language_server/bridge.rb @@ -19,7 +19,7 @@ # This enables us to have all the language server protocol logic # in here living independently of how we communicate with the # client (STDIO or websocket) -module ThemeCheck +module PlatformosCheck module LanguageServer class Bridge attr_writer :supports_work_done_progress @@ -43,14 +43,14 @@ def log(message) def read_message message_body = @messenger.read_message message_json = JSON.parse(message_body, symbolize_names: true) - @messenger.log(JSON.pretty_generate(message_json)) if ThemeCheck.debug? + @messenger.log(JSON.pretty_generate(message_json)) if PlatformosCheck.debug? message_json end def send_message(message_hash) message_hash[:jsonrpc] = '2.0' message_body = JSON.dump(message_hash) - @messenger.log(JSON.pretty_generate(message_hash)) if ThemeCheck.debug? + @messenger.log(JSON.pretty_generate(message_hash)) if PlatformosCheck.debug? @messenger.send_message(message_body) end diff --git a/lib/theme_check/language_server/channel.rb b/lib/platformos_check/language_server/channel.rb similarity index 98% rename from lib/theme_check/language_server/channel.rb rename to lib/platformos_check/language_server/channel.rb index 9e7e0331..8e06fd70 100644 --- a/lib/theme_check/language_server/channel.rb +++ b/lib/platformos_check/language_server/channel.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer # How you'd use this class: # diff --git a/lib/theme_check/language_server/client_capabilities.rb b/lib/platformos_check/language_server/client_capabilities.rb similarity index 96% rename from lib/theme_check/language_server/client_capabilities.rb rename to lib/platformos_check/language_server/client_capabilities.rb index 5ec788c5..0b042876 100644 --- a/lib/theme_check/language_server/client_capabilities.rb +++ b/lib/platformos_check/language_server/client_capabilities.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class ClientCapabilities def initialize(capabilities) diff --git a/lib/theme_check/language_server/code_action_engine.rb b/lib/platformos_check/language_server/code_action_engine.rb similarity index 97% rename from lib/theme_check/language_server/code_action_engine.rb rename to lib/platformos_check/language_server/code_action_engine.rb index 3a9f78f1..4b77704e 100644 --- a/lib/theme_check/language_server/code_action_engine.rb +++ b/lib/platformos_check/language_server/code_action_engine.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class CodeActionEngine include PositionHelper diff --git a/lib/theme_check/language_server/code_action_provider.rb b/lib/platformos_check/language_server/code_action_provider.rb similarity index 97% rename from lib/theme_check/language_server/code_action_provider.rb rename to lib/platformos_check/language_server/code_action_provider.rb index a9929dfa..68a6f982 100644 --- a/lib/theme_check/language_server/code_action_provider.rb +++ b/lib/platformos_check/language_server/code_action_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class CodeActionProvider class << self diff --git a/lib/theme_check/language_server/code_action_providers/quickfix_code_action_provider.rb b/lib/platformos_check/language_server/code_action_providers/quickfix_code_action_provider.rb similarity index 99% rename from lib/theme_check/language_server/code_action_providers/quickfix_code_action_provider.rb rename to lib/platformos_check/language_server/code_action_providers/quickfix_code_action_provider.rb index 96cc59d1..f02d405e 100644 --- a/lib/theme_check/language_server/code_action_providers/quickfix_code_action_provider.rb +++ b/lib/platformos_check/language_server/code_action_providers/quickfix_code_action_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class QuickfixCodeActionProvider < CodeActionProvider kind "quickfix" diff --git a/lib/theme_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb b/lib/platformos_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb similarity index 98% rename from lib/theme_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb rename to lib/platformos_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb index 40f34497..f429545f 100644 --- a/lib/theme_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb +++ b/lib/platformos_check/language_server/code_action_providers/source_fix_all_code_action_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class SourceFixAllCodeActionProvider < CodeActionProvider kind "source.fixAll" diff --git a/lib/theme_check/language_server/completion_context.rb b/lib/platformos_check/language_server/completion_context.rb similarity index 98% rename from lib/theme_check/language_server/completion_context.rb rename to lib/platformos_check/language_server/completion_context.rb index ef49e340..739f3fe6 100644 --- a/lib/theme_check/language_server/completion_context.rb +++ b/lib/platformos_check/language_server/completion_context.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class CompletionContext include PositionHelper diff --git a/lib/theme_check/language_server/completion_engine.rb b/lib/platformos_check/language_server/completion_engine.rb similarity index 97% rename from lib/theme_check/language_server/completion_engine.rb rename to lib/platformos_check/language_server/completion_engine.rb index 7c0a1e7d..dccbc66f 100644 --- a/lib/theme_check/language_server/completion_engine.rb +++ b/lib/platformos_check/language_server/completion_engine.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class CompletionEngine def initialize(storage, bridge = nil) diff --git a/lib/theme_check/language_server/completion_helper.rb b/lib/platformos_check/language_server/completion_helper.rb similarity index 96% rename from lib/theme_check/language_server/completion_helper.rb rename to lib/platformos_check/language_server/completion_helper.rb index aea05a77..3d3fd171 100644 --- a/lib/theme_check/language_server/completion_helper.rb +++ b/lib/platformos_check/language_server/completion_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module CompletionHelper WORD = /\w+/ diff --git a/lib/theme_check/language_server/completion_provider.rb b/lib/platformos_check/language_server/completion_provider.rb similarity index 97% rename from lib/theme_check/language_server/completion_provider.rb rename to lib/platformos_check/language_server/completion_provider.rb index 2e89a7ee..799a4eba 100644 --- a/lib/theme_check/language_server/completion_provider.rb +++ b/lib/platformos_check/language_server/completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class CompletionProvider include CompletionHelper diff --git a/lib/theme_check/language_server/completion_providers/assignments_completion_provider.rb b/lib/platformos_check/language_server/completion_providers/assignments_completion_provider.rb similarity index 98% rename from lib/theme_check/language_server/completion_providers/assignments_completion_provider.rb rename to lib/platformos_check/language_server/completion_providers/assignments_completion_provider.rb index a40acd9b..875d3a0d 100644 --- a/lib/theme_check/language_server/completion_providers/assignments_completion_provider.rb +++ b/lib/platformos_check/language_server/completion_providers/assignments_completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class AssignmentsCompletionProvider < CompletionProvider def completions(context) diff --git a/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb b/lib/platformos_check/language_server/completion_providers/filter_completion_provider.rb similarity index 99% rename from lib/theme_check/language_server/completion_providers/filter_completion_provider.rb rename to lib/platformos_check/language_server/completion_providers/filter_completion_provider.rb index ef549f9b..18d74b71 100644 --- a/lib/theme_check/language_server/completion_providers/filter_completion_provider.rb +++ b/lib/platformos_check/language_server/completion_providers/filter_completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class FilterCompletionProvider < CompletionProvider NAMED_FILTER = /#{Liquid::FilterSeparator}\s*(\w+)/o diff --git a/lib/theme_check/language_server/completion_providers/object_attribute_completion_provider.rb b/lib/platformos_check/language_server/completion_providers/object_attribute_completion_provider.rb similarity index 98% rename from lib/theme_check/language_server/completion_providers/object_attribute_completion_provider.rb rename to lib/platformos_check/language_server/completion_providers/object_attribute_completion_provider.rb index 57310703..1ab3dc4f 100644 --- a/lib/theme_check/language_server/completion_providers/object_attribute_completion_provider.rb +++ b/lib/platformos_check/language_server/completion_providers/object_attribute_completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class ObjectAttributeCompletionProvider < CompletionProvider def completions(context) diff --git a/lib/theme_check/language_server/completion_providers/object_completion_provider.rb b/lib/platformos_check/language_server/completion_providers/object_completion_provider.rb similarity index 97% rename from lib/theme_check/language_server/completion_providers/object_completion_provider.rb rename to lib/platformos_check/language_server/completion_providers/object_completion_provider.rb index 2041a657..c80a281a 100644 --- a/lib/theme_check/language_server/completion_providers/object_completion_provider.rb +++ b/lib/platformos_check/language_server/completion_providers/object_completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class ObjectCompletionProvider < CompletionProvider def completions(context) diff --git a/lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb b/lib/platformos_check/language_server/completion_providers/render_snippet_completion_provider.rb similarity index 98% rename from lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb rename to lib/platformos_check/language_server/completion_providers/render_snippet_completion_provider.rb index 0acfd9ef..839d9234 100644 --- a/lib/theme_check/language_server/completion_providers/render_snippet_completion_provider.rb +++ b/lib/platformos_check/language_server/completion_providers/render_snippet_completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class RenderSnippetCompletionProvider < CompletionProvider def completions(context) diff --git a/lib/theme_check/language_server/completion_providers/tag_completion_provider.rb b/lib/platformos_check/language_server/completion_providers/tag_completion_provider.rb similarity index 97% rename from lib/theme_check/language_server/completion_providers/tag_completion_provider.rb rename to lib/platformos_check/language_server/completion_providers/tag_completion_provider.rb index bdcb26ae..68ceb1ac 100644 --- a/lib/theme_check/language_server/completion_providers/tag_completion_provider.rb +++ b/lib/platformos_check/language_server/completion_providers/tag_completion_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class TagCompletionProvider < CompletionProvider def completions(context) diff --git a/lib/theme_check/language_server/configuration.rb b/lib/platformos_check/language_server/configuration.rb similarity index 99% rename from lib/theme_check/language_server/configuration.rb rename to lib/platformos_check/language_server/configuration.rb index b9ea3f74..4a35fa0e 100644 --- a/lib/theme_check/language_server/configuration.rb +++ b/lib/platformos_check/language_server/configuration.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class Configuration CHECK_ON_OPEN = :"themeCheck.checkOnOpen" diff --git a/lib/theme_check/language_server/constants.rb b/lib/platformos_check/language_server/constants.rb similarity index 97% rename from lib/theme_check/language_server/constants.rb rename to lib/platformos_check/language_server/constants.rb index 22277848..cd4b0ff4 100644 --- a/lib/theme_check/language_server/constants.rb +++ b/lib/platformos_check/language_server/constants.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer def self.partial_tag(tag) %r{ diff --git a/lib/theme_check/language_server/diagnostic.rb b/lib/platformos_check/language_server/diagnostic.rb similarity index 99% rename from lib/theme_check/language_server/diagnostic.rb rename to lib/platformos_check/language_server/diagnostic.rb index af7cbca6..c7d8348a 100644 --- a/lib/theme_check/language_server/diagnostic.rb +++ b/lib/platformos_check/language_server/diagnostic.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class Diagnostic include URIHelper diff --git a/lib/theme_check/language_server/diagnostics_engine.rb b/lib/platformos_check/language_server/diagnostics_engine.rb similarity index 90% rename from lib/theme_check/language_server/diagnostics_engine.rb rename to lib/platformos_check/language_server/diagnostics_engine.rb index adea90af..3aef142c 100644 --- a/lib/theme_check/language_server/diagnostics_engine.rb +++ b/lib/platformos_check/language_server/diagnostics_engine.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class DiagnosticsEngine include URIHelper @@ -21,13 +21,13 @@ def first_run? def analyze_and_send_offenses(absolute_path_or_paths, config, force: false, only_single_file: false) return unless @diagnostics_lock.try_lock - theme = ThemeCheck::Theme.new(storage) - analyzer = ThemeCheck::Analyzer.new(theme, config.enabled_checks) + theme = PlatformosCheck::Theme.new(storage) + analyzer = PlatformosCheck::Analyzer.new(theme, config.enabled_checks) if !only_single_file && (@diagnostics_manager.first_run? || force) - run_full_theme_check(analyzer) + run_full_platformos_check(analyzer) else - run_partial_theme_check(absolute_path_or_paths, theme, analyzer, only_single_file) + run_partial_platformos_check(absolute_path_or_paths, theme, analyzer, only_single_file) end @diagnostics_lock.unlock @@ -45,7 +45,7 @@ def clear_diagnostics(relative_paths) private - def run_full_theme_check(analyzer) + def run_full_platformos_check(analyzer) raise 'Unsafe operation' unless @diagnostics_lock.owned? token = @bridge.send_create_work_done_progress_request @@ -63,7 +63,7 @@ def run_full_theme_check(analyzer) send_diagnostics(offenses) end - def run_partial_theme_check(absolute_path_or_paths, theme, analyzer, only_single_file) + def run_partial_platformos_check(absolute_path_or_paths, theme, analyzer, only_single_file) raise 'Unsafe operation' unless @diagnostics_lock.owned? relative_paths = as_array(absolute_path_or_paths).map do |absolute_path| diff --git a/lib/theme_check/language_server/diagnostics_manager.rb b/lib/platformos_check/language_server/diagnostics_manager.rb similarity index 99% rename from lib/theme_check/language_server/diagnostics_manager.rb rename to lib/platformos_check/language_server/diagnostics_manager.rb index d4f0b544..6e390705 100644 --- a/lib/theme_check/language_server/diagnostics_manager.rb +++ b/lib/platformos_check/language_server/diagnostics_manager.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "logger" -module ThemeCheck +module PlatformosCheck module LanguageServer class DiagnosticsManager # The empty array is used in the protocol to mean that no diff --git a/lib/theme_check/language_server/document_change_corrector.rb b/lib/platformos_check/language_server/document_change_corrector.rb similarity index 98% rename from lib/theme_check/language_server/document_change_corrector.rb rename to lib/platformos_check/language_server/document_change_corrector.rb index bf961f9e..506a3ea1 100644 --- a/lib/theme_check/language_server/document_change_corrector.rb +++ b/lib/platformos_check/language_server/document_change_corrector.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class DocumentChangeCorrector include URIHelper @@ -169,7 +169,7 @@ def apply_json_file_edits def replace_entire_file(file, contents) text_document = to_text_document(file) - position = ThemeCheck::StrictPosition.new(file.source, file.source, 0) + position = PlatformosCheck::StrictPosition.new(file.source, file.source, 0) @text_document_edits[text_document] = { textDocument: text_document, edits: [{ @@ -241,7 +241,7 @@ def character_range_position(node, character_range) ) end - # @param node [ThemeCheck::Node] + # @param node [PlatformosCheck::Node] def range(node) { start: start_location(node), diff --git a/lib/theme_check/language_server/document_link_engine.rb b/lib/platformos_check/language_server/document_link_engine.rb similarity index 95% rename from lib/theme_check/language_server/document_link_engine.rb rename to lib/platformos_check/language_server/document_link_engine.rb index ad79d2cc..329435a7 100644 --- a/lib/theme_check/language_server/document_link_engine.rb +++ b/lib/platformos_check/language_server/document_link_engine.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class DocumentLinkEngine def initialize(storage) diff --git a/lib/theme_check/language_server/document_link_provider.rb b/lib/platformos_check/language_server/document_link_provider.rb similarity index 98% rename from lib/theme_check/language_server/document_link_provider.rb rename to lib/platformos_check/language_server/document_link_provider.rb index e685b875..7859b5d7 100644 --- a/lib/theme_check/language_server/document_link_provider.rb +++ b/lib/platformos_check/language_server/document_link_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class DocumentLinkProvider include RegexHelpers diff --git a/lib/theme_check/language_server/document_link_providers/asset_document_link_provider.rb b/lib/platformos_check/language_server/document_link_providers/asset_document_link_provider.rb similarity index 91% rename from lib/theme_check/language_server/document_link_providers/asset_document_link_provider.rb rename to lib/platformos_check/language_server/document_link_providers/asset_document_link_provider.rb index db4144b3..3288e5bd 100644 --- a/lib/theme_check/language_server/document_link_providers/asset_document_link_provider.rb +++ b/lib/platformos_check/language_server/document_link_providers/asset_document_link_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class AssetDocumentLinkProvider < DocumentLinkProvider @partial_regexp = ASSET_INCLUDE diff --git a/lib/theme_check/language_server/document_link_providers/include_document_link_provider.rb b/lib/platformos_check/language_server/document_link_providers/include_document_link_provider.rb similarity index 91% rename from lib/theme_check/language_server/document_link_providers/include_document_link_provider.rb rename to lib/platformos_check/language_server/document_link_providers/include_document_link_provider.rb index 2a540c9b..b0f2c267 100644 --- a/lib/theme_check/language_server/document_link_providers/include_document_link_provider.rb +++ b/lib/platformos_check/language_server/document_link_providers/include_document_link_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class IncludeDocumentLinkProvider < DocumentLinkProvider @partial_regexp = PARTIAL_INCLUDE diff --git a/lib/theme_check/language_server/document_link_providers/render_document_link_provider.rb b/lib/platformos_check/language_server/document_link_providers/render_document_link_provider.rb similarity index 91% rename from lib/theme_check/language_server/document_link_providers/render_document_link_provider.rb rename to lib/platformos_check/language_server/document_link_providers/render_document_link_provider.rb index 8024e423..2f8b4cf7 100644 --- a/lib/theme_check/language_server/document_link_providers/render_document_link_provider.rb +++ b/lib/platformos_check/language_server/document_link_providers/render_document_link_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class RenderDocumentLinkProvider < DocumentLinkProvider @partial_regexp = PARTIAL_RENDER diff --git a/lib/theme_check/language_server/document_link_providers/section_document_link_provider.rb b/lib/platformos_check/language_server/document_link_providers/section_document_link_provider.rb similarity index 91% rename from lib/theme_check/language_server/document_link_providers/section_document_link_provider.rb rename to lib/platformos_check/language_server/document_link_providers/section_document_link_provider.rb index 97c2964b..86d46b3a 100644 --- a/lib/theme_check/language_server/document_link_providers/section_document_link_provider.rb +++ b/lib/platformos_check/language_server/document_link_providers/section_document_link_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class SectionDocumentLinkProvider < DocumentLinkProvider @partial_regexp = PARTIAL_SECTION diff --git a/lib/theme_check/language_server/execute_command_engine.rb b/lib/platformos_check/language_server/execute_command_engine.rb similarity index 93% rename from lib/theme_check/language_server/execute_command_engine.rb rename to lib/platformos_check/language_server/execute_command_engine.rb index 316ca4c2..38e30c8e 100644 --- a/lib/theme_check/language_server/execute_command_engine.rb +++ b/lib/platformos_check/language_server/execute_command_engine.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class ExecuteCommandEngine def initialize diff --git a/lib/theme_check/language_server/execute_command_provider.rb b/lib/platformos_check/language_server/execute_command_provider.rb similarity index 95% rename from lib/theme_check/language_server/execute_command_provider.rb rename to lib/platformos_check/language_server/execute_command_provider.rb index 4d13e541..9b313340 100644 --- a/lib/theme_check/language_server/execute_command_provider.rb +++ b/lib/platformos_check/language_server/execute_command_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class ExecuteCommandProvider class << self diff --git a/lib/theme_check/language_server/execute_command_providers/correction_execute_command_provider.rb b/lib/platformos_check/language_server/execute_command_providers/correction_execute_command_provider.rb similarity index 98% rename from lib/theme_check/language_server/execute_command_providers/correction_execute_command_provider.rb rename to lib/platformos_check/language_server/execute_command_providers/correction_execute_command_provider.rb index 99139348..0dd72fd5 100644 --- a/lib/theme_check/language_server/execute_command_providers/correction_execute_command_provider.rb +++ b/lib/platformos_check/language_server/execute_command_providers/correction_execute_command_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class CorrectionExecuteCommandProvider < ExecuteCommandProvider include URIHelper diff --git a/lib/theme_check/language_server/execute_command_providers/run_checks_execute_command_provider.rb b/lib/platformos_check/language_server/execute_command_providers/run_checks_execute_command_provider.rb similarity index 97% rename from lib/theme_check/language_server/execute_command_providers/run_checks_execute_command_provider.rb rename to lib/platformos_check/language_server/execute_command_providers/run_checks_execute_command_provider.rb index f1321e9e..d547fb93 100644 --- a/lib/theme_check/language_server/execute_command_providers/run_checks_execute_command_provider.rb +++ b/lib/platformos_check/language_server/execute_command_providers/run_checks_execute_command_provider.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class RunChecksExecuteCommandProvider < ExecuteCommandProvider include URIHelper diff --git a/lib/theme_check/language_server/handler.rb b/lib/platformos_check/language_server/handler.rb similarity index 97% rename from lib/theme_check/language_server/handler.rb rename to lib/platformos_check/language_server/handler.rb index d604d219..998bf0b8 100644 --- a/lib/theme_check/language_server/handler.rb +++ b/lib/platformos_check/language_server/handler.rb @@ -2,14 +2,14 @@ require "benchmark" -module ThemeCheck +module PlatformosCheck module LanguageServer class Handler include URIHelper SERVER_INFO = { name: $PROGRAM_NAME, - version: ThemeCheck::VERSION, + version: PlatformosCheck::VERSION, } # https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#fileOperationFilter @@ -221,7 +221,7 @@ def in_memory_storage(root) config = config_for_path(root) # Make a real FS to get the files from the snippets folder - fs = ThemeCheck::FileSystemStorage.new( + fs = PlatformosCheck::FileSystemStorage.new( config.root, ignored_patterns: config.ignored_patterns ) @@ -270,8 +270,8 @@ def content_changes_text(params) def config_for_path(path_or_paths) path = path_or_paths.is_a?(Array) ? path_or_paths[0] : path_or_paths - root = ThemeCheck::Config.find(path) || @root_path - ThemeCheck::Config.from_path(root) + root = PlatformosCheck::Config.find(path) || @root_path + PlatformosCheck::Config.from_path(root) end def analyze_and_send_offenses(absolute_path_or_paths, only_single_file: nil) diff --git a/lib/theme_check/language_server/io_messenger.rb b/lib/platformos_check/language_server/io_messenger.rb similarity index 95% rename from lib/theme_check/language_server/io_messenger.rb rename to lib/platformos_check/language_server/io_messenger.rb index f6157cf1..4653f2e1 100644 --- a/lib/theme_check/language_server/io_messenger.rb +++ b/lib/platformos_check/language_server/io_messenger.rb @@ -1,11 +1,11 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class IOMessenger < Messenger def self.err_stream - if ThemeCheck.debug_log_file - File.open(ThemeCheck.debug_log_file, "w") + if PlatformosCheck.debug_log_file + File.open(PlatformosCheck.debug_log_file, "w") else STDERR end diff --git a/lib/theme_check/language_server/messenger.rb b/lib/platformos_check/language_server/messenger.rb similarity index 94% rename from lib/theme_check/language_server/messenger.rb rename to lib/platformos_check/language_server/messenger.rb index 826a814a..b9d635e7 100644 --- a/lib/theme_check/language_server/messenger.rb +++ b/lib/platformos_check/language_server/messenger.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer class Messenger def send_message diff --git a/lib/theme_check/language_server/protocol.rb b/lib/platformos_check/language_server/protocol.rb similarity index 97% rename from lib/theme_check/language_server/protocol.rb rename to lib/platformos_check/language_server/protocol.rb index 3de63bd5..a58e8613 100644 --- a/lib/theme_check/language_server/protocol.rb +++ b/lib/platformos_check/language_server/protocol.rb @@ -2,7 +2,7 @@ # Here we define the Language Server Protocol Constants we're using. # For complete docs, see the following: # https://microsoft.github.io/language-server-protocol/specifications/specification-current -module ThemeCheck +module PlatformosCheck module LanguageServer module CompletionItemKinds TEXT = 1 diff --git a/lib/theme_check/language_server/server.rb b/lib/platformos_check/language_server/server.rb similarity index 99% rename from lib/theme_check/language_server/server.rb rename to lib/platformos_check/language_server/server.rb index f66990bb..2826914c 100644 --- a/lib/theme_check/language_server/server.rb +++ b/lib/platformos_check/language_server/server.rb @@ -4,7 +4,7 @@ require 'stringio' require 'timeout' -module ThemeCheck +module PlatformosCheck module LanguageServer class DoneStreaming < StandardError; end diff --git a/lib/theme_check/language_server/tokens.rb b/lib/platformos_check/language_server/tokens.rb similarity index 98% rename from lib/theme_check/language_server/tokens.rb rename to lib/platformos_check/language_server/tokens.rb index 7e68f89d..b6700bb4 100644 --- a/lib/theme_check/language_server/tokens.rb +++ b/lib/platformos_check/language_server/tokens.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck Token = Struct.new( :content, :start, # inclusive diff --git a/lib/theme_check/language_server/type_helper.rb b/lib/platformos_check/language_server/type_helper.rb similarity index 94% rename from lib/theme_check/language_server/type_helper.rb rename to lib/platformos_check/language_server/type_helper.rb index 63c1f8c3..9583f75a 100644 --- a/lib/theme_check/language_server/type_helper.rb +++ b/lib/platformos_check/language_server/type_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module TypeHelper def input_type_of(literal) diff --git a/lib/theme_check/language_server/uri_helper.rb b/lib/platformos_check/language_server/uri_helper.rb similarity index 97% rename from lib/theme_check/language_server/uri_helper.rb rename to lib/platformos_check/language_server/uri_helper.rb index 856ad327..51ef9bee 100644 --- a/lib/theme_check/language_server/uri_helper.rb +++ b/lib/platformos_check/language_server/uri_helper.rb @@ -4,7 +4,7 @@ require "uri" require "cgi" -module ThemeCheck +module PlatformosCheck module LanguageServer module URIHelper # Will URI.encode a string the same way VS Code would. There are two things diff --git a/lib/theme_check/language_server/variable_lookup_finder.rb b/lib/platformos_check/language_server/variable_lookup_finder.rb similarity index 99% rename from lib/theme_check/language_server/variable_lookup_finder.rb rename to lib/platformos_check/language_server/variable_lookup_finder.rb index 44adb381..2ebca1ef 100644 --- a/lib/theme_check/language_server/variable_lookup_finder.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder.rb @@ -2,7 +2,7 @@ require 'ostruct' -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder include Constants diff --git a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder.rb b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder.rb similarity index 98% rename from lib/theme_check/language_server/variable_lookup_finder/assignments_finder.rb rename to lib/platformos_check/language_server/variable_lookup_finder/assignments_finder.rb index 5e5cb7db..b76aabb2 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class AssignmentsFinder diff --git a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/node_handler.rb b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/node_handler.rb similarity index 98% rename from lib/theme_check/language_server/variable_lookup_finder/assignments_finder/node_handler.rb rename to lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/node_handler.rb index bdeea289..8587dc26 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/node_handler.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/node_handler.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class AssignmentsFinder diff --git a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope.rb b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/scope.rb similarity index 98% rename from lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope.rb rename to lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/scope.rb index 3491d33a..2190b338 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/scope.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class AssignmentsFinder diff --git a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb similarity index 97% rename from lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb rename to lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb index c0111d21..277fc504 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/assignments_finder/scope_visitor.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class AssignmentsFinder diff --git a/lib/theme_check/language_server/variable_lookup_finder/constants.rb b/lib/platformos_check/language_server/variable_lookup_finder/constants.rb similarity index 98% rename from lib/theme_check/language_server/variable_lookup_finder/constants.rb rename to lib/platformos_check/language_server/variable_lookup_finder/constants.rb index 280f6e8e..a3162a46 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/constants.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/constants.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder module Constants diff --git a/lib/theme_check/language_server/variable_lookup_finder/liquid_fixer.rb b/lib/platformos_check/language_server/variable_lookup_finder/liquid_fixer.rb similarity index 99% rename from lib/theme_check/language_server/variable_lookup_finder/liquid_fixer.rb rename to lib/platformos_check/language_server/variable_lookup_finder/liquid_fixer.rb index 08e18e54..9179dff5 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/liquid_fixer.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/liquid_fixer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder ## diff --git a/lib/theme_check/language_server/variable_lookup_finder/potential_lookup.rb b/lib/platformos_check/language_server/variable_lookup_finder/potential_lookup.rb similarity index 88% rename from lib/theme_check/language_server/variable_lookup_finder/potential_lookup.rb rename to lib/platformos_check/language_server/variable_lookup_finder/potential_lookup.rb index e1e63d87..8095a2ed 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/potential_lookup.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/potential_lookup.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class PotentialLookup < Struct.new(:name, :lookups, :scope) diff --git a/lib/theme_check/language_server/variable_lookup_finder/tolerant_parser.rb b/lib/platformos_check/language_server/variable_lookup_finder/tolerant_parser.rb similarity index 99% rename from lib/theme_check/language_server/variable_lookup_finder/tolerant_parser.rb rename to lib/platformos_check/language_server/variable_lookup_finder/tolerant_parser.rb index 70633509..5dfe6448 100644 --- a/lib/theme_check/language_server/variable_lookup_finder/tolerant_parser.rb +++ b/lib/platformos_check/language_server/variable_lookup_finder/tolerant_parser.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder module TolerantParser diff --git a/lib/theme_check/language_server/variable_lookup_traverser.rb b/lib/platformos_check/language_server/variable_lookup_traverser.rb similarity index 98% rename from lib/theme_check/language_server/variable_lookup_traverser.rb rename to lib/platformos_check/language_server/variable_lookup_traverser.rb index 8f79939f..e94f94f8 100644 --- a/lib/theme_check/language_server/variable_lookup_traverser.rb +++ b/lib/platformos_check/language_server/variable_lookup_traverser.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupTraverser extend self diff --git a/lib/theme_check/language_server/versioned_in_memory_storage.rb b/lib/platformos_check/language_server/versioned_in_memory_storage.rb similarity index 98% rename from lib/theme_check/language_server/versioned_in_memory_storage.rb rename to lib/platformos_check/language_server/versioned_in_memory_storage.rb index a70d52b2..fb63a164 100644 --- a/lib/theme_check/language_server/versioned_in_memory_storage.rb +++ b/lib/platformos_check/language_server/versioned_in_memory_storage.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class VersionedInMemoryStorage < InMemoryStorage Version = Struct.new(:id, :version) diff --git a/lib/theme_check/liquid_check.rb b/lib/platformos_check/liquid_check.rb similarity index 87% rename from lib/theme_check/liquid_check.rb rename to lib/platformos_check/liquid_check.rb index 4ebd169b..d0652a3b 100644 --- a/lib/theme_check/liquid_check.rb +++ b/lib/platformos_check/liquid_check.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require_relative "parsing_helpers" -module ThemeCheck +module PlatformosCheck class LiquidCheck < Check extend ChecksTracking include ParsingHelpers diff --git a/lib/theme_check/liquid_file.rb b/lib/platformos_check/liquid_file.rb similarity index 96% rename from lib/theme_check/liquid_file.rb rename to lib/platformos_check/liquid_file.rb index 3efb2539..419316d8 100644 --- a/lib/theme_check/liquid_file.rb +++ b/lib/platformos_check/liquid_file.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class LiquidFile < ThemeFile def write content = rewriter.to_s @@ -35,7 +35,7 @@ def source_excerpt(line) original_lines = source.split("\n") original_lines[bounded(0, line - 1, original_lines.size - 1)].strip rescue => e - ThemeCheck.bug(<<~EOS) + PlatformosCheck.bug(<<~EOS) Exception while running `source_excerpt(#{line})`: ``` #{e.class}: #{e.message} diff --git a/lib/theme_check/liquid_node.rb b/lib/platformos_check/liquid_node.rb similarity index 99% rename from lib/theme_check/liquid_node.rb rename to lib/platformos_check/liquid_node.rb index d0dd4712..88a13ec8 100644 --- a/lib/theme_check/liquid_node.rb +++ b/lib/platformos_check/liquid_node.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck # A node from the Liquid AST, the result of parsing a liquid file. class LiquidNode < Node attr_reader :value, :parent, :theme_file @@ -185,7 +185,7 @@ def block? end def schema? - @value.is_a?(ThemeCheck::Tags::Schema) + @value.is_a?(PlatformosCheck::Tags::Schema) end # The `:under_score_name` of this type of node. Used to dispatch to the `on_` diff --git a/lib/theme_check/liquid_visitor.rb b/lib/platformos_check/liquid_visitor.rb similarity index 97% rename from lib/theme_check/liquid_visitor.rb rename to lib/platformos_check/liquid_visitor.rb index e158e315..042974a5 100644 --- a/lib/theme_check/liquid_visitor.rb +++ b/lib/platformos_check/liquid_visitor.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class LiquidVisitor attr_reader :checks diff --git a/lib/theme_check/locale_diff.rb b/lib/platformos_check/locale_diff.rb similarity index 99% rename from lib/theme_check/locale_diff.rb rename to lib/platformos_check/locale_diff.rb index 22b97dc3..0260404e 100644 --- a/lib/theme_check/locale_diff.rb +++ b/lib/platformos_check/locale_diff.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class LocaleDiff PLURALIZATION_KEYS = Set.new(["zero", "one", "two", "few", "many", "other"]) diff --git a/lib/theme_check/node.rb b/lib/platformos_check/node.rb similarity index 97% rename from lib/theme_check/node.rb rename to lib/platformos_check/node.rb index ef8a11db..325d3303 100644 --- a/lib/theme_check/node.rb +++ b/lib/platformos_check/node.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Node def parent raise NotImplementedError diff --git a/lib/theme_check/offense.rb b/lib/platformos_check/offense.rb similarity index 97% rename from lib/theme_check/offense.rb rename to lib/platformos_check/offense.rb index 2cc247af..c328826b 100644 --- a/lib/theme_check/offense.rb +++ b/lib/platformos_check/offense.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Offense include PositionHelper @@ -8,7 +8,7 @@ class Offense attr_reader :check, :message, :theme_file, :node, :markup, :line_number, :correction def initialize( - check:, # instance of a ThemeCheck::Check + check:, # instance of a PlatformosCheck::Check message: nil, # error message for the offense theme_file: nil, # ThemeFile node: nil, # Node @@ -149,7 +149,7 @@ def correct(corrector = nil) correction.call(corrector) end rescue => e - ThemeCheck.bug(<<~EOS) + PlatformosCheck.bug(<<~EOS) Exception while running `Offense#correct`: ``` #{e.class}: #{e.message} diff --git a/lib/theme_check/packager.rb b/lib/platformos_check/packager.rb similarity index 75% rename from lib/theme_check/packager.rb rename to lib/platformos_check/packager.rb index 4596e39c..e5247057 100644 --- a/lib/theme_check/packager.rb +++ b/lib/platformos_check/packager.rb @@ -1,9 +1,9 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Packager ROOT = File.expand_path('../../..', __FILE__) PACKAGING_DIR = File.join(ROOT, 'packaging') - BUILDS_DIR = File.join(PACKAGING_DIR, 'builds', ThemeCheck::VERSION) + BUILDS_DIR = File.join(PACKAGING_DIR, 'builds', PlatformosCheck::VERSION) def initialize FileUtils.mkdir_p(BUILDS_DIR) @@ -18,18 +18,18 @@ def build_homebrew puts "Generating formula..." File.delete(build_path) if File.exist?(build_path) - spec_contents = File.read(File.join(root_dir, 'theme_check.base.rb')) - spec_contents = spec_contents.gsub('THEME_CHECK_VERSION', ThemeCheck::VERSION) + spec_contents = File.read(File.join(root_dir, 'platformos_check.base.rb')) + spec_contents = spec_contents.gsub('PLATFORMOS_CHECK_VERSION', PlatformosCheck::VERSION) puts "Grabbing sha256 checksum from Rubygems.org" require 'digest/sha2' require 'open-uri' - gem_checksum = URI.open("https://rubygems.org/downloads/theme-check-#{ThemeCheck::VERSION}.gem") do |io| + gem_checksum = URI.open("https://rubygems.org/downloads/theme-check-#{PlatformosCheck::VERSION}.gem") do |io| Digest::SHA256.new.hexdigest(io.read) end puts "Got sha256 checksum for gem: #{gem_checksum}" - spec_contents = spec_contents.gsub('THEME_CHECK_GEM_CHECKSUM', gem_checksum) + spec_contents = spec_contents.gsub('PLATFORMOS_CHECK_GEM_CHECKSUM', gem_checksum) puts "Writing generated formula\n To: #{build_path}\n\n" File.write(build_path, spec_contents) diff --git a/lib/theme_check/parsing_helpers.rb b/lib/platformos_check/parsing_helpers.rb similarity index 96% rename from lib/theme_check/parsing_helpers.rb rename to lib/platformos_check/parsing_helpers.rb index 0e53da40..f9da7911 100644 --- a/lib/theme_check/parsing_helpers.rb +++ b/lib/platformos_check/parsing_helpers.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ParsingHelpers # Yield each chunk outside of "...", '...' def outside_of_strings(markup) diff --git a/lib/theme_check/position.rb b/lib/platformos_check/position.rb similarity index 99% rename from lib/theme_check/position.rb rename to lib/platformos_check/position.rb index edc17ffc..0cfd7975 100644 --- a/lib/theme_check/position.rb +++ b/lib/platformos_check/position.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Position include PositionHelper diff --git a/lib/theme_check/position_helper.rb b/lib/platformos_check/position_helper.rb similarity index 98% rename from lib/theme_check/position_helper.rb rename to lib/platformos_check/position_helper.rb index cf1075c1..19204508 100644 --- a/lib/theme_check/position_helper.rb +++ b/lib/platformos_check/position_helper.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true # Note: Everything is 0-indexed here. -module ThemeCheck +module PlatformosCheck module PositionHelper # Apparently this old implementation is 2x slower (with benchmark/ips), # so dropping with the following one... It's ugly af but diff --git a/lib/theme_check/printer.rb b/lib/platformos_check/printer.rb similarity index 98% rename from lib/theme_check/printer.rb rename to lib/platformos_check/printer.rb index 43cbc930..e5834ed8 100644 --- a/lib/theme_check/printer.rb +++ b/lib/platformos_check/printer.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Printer def initialize(out_stream = STDOUT) @out = out_stream diff --git a/lib/theme_check/regex_helpers.rb b/lib/platformos_check/regex_helpers.rb similarity index 96% rename from lib/theme_check/regex_helpers.rb rename to lib/platformos_check/regex_helpers.rb index a65848fb..ec37f68d 100644 --- a/lib/theme_check/regex_helpers.rb +++ b/lib/platformos_check/regex_helpers.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module RegexHelpers LIQUID_TAG = /#{Liquid::TagStart}.*?#{Liquid::TagEnd}/om LIQUID_VARIABLE = /#{Liquid::VariableStart}.*?#{Liquid::VariableEnd}/om diff --git a/lib/theme_check/releaser.rb b/lib/platformos_check/releaser.rb similarity index 71% rename from lib/theme_check/releaser.rb rename to lib/platformos_check/releaser.rb index ce0ee2d8..eacfe988 100644 --- a/lib/theme_check/releaser.rb +++ b/lib/platformos_check/releaser.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true -require 'theme_check/version' +require 'platformos_check/version' -module ThemeCheck +module PlatformosCheck class Releaser ROOT = File.expand_path('../../..', __FILE__) LIB = File.join(ROOT, 'lib') @@ -17,9 +17,9 @@ def release(version) end def update_version(version) - version_file_path = File.join(LIB, 'theme_check/version.rb') + version_file_path = File.join(LIB, 'platformos_check/version.rb') version_file = File.read(version_file_path) - updated_version_file = version_file.gsub(ThemeCheck::VERSION, version) + updated_version_file = version_file.gsub(PlatformosCheck::VERSION, version) return if updated_version_file == version_file puts "Updating version to #{version} in #{version_file_path}." @@ -29,9 +29,9 @@ def update_version(version) def update_docs(version) Dir[ROOT + '/docs/checks/*.md'].each do |filename| doc_content = File.read(filename) - updated_doc_content = doc_content.gsub('THEME_CHECK_VERSION', version) + updated_doc_content = doc_content.gsub('PLATFORMOS_CHECK_VERSION', version) next if updated_doc_content == doc_content - puts "Replacing `THEME_CHECK_VERSION` with #{version} in #{Pathname.new(filename).relative_path_from(ROOT)}" + puts "Replacing `PLATFORMOS_CHECK_VERSION` with #{version} in #{Pathname.new(filename).relative_path_from(ROOT)}" File.write(filename, updated_doc_content) end end diff --git a/lib/theme_check/remote_asset_file.rb b/lib/platformos_check/remote_asset_file.rb similarity index 98% rename from lib/theme_check/remote_asset_file.rb rename to lib/platformos_check/remote_asset_file.rb index af2e6a7a..4b88180e 100644 --- a/lib/theme_check/remote_asset_file.rb +++ b/lib/platformos_check/remote_asset_file.rb @@ -2,7 +2,7 @@ require "net/http" require "pathname" -module ThemeCheck +module PlatformosCheck class RemoteAssetFile class << self def cache diff --git a/lib/theme_check/schema_helper.rb b/lib/platformos_check/schema_helper.rb similarity index 98% rename from lib/theme_check/schema_helper.rb rename to lib/platformos_check/schema_helper.rb index f2d90db9..f2885b9b 100644 --- a/lib/theme_check/schema_helper.rb +++ b/lib/platformos_check/schema_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class SchemaHelper # Deeply sets a value in a hash. Accepts both arrays and strings for path. def self.set(hash, path, value) diff --git a/lib/theme_check/shopify_liquid.rb b/lib/platformos_check/shopify_liquid.rb similarity index 100% rename from lib/theme_check/shopify_liquid.rb rename to lib/platformos_check/shopify_liquid.rb diff --git a/lib/theme_check/shopify_liquid/deprecated_filter.rb b/lib/platformos_check/shopify_liquid/deprecated_filter.rb similarity index 95% rename from lib/theme_check/shopify_liquid/deprecated_filter.rb rename to lib/platformos_check/shopify_liquid/deprecated_filter.rb index c45b0bd6..0ff6e4c8 100644 --- a/lib/theme_check/shopify_liquid/deprecated_filter.rb +++ b/lib/platformos_check/shopify_liquid/deprecated_filter.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'yaml' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid module DeprecatedFilter extend self diff --git a/lib/theme_check/shopify_liquid/documentation.rb b/lib/platformos_check/shopify_liquid/documentation.rb similarity index 97% rename from lib/theme_check/shopify_liquid/documentation.rb rename to lib/platformos_check/shopify_liquid/documentation.rb index af9e3be8..fe6e2f46 100644 --- a/lib/theme_check/shopify_liquid/documentation.rb +++ b/lib/platformos_check/shopify_liquid/documentation.rb @@ -2,7 +2,7 @@ require_relative 'documentation/markdown_template' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class Documentation class << self diff --git a/lib/theme_check/shopify_liquid/documentation/markdown_template.rb b/lib/platformos_check/shopify_liquid/documentation/markdown_template.rb similarity index 98% rename from lib/theme_check/shopify_liquid/documentation/markdown_template.rb rename to lib/platformos_check/shopify_liquid/documentation/markdown_template.rb index 90462a4c..5d050545 100644 --- a/lib/theme_check/shopify_liquid/documentation/markdown_template.rb +++ b/lib/platformos_check/shopify_liquid/documentation/markdown_template.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class Documentation class MarkdownTemplate diff --git a/lib/theme_check/shopify_liquid/filter.rb b/lib/platformos_check/shopify_liquid/filter.rb similarity index 97% rename from lib/theme_check/shopify_liquid/filter.rb rename to lib/platformos_check/shopify_liquid/filter.rb index eb4e5a19..5b2e2142 100644 --- a/lib/theme_check/shopify_liquid/filter.rb +++ b/lib/platformos_check/shopify_liquid/filter.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'yaml' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid module Filter extend self diff --git a/lib/theme_check/shopify_liquid/object.rb b/lib/platformos_check/shopify_liquid/object.rb similarity index 95% rename from lib/theme_check/shopify_liquid/object.rb rename to lib/platformos_check/shopify_liquid/object.rb index a783f8ff..bef119b8 100644 --- a/lib/theme_check/shopify_liquid/object.rb +++ b/lib/platformos_check/shopify_liquid/object.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'yaml' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid module Object extend self diff --git a/lib/theme_check/shopify_liquid/source_index.rb b/lib/platformos_check/shopify_liquid/source_index.rb similarity index 98% rename from lib/theme_check/shopify_liquid/source_index.rb rename to lib/platformos_check/shopify_liquid/source_index.rb index cc1cad96..719ba303 100644 --- a/lib/theme_check/shopify_liquid/source_index.rb +++ b/lib/platformos_check/shopify_liquid/source_index.rb @@ -3,7 +3,7 @@ require 'json' require 'pathname' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class << self diff --git a/lib/theme_check/shopify_liquid/source_index/base_entry.rb b/lib/platformos_check/shopify_liquid/source_index/base_entry.rb similarity index 98% rename from lib/theme_check/shopify_liquid/source_index/base_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/base_entry.rb index 7b04eec7..178a6515 100644 --- a/lib/theme_check/shopify_liquid/source_index/base_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/base_entry.rb @@ -2,7 +2,7 @@ require "forwardable" -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/base_state.rb b/lib/platformos_check/shopify_liquid/source_index/base_state.rb similarity index 94% rename from lib/theme_check/shopify_liquid/source_index/base_state.rb rename to lib/platformos_check/shopify_liquid/source_index/base_state.rb index e9a53899..9ef595ca 100644 --- a/lib/theme_check/shopify_liquid/source_index/base_state.rb +++ b/lib/platformos_check/shopify_liquid/source_index/base_state.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class BaseState diff --git a/lib/theme_check/shopify_liquid/source_index/filter_entry.rb b/lib/platformos_check/shopify_liquid/source_index/filter_entry.rb similarity index 95% rename from lib/theme_check/shopify_liquid/source_index/filter_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/filter_entry.rb index 263ed4f4..93956f91 100644 --- a/lib/theme_check/shopify_liquid/source_index/filter_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/filter_entry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class FilterEntry < BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/filter_state.rb b/lib/platformos_check/shopify_liquid/source_index/filter_state.rb similarity index 87% rename from lib/theme_check/shopify_liquid/source_index/filter_state.rb rename to lib/platformos_check/shopify_liquid/source_index/filter_state.rb index 7d9b5857..cb6a550d 100644 --- a/lib/theme_check/shopify_liquid/source_index/filter_state.rb +++ b/lib/platformos_check/shopify_liquid/source_index/filter_state.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class FilterState < BaseState diff --git a/lib/theme_check/shopify_liquid/source_index/object_entry.rb b/lib/platformos_check/shopify_liquid/source_index/object_entry.rb similarity index 94% rename from lib/theme_check/shopify_liquid/source_index/object_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/object_entry.rb index 6e7bb052..fc493980 100644 --- a/lib/theme_check/shopify_liquid/source_index/object_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/object_entry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ObjectEntry < BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/object_state.rb b/lib/platformos_check/shopify_liquid/source_index/object_state.rb similarity index 87% rename from lib/theme_check/shopify_liquid/source_index/object_state.rb rename to lib/platformos_check/shopify_liquid/source_index/object_state.rb index 1d57cd92..19406d53 100644 --- a/lib/theme_check/shopify_liquid/source_index/object_state.rb +++ b/lib/platformos_check/shopify_liquid/source_index/object_state.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ObjectState < BaseState diff --git a/lib/theme_check/shopify_liquid/source_index/parameter_entry.rb b/lib/platformos_check/shopify_liquid/source_index/parameter_entry.rb similarity index 94% rename from lib/theme_check/shopify_liquid/source_index/parameter_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/parameter_entry.rb index df913504..db158784 100644 --- a/lib/theme_check/shopify_liquid/source_index/parameter_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/parameter_entry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ParameterEntry < BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/property_entry.rb b/lib/platformos_check/shopify_liquid/source_index/property_entry.rb similarity index 95% rename from lib/theme_check/shopify_liquid/source_index/property_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/property_entry.rb index b2a08dbd..21f927ca 100644 --- a/lib/theme_check/shopify_liquid/source_index/property_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/property_entry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class PropertyEntry < BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/return_type_entry.rb b/lib/platformos_check/shopify_liquid/source_index/return_type_entry.rb similarity index 96% rename from lib/theme_check/shopify_liquid/source_index/return_type_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/return_type_entry.rb index 53713351..3056e925 100644 --- a/lib/theme_check/shopify_liquid/source_index/return_type_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/return_type_entry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ReturnTypeEntry < BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/tag_entry.rb b/lib/platformos_check/shopify_liquid/source_index/tag_entry.rb similarity index 95% rename from lib/theme_check/shopify_liquid/source_index/tag_entry.rb rename to lib/platformos_check/shopify_liquid/source_index/tag_entry.rb index 26d29812..49c347dd 100644 --- a/lib/theme_check/shopify_liquid/source_index/tag_entry.rb +++ b/lib/platformos_check/shopify_liquid/source_index/tag_entry.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class TagEntry < BaseEntry diff --git a/lib/theme_check/shopify_liquid/source_index/tag_state.rb b/lib/platformos_check/shopify_liquid/source_index/tag_state.rb similarity index 87% rename from lib/theme_check/shopify_liquid/source_index/tag_state.rb rename to lib/platformos_check/shopify_liquid/source_index/tag_state.rb index 4cdd0912..baa0e529 100644 --- a/lib/theme_check/shopify_liquid/source_index/tag_state.rb +++ b/lib/platformos_check/shopify_liquid/source_index/tag_state.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class TagState < BaseState diff --git a/lib/theme_check/shopify_liquid/source_manager.rb b/lib/platformos_check/shopify_liquid/source_manager.rb similarity index 99% rename from lib/theme_check/shopify_liquid/source_manager.rb rename to lib/platformos_check/shopify_liquid/source_manager.rb index 31fd0e16..366bdb08 100644 --- a/lib/theme_check/shopify_liquid/source_manager.rb +++ b/lib/platformos_check/shopify_liquid/source_manager.rb @@ -4,7 +4,7 @@ require 'pathname' require 'tmpdir' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceManager REQUIRED_FILE_NAMES = [:filters, :objects, :tags, :latest].freeze diff --git a/lib/theme_check/shopify_liquid/system_translations.rb b/lib/platformos_check/shopify_liquid/system_translations.rb similarity index 97% rename from lib/theme_check/shopify_liquid/system_translations.rb rename to lib/platformos_check/shopify_liquid/system_translations.rb index aee3d8dd..14f3ae36 100644 --- a/lib/theme_check/shopify_liquid/system_translations.rb +++ b/lib/platformos_check/shopify_liquid/system_translations.rb @@ -1,5 +1,5 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid module SystemTranslations extend self diff --git a/lib/theme_check/shopify_liquid/tag.rb b/lib/platformos_check/shopify_liquid/tag.rb similarity index 98% rename from lib/theme_check/shopify_liquid/tag.rb rename to lib/platformos_check/shopify_liquid/tag.rb index 7e06d142..8f6bcd48 100644 --- a/lib/theme_check/shopify_liquid/tag.rb +++ b/lib/platformos_check/shopify_liquid/tag.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require 'yaml' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid module Tag extend self diff --git a/lib/theme_check/storage.rb b/lib/platformos_check/storage.rb similarity index 94% rename from lib/theme_check/storage.rb rename to lib/platformos_check/storage.rb index 77010d2b..26c72648 100644 --- a/lib/theme_check/storage.rb +++ b/lib/platformos_check/storage.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class Storage def path(relative_path) raise NotImplementedError diff --git a/lib/theme_check/string_helpers.rb b/lib/platformos_check/string_helpers.rb similarity index 98% rename from lib/theme_check/string_helpers.rb rename to lib/platformos_check/string_helpers.rb index 2b33fa7b..12194b97 100644 --- a/lib/theme_check/string_helpers.rb +++ b/lib/platformos_check/string_helpers.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module StringHelpers extend self diff --git a/lib/theme_check/tags.rb b/lib/platformos_check/tags.rb similarity index 50% rename from lib/theme_check/tags.rb rename to lib/platformos_check/tags.rb index b0a8be14..80e832ab 100644 --- a/lib/theme_check/tags.rb +++ b/lib/platformos_check/tags.rb @@ -1,7 +1,61 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module Tags + class Base < Liquid::Tag + SYNTAX = /(#{Liquid::QuotedFragment}+)(\s*(#{Liquid::QuotedFragment}+))?/o + # this is Liquid::TagAttributes with the beginnig changed from \w+ to [\w-] to allow for + # attributes like html-id: 10, which was identified as id: 10, but should be html-id: 10. + # In other words - allow hyphens in key names. + TAG_ATTRIBUTES = /([\w-]+)\s*:\s*((?-mix:(?-mix:"[^"]*"|'[^']*')|(?:[^\s,|'"]|(?-mix:"[^"]*"|'[^']*'))+))/ + BACKWARDS_COMPATIBILITY_KEYS = %w[method].freeze + + def initialize(tag_name, markup, parse_context) + super + parse_markup(tag_name, markup) + end + + protected + + def parse_markup(tag_name, markup) + @remaining_markup = markup + + parse_main_value(tag_name, markup) + parse_attributes(@remaining_markup) + end + + def parse_main_value(tag_name, markup) + raise Liquid::SyntaxError, "Invalid syntax for #{tag_name} tag" unless markup =~ syntax + + @main_value = Regexp.last_match(1) + @remaining_markup = markup[Regexp.last_match.end(1)..-1] if @main_value + + @value_expr = @main_value ? Liquid::Expression.parse(@main_value) : nil + end + + def parse_attributes(markup) + @attributes_expr = {} + + markup.scan(TAG_ATTRIBUTES) do |key, value| + unless well_formed_object_access?(value) + raise Liquid::SyntaxError, + 'Invalid syntax for function tag, no spaces allowed when accessing array or hash.' + end + + @attributes_expr[key] = Liquid::Expression.parse(value) + end + end + + def well_formed_object_access?(representation) + return false if /\[\z/.match?(representation.to_s) + + true + end + + def syntax + SYNTAX + end + end # Copied tags parsing code from storefront-renderer class Section < Liquid::Tag @@ -50,12 +104,12 @@ class Form < Liquid::Block # old format: form product # new format: form "product", product, id: "newID", class: "custom-class", data-example: "100" FORM_FORMAT = %r{ - (?#{Liquid::QuotedFragment}) - (?:\s*,\s*(?#{Liquid::VariableSignature}+)(?!:))? + (?#{Liquid::QuotedFragment}) + (?:\s*,\s*(?#{Liquid::VariableSignature}+)(?!:))? (?(?:\s*,\s*(?:#{TAG_ATTRIBUTES}))*)\s*\Z - }xo + }xo - attr_reader :type_expr, :variable_name_expr, :tag_attributes + attr_reader :type_expr, :variable_name_expr, :tag_attributes def initialize(tag_name, markup, options) super @@ -129,10 +183,10 @@ def initialize(tag_name, markup, tokens) ) unless match layout_markup = match[:layout] @layout_expr = if NO_LAYOUT_KEYS.include?(layout_markup.downcase) - false - else - parse_expression(layout_markup) - end + false + else + parse_expression(layout_markup) + end end class ParseTreeVisitor < Liquid::ParseTreeVisitor @@ -144,58 +198,114 @@ def children class Render < Liquid::Tag SYNTAX = %r{ - ( - ## for {% render "snippet" %} + ( + ## for {% render "snippet" %} #{Liquid::QuotedString}+ | - ## for {% render block %} - ## We require the variable # segment to be at the beginning of the - ## string (with \A). This is to prevent code like {% render !foo! %} - ## from parsing - \A#{Liquid::VariableSegment}+ - ) - ## for {% render "snippet" with product as p %} - ## or {% render "snippet" for products p %} - (\s+(with|#{Liquid::Render::FOR})\s+(#{Liquid::QuotedFragment}+))? - (\s+(?:as)\s+(#{Liquid::VariableSegment}+))? - ## variables passed into the tag (e.g. {% render "snippet", var1: value1, var2: value2 %} - ## are not matched by this regex and are handled by Liquid::Render.initialize - }xo - - disable_tags "include" - - attr_reader :template_name_expr, :variable_name_expr, :attributes - - def initialize(tag_name, markup, options) - super + ## for {% render block %} + ## We require the variable # segment to be at the beginning of the + ## string (with \A). This is to prevent code like {% render !foo! %} + ## from parsing + \A#{Liquid::VariableSegment}+ + ) + ## for {% render "snippet" with product as p %} + ## or {% render "snippet" for products p %} + (\s+(with|#{Liquid::Render::FOR})\s+(#{Liquid::QuotedFragment}+))? + (\s+(?:as)\s+(#{Liquid::VariableSegment}+))? + ## variables passed into the tag (e.g. {% render "snippet", var1: value1, var2: value2 %} + ## are not matched by this regex and are handled by Liquid::Render.initialize +}xo + +disable_tags "include" + +attr_reader :template_name_expr, :variable_name_expr, :attributes + +def initialize(tag_name, markup, options) + super + + raise Liquid::SyntaxError, options[:locale].t("errors.syntax.render") unless markup =~ SYNTAX + + template_name = Regexp.last_match(1) + with_or_for = Regexp.last_match(3) + variable_name = Regexp.last_match(4) + + @alias_name = Regexp.last_match(6) + @variable_name_expr = variable_name ? parse_expression(variable_name) : nil + @template_name_expr = parse_expression(template_name) + @for = (with_or_for == Liquid::Render::FOR) + + @attributes = {} + markup.scan(Liquid::TagAttributes) do |key, value| + @attributes[key] = parse_expression(value) + end +end - raise Liquid::SyntaxError, options[:locale].t("errors.syntax.render") unless markup =~ SYNTAX +class ParseTreeVisitor < Liquid::ParseTreeVisitor + def children + [ + @node.template_name_expr, + @node.variable_name_expr, + ] + @node.attributes.values + end +end + end - template_name = Regexp.last_match(1) - with_or_for = Regexp.last_match(3) - variable_name = Regexp.last_match(4) + class Style < Liquid::Block; end - @alias_name = Regexp.last_match(6) - @variable_name_expr = variable_name ? parse_expression(variable_name) : nil - @template_name_expr = parse_expression(template_name) - @for = (with_or_for == Liquid::Render::FOR) + class Background < Base + PARTIAL_SYNTAX = /(#{Liquid::VariableSignature}+)\s*=\s*(.*)\s*/om + CLOSE_TAG_SYNTAX = /\A(.*)(?-mix:\{%-?)\s*(\w+)\s*(.*)?(?-mix:%\})\z/m # based on Liquid::Raw::FullTokenPossiblyInvalid - @attributes = {} - markup.scan(Liquid::TagAttributes) do |key, value| - @attributes[key] = parse_expression(value) + def initialize(tag_name, markup, options) + if markup =~ PARTIAL_SYNTAX + super + @to = Regexp.last_match(1) + @partial_syntax = true + + after_assign_markup = Regexp.last_match(2).split('|') + parse_markup(tag_name, after_assign_markup.shift) + after_assign_markup.unshift(@to) + @from = Liquid::Variable.new(after_assign_markup.join('|'), options) + else + @partial_syntax = false + parse_markup(tag_name, markup) + super end end - class ParseTreeVisitor < Liquid::ParseTreeVisitor - def children - [ - @node.template_name_expr, - @node.variable_name_expr, - ] + @node.attributes.values + def parse(tokens) + return super if @partial_syntax + + @body = +'' + while (token = tokens.send(:shift)) + if token =~ CLOSE_TAG_SYNTAX && block_delimiter == Regexp.last_match(2) + @body << Regexp.last_match(1) if Regexp.last_match(1) != '' + return + end + @body << token unless token.empty? end + + raise Liquid::SyntaxError, parse_context.locale.t('errors.syntax.tag_never_closed', block_name:) + end + + def block_name + @tag_name + end + + def block_delimiter + @block_delimiter = "end#{block_name}" + end + + def parse_main_value(tag_name, markup) + raise Liquid::SyntaxError, "Invalid syntax for #{tag_name} tag" unless markup =~ syntax + + @main_value = Regexp.last_match(1) + @value_expr = @main_value ? Liquid::Expression.parse(@main_value) : nil end end - class Style < Liquid::Block; end + class Function < Liquid::Tag; end + + class Log < Liquid::Tag; end class Schema < Liquid::Raw; end @@ -224,6 +334,9 @@ def register_tags! register_tag('section', Section) register_tag('sections', Sections) register_tag('style', Style) + register_tag('log', Log) + register_tag('background', Background) + register_tag('function', Function) register_tag('schema', Schema) register_tag('javascript', Javascript) register_tag('stylesheet', Stylesheet) @@ -231,4 +344,5 @@ def register_tags! end self.register_tags = true end + end diff --git a/lib/theme_check/theme.rb b/lib/platformos_check/theme.rb similarity index 98% rename from lib/theme_check/theme.rb rename to lib/platformos_check/theme.rb index fc5e4503..78c446d8 100644 --- a/lib/theme_check/theme.rb +++ b/lib/platformos_check/theme.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "pathname" -module ThemeCheck +module PlatformosCheck class Theme DEFAULT_LOCALE_REGEXP = %r{locales/(.*)\.default$} LIQUID_REGEX = /\.liquid$/i diff --git a/lib/theme_check/theme_file.rb b/lib/platformos_check/theme_file.rb similarity index 98% rename from lib/theme_check/theme_file.rb rename to lib/platformos_check/theme_file.rb index eabc8572..0c7aecb1 100644 --- a/lib/theme_check/theme_file.rb +++ b/lib/platformos_check/theme_file.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "pathname" -module ThemeCheck +module PlatformosCheck class ThemeFile attr_reader :version, :storage diff --git a/lib/theme_check/theme_file_rewriter.rb b/lib/platformos_check/theme_file_rewriter.rb similarity index 98% rename from lib/theme_check/theme_file_rewriter.rb rename to lib/platformos_check/theme_file_rewriter.rb index 986aea06..beddc2b6 100644 --- a/lib/theme_check/theme_file_rewriter.rb +++ b/lib/platformos_check/theme_file_rewriter.rb @@ -2,7 +2,7 @@ require 'parser' -module ThemeCheck +module PlatformosCheck class ThemeFileRewriter def initialize(name, source) @buffer = Parser::Source::Buffer.new(name, source: source) diff --git a/lib/theme_check/version.rb b/lib/platformos_check/version.rb similarity index 70% rename from lib/theme_check/version.rb rename to lib/platformos_check/version.rb index 1dc43c2d..4586a4d4 100644 --- a/lib/theme_check/version.rb +++ b/lib/platformos_check/version.rb @@ -1,4 +1,4 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck VERSION = "1.15.0" end diff --git a/lib/theme_check.rb b/lib/theme_check.rb deleted file mode 100644 index 9f24fbc1..00000000 --- a/lib/theme_check.rb +++ /dev/null @@ -1,74 +0,0 @@ -# frozen_string_literal: true -require "liquid" - -require_relative "theme_check/version" -require_relative "theme_check/bug" -require_relative "theme_check/exceptions" -require_relative "theme_check/schema_helper" -require_relative "theme_check/theme_file_rewriter" -require_relative "theme_check/theme_file" -require_relative "theme_check/liquid_file" -require_relative "theme_check/asset_file" -require_relative "theme_check/json_file" -require_relative "theme_check/analyzer" -require_relative "theme_check/check" -require_relative "theme_check/checks_tracking" -require_relative "theme_check/liquid_check" -require_relative "theme_check/html_check" -require_relative "theme_check/json_check" -require_relative "theme_check/cli" -require_relative "theme_check/disabled_check" -require_relative "theme_check/disabled_checks" -require_relative "theme_check/locale_diff" -require_relative "theme_check/remote_asset_file" -require_relative "theme_check/regex_helpers" -require_relative "theme_check/json_helpers" -require_relative "theme_check/position_helper" -require_relative "theme_check/position" -require_relative "theme_check/checks" -require_relative "theme_check/config" -require_relative "theme_check/node" -require_relative "theme_check/tags" -require_relative "theme_check/liquid_node" -require_relative "theme_check/html_node" -require_relative "theme_check/offense" -require_relative "theme_check/printer" -require_relative "theme_check/json_printer" -require_relative "theme_check/shopify_liquid" -require_relative "theme_check/string_helpers" -require_relative "theme_check/storage" -require_relative "theme_check/file_system_storage" -require_relative "theme_check/in_memory_storage" -require_relative "theme_check/theme" -require_relative "theme_check/corrector" -require_relative "theme_check/liquid_visitor" -require_relative "theme_check/html_visitor" -require_relative "theme_check/language_server" - -Dir[__dir__ + "/theme_check/checks/*.rb"].each { |file| require file } - -# UTF-8 is the default internal and external encoding, like in Rails & Shopify. -Encoding.default_external = Encoding::UTF_8 -Encoding.default_internal = Encoding::UTF_8 - -module ThemeCheck - def self.debug? - ENV["THEME_CHECK_DEBUG"] == "true" - end - - def self.debug_log_file - ENV["THEME_CHECK_DEBUG_LOG_FILE"] - end - - def self.with_liquid_c_disabled - if defined?(Liquid::C) - was_enabled = Liquid::C.enabled - Liquid::C.enabled = false if was_enabled - end - yield - ensure - if defined?(Liquid::C) && was_enabled - Liquid::C.enabled = true - end - end -end diff --git a/packaging/homebrew/theme_check.base.rb b/packaging/homebrew/theme_check.base.rb index 4abdfcb4..1d9f0af2 100644 --- a/packaging/homebrew/theme_check.base.rb +++ b/packaging/homebrew/theme_check.base.rb @@ -3,7 +3,7 @@ require 'formula' require 'fileutils' -class ThemeCheck < Formula +class PlatformosCheck < Formula module RubyBin def ruby_bin Formula["ruby"].opt_bin @@ -14,15 +14,15 @@ class RubyGemsDownloadStrategy < AbstractDownloadStrategy include RubyBin def fetch(_timeout: nil, **_options) - ohai("Fetching theme-check from gem source") + ohai("Fetching platformos-check from gem source") cache.cd do ENV['GEM_SPEC_CACHE'] = "#{cache}/gem_spec_cache" - system("#{ruby_bin}/gem", "fetch", "theme-check", "--version", gem_version) + system("#{ruby_bin}/gem", "fetch", "platformos-check", "--version", gem_version) end end def cached_location - Pathname.new("#{cache}/theme-check-#{gem_version}.gem") + Pathname.new("#{cache}/platformos-check-#{gem_version}.gem") end def cache @@ -43,9 +43,9 @@ def clear_cache include RubyBin - url "theme-check", using: RubyGemsDownloadStrategy - version "THEME_CHECK_VERSION" - sha256 'THEME_CHECK_GEM_CHECKSUM' + url "platformos-check", using: RubyGemsDownloadStrategy + version "PLATFORMOS_CHECK_VERSION" + sha256 'PLATFORMOS_CHECK_GEM_CHECKSUM' depends_on "ruby" def install @@ -72,14 +72,14 @@ def install "--bindir", bin ) - raise "gem install 'theme-check' failed with status #{$CHILD_STATUS.exitstatus}" unless $CHILD_STATUS.success? + raise "gem install 'platformos-check' failed with status #{$CHILD_STATUS.exitstatus}" unless $CHILD_STATUS.success? bin.rmtree if bin.exist? bin.mkpath - brew_gem_prefix = "#{prefix}/gems/theme-check-#{version}" + brew_gem_prefix = "#{prefix}/gems/platformos-check-#{version}" - gemspec = Gem::Specification.load("#{prefix}/specifications/theme-check-#{version}.gemspec") + gemspec = Gem::Specification.load("#{prefix}/specifications/platformos-check-#{version}.gemspec") ruby_libs = Dir.glob("#{prefix}/gems/*/lib") gemspec.executables.each do |exe| file = Pathname.new("#{brew_gem_prefix}/#{gemspec.bindir}/#{exe}") diff --git a/theme-check.gemspec b/platformos-check.gemspec similarity index 69% rename from theme-check.gemspec rename to platformos-check.gemspec index f5d7a8a7..ee88b807 100644 --- a/theme-check.gemspec +++ b/platformos-check.gemspec @@ -1,16 +1,16 @@ # frozen_string_literal: true lib = File.expand_path("../lib", __FILE__) $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib) -require "theme_check/version" +require "platformos_check/version" Gem::Specification.new do |spec| - spec.name = "theme-check" - spec.version = ThemeCheck::VERSION - spec.authors = ["Marc-André Cournoyer"] - spec.email = ["marcandre.cournoyer@shopify.com"] + spec.name = "platformos-check" + spec.version = PlatformosCheck::VERSION + spec.authors = ["Piotr Bliszczyk", "Dariusz Gorzęba", "Maciej Krajowski-Kukiel"] + spec.email = ["support@platformos.com"] - spec.summary = "A Shopify Theme Linter" - spec.homepage = "https://github.com/Shopify/theme-check" + spec.summary = "A platformOS App Linter" + spec.homepage = "https://github.com/Platform-OS/platformos-lsp" spec.license = "MIT" spec.required_ruby_version = ">= 2.7" diff --git a/shipit.rubygems.yml b/shipit.rubygems.yml index d4cad1e3..c1e21dab 100644 --- a/shipit.rubygems.yml +++ b/shipit.rubygems.yml @@ -1,3 +1,3 @@ deploy: pre: - - bundle exec rake download_theme_liquid_docs \ No newline at end of file + - bundle exec rake download_platformos_liquid_docs diff --git a/test/analyzer_test.rb b/test/analyzer_test.rb index f800a8d4..303a1761 100644 --- a/test/analyzer_test.rb +++ b/test/analyzer_test.rb @@ -11,7 +11,7 @@ def setup "sections/article-template/template.liquid" => "", "locales/en.default.json" => "", ) - @analyzer = ThemeCheck::Analyzer.new(@theme) + @analyzer = PlatformosCheck::Analyzer.new(@theme) end def test_analyze_theme diff --git a/test/asset_file_test.rb b/test/asset_file_test.rb index b1a829be..80c228e3 100644 --- a/test/asset_file_test.rb +++ b/test/asset_file_test.rb @@ -22,6 +22,6 @@ def test_gzipped_size def make_asset_file(name, content) storage = make_storage(name => content) - ThemeCheck::AssetFile.new(name, storage) + PlatformosCheck::AssetFile.new(name, storage) end end diff --git a/test/checks/TEMPLATE.rb.erb b/test/checks/TEMPLATE.rb.erb index 2d87e75d..335eecdd 100644 --- a/test/checks/TEMPLATE.rb.erb +++ b/test/checks/TEMPLATE.rb.erb @@ -4,7 +4,7 @@ require "test_helper" class <%= class_name %>Test < Minitest::Test def test_valid offenses = analyze_theme( - ThemeCheck::<%= class_name %>.new, + PlatformosCheck::<%= class_name %>.new, "templates/index.liquid" => <<~END, # TODO: Add some accepted examples END @@ -14,7 +14,7 @@ class <%= class_name %>Test < Minitest::Test def test_reports_offenses offenses = analyze_theme( - ThemeCheck::<%= class_name %>.new, + PlatformosCheck::<%= class_name %>.new, "templates/index.liquid" => <<~END, # TODO: Add some bad examples END diff --git a/test/checks/app_block_valid_tags_test.rb b/test/checks/app_block_valid_tags_test.rb index 7f3a7c54..6f3a39c8 100644 --- a/test/checks/app_block_valid_tags_test.rb +++ b/test/checks/app_block_valid_tags_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AppBlockValidTagsTest < Minitest::Test def test_include_layout_section_tags ['include', 'layout', 'section', 'sections'].each do |tag| diff --git a/test/checks/asset_preload_test.rb b/test/checks/asset_preload_test.rb index 834f9af2..2bcf56fd 100644 --- a/test/checks/asset_preload_test.rb +++ b/test/checks/asset_preload_test.rb @@ -4,7 +4,7 @@ class AssetPreloadTest < Minitest::Test def test_no_offense_with_link_element offenses = analyze_theme( - ThemeCheck::AssetPreload.new, + PlatformosCheck::AssetPreload.new, "templates/index.liquid" => <<~END, @@ -15,7 +15,7 @@ def test_no_offense_with_link_element def test_reports_stylesheet_preloading offenses = analyze_theme( - ThemeCheck::AssetPreload.new, + PlatformosCheck::AssetPreload.new, "templates/index.liquid" => <<~END, END @@ -27,7 +27,7 @@ def test_reports_stylesheet_preloading def test_reports_image_preloading offenses = analyze_theme( - ThemeCheck::AssetPreload.new, + PlatformosCheck::AssetPreload.new, "templates/index.liquid" => <<~END, END @@ -39,7 +39,7 @@ def test_reports_image_preloading def test_reports_general_preloading offenses = analyze_theme( - ThemeCheck::AssetPreload.new, + PlatformosCheck::AssetPreload.new, "templates/index.liquid" => <<~END, END diff --git a/test/checks/asset_size_app_block_css_test.rb b/test/checks/asset_size_app_block_css_test.rb index d6844614..58a2c84b 100644 --- a/test/checks/asset_size_app_block_css_test.rb +++ b/test/checks/asset_size_app_block_css_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AssetSizeCSSTest < Minitest::Test def setup @extension_files = { diff --git a/test/checks/asset_size_app_block_javascript_test.rb b/test/checks/asset_size_app_block_javascript_test.rb index f0f901ca..a4b7f842 100644 --- a/test/checks/asset_size_app_block_javascript_test.rb +++ b/test/checks/asset_size_app_block_javascript_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AssetSizeJavaScriptTest < Minitest::Test def setup @extension_files = { diff --git a/test/checks/asset_size_css_stylesheet_tag_test.rb b/test/checks/asset_size_css_stylesheet_tag_test.rb index e0adf1af..6138b2ed 100644 --- a/test/checks/asset_size_css_stylesheet_tag_test.rb +++ b/test/checks/asset_size_css_stylesheet_tag_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AssetSizeCSSStylesheetTagTest < Minitest::Test def test_css_bundles_smaller_than_threshold offenses = analyze_theme( diff --git a/test/checks/asset_size_css_test.rb b/test/checks/asset_size_css_test.rb index a472578f..31e5756f 100644 --- a/test/checks/asset_size_css_test.rb +++ b/test/checks/asset_size_css_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AssetSizeCSSTest < Minitest::Test def test_href_to_file_size theme = make_theme({ diff --git a/test/checks/asset_size_javascript_test.rb b/test/checks/asset_size_javascript_test.rb index 5a29af0a..1265f83d 100644 --- a/test/checks/asset_size_javascript_test.rb +++ b/test/checks/asset_size_javascript_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AssetSizeJavaScriptTest < Minitest::Test def test_src_to_file_size theme = make_theme({ diff --git a/test/checks/asset_url_filters_test.rb b/test/checks/asset_url_filters_test.rb index f91ca73a..22b4da12 100644 --- a/test/checks/asset_url_filters_test.rb +++ b/test/checks/asset_url_filters_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class AssetUrlFiltersTest < Minitest::Test def test_no_offense_for_good_behaviour offenses = analyze_theme( diff --git a/test/checks/background_tag_test.rb b/test/checks/background_tag_test.rb new file mode 100644 index 00000000..99547810 --- /dev/null +++ b/test/checks/background_tag_test.rb @@ -0,0 +1,24 @@ +# frozen_string_literal: true +require "test_helper" + +class BackgroundTagTest < Minitest::Test + def test_inline_syntax + offenses = analyze_theme( + "templates/index.liquid" => <<~END, + {% background f = 'lib/commands/accela/access_tokens/create', token_response_body: token_response_body, username: data.username %} + END + ) + assert_offenses("", offenses) + end + + def test_block_syntax + offenses = analyze_theme( + "templates/index.liquid" => <<~END, + {% background source_name: 'my job name', variable: "Hello", delay: 3.5 %} + Hello {{ variable }} + {% endbackground %} + END + ) + assert_offenses("", offenses) + end +end diff --git a/test/checks/cdn_preconnect_test.rb b/test/checks/cdn_preconnect_test.rb index 592e998d..f7de48d4 100644 --- a/test/checks/cdn_preconnect_test.rb +++ b/test/checks/cdn_preconnect_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class CdnPreconnectTest < Minitest::Test def test_no_offense_with_other_external_domains offenses = analyze_theme( diff --git a/test/checks/content_for_header_modification_test.rb b/test/checks/content_for_header_modification_test.rb index 9d6e7ec5..1dcc0bcb 100644 --- a/test/checks/content_for_header_modification_test.rb +++ b/test/checks/content_for_header_modification_test.rb @@ -4,7 +4,7 @@ class ContentForHeaderModificationTest < Minitest::Test def test_reports_use_of_filter offenses = analyze_theme( - ThemeCheck::ContentForHeaderModification.new, + PlatformosCheck::ContentForHeaderModification.new, "layout/theme.liquid" => <<~END, {{ content_for_header | split: ',' }} END @@ -16,7 +16,7 @@ def test_reports_use_of_filter def test_reports_assign offenses = analyze_theme( - ThemeCheck::ContentForHeaderModification.new, + PlatformosCheck::ContentForHeaderModification.new, "layout/theme.liquid" => <<~END, {% assign x = content_for_header %} END @@ -28,7 +28,7 @@ def test_reports_assign def test_reports_capture offenses = analyze_theme( - ThemeCheck::ContentForHeaderModification.new, + PlatformosCheck::ContentForHeaderModification.new, "layout/theme.liquid" => <<~END, {% capture x %} {{ content_for_header }} @@ -42,7 +42,7 @@ def test_reports_capture def test_reports_echo offenses = analyze_theme( - ThemeCheck::ContentForHeaderModification.new, + PlatformosCheck::ContentForHeaderModification.new, "layout/theme.liquid" => <<~END, {% liquid echo content_for_header | split: ',' @@ -56,7 +56,7 @@ def test_reports_echo def test_do_not_report_normal_use offenses = analyze_theme( - ThemeCheck::ContentForHeaderModification.new, + PlatformosCheck::ContentForHeaderModification.new, "layout/theme.liquid" => <<~END, {{ content_for_header }} END diff --git a/test/checks/convert_include_to_render_test.rb b/test/checks/convert_include_to_render_test.rb index 6690eb57..5bd1ccb1 100644 --- a/test/checks/convert_include_to_render_test.rb +++ b/test/checks/convert_include_to_render_test.rb @@ -4,7 +4,7 @@ class ConvertIncludeToRenderTest < Minitest::Test def test_reports_on_include offenses = analyze_theme( - ThemeCheck::ConvertIncludeToRender.new, + PlatformosCheck::ConvertIncludeToRender.new, "templates/index.liquid" => <<~END, {% include 'templates/foo.liquid' %} END @@ -16,7 +16,7 @@ def test_reports_on_include def test_does_not_reports_on_render offenses = analyze_theme( - ThemeCheck::ConvertIncludeToRender.new, + PlatformosCheck::ConvertIncludeToRender.new, "templates/index.liquid" => <<~END, {% render 'templates/foo.liquid' %} END @@ -27,7 +27,7 @@ def test_does_not_reports_on_render def test_corrects_include skip sources = fix_theme( - ThemeCheck::ConvertIncludeToRender.new, + PlatformosCheck::ConvertIncludeToRender.new, "templates/index.liquid" => <<~END, {% include 'foo.liquid' %} {% assign greeting = "hello world" %} diff --git a/test/checks/default_locale_test.rb b/test/checks/default_locale_test.rb index b87e77fc..43a7ce2f 100644 --- a/test/checks/default_locale_test.rb +++ b/test/checks/default_locale_test.rb @@ -4,7 +4,7 @@ class DefaultLocaleTest < Minitest::Test def test_default_locale_file offenses = analyze_theme( - ThemeCheck::DefaultLocale.new, + PlatformosCheck::DefaultLocale.new, "locales/en.default.json" => "{}" ) assert(offenses.empty?) @@ -12,7 +12,7 @@ def test_default_locale_file def test_default_file_outside_locales offenses = analyze_theme( - ThemeCheck::DefaultLocale.new, + PlatformosCheck::DefaultLocale.new, "data/en.default.json" => "{}" ) refute(offenses.empty?) @@ -27,7 +27,7 @@ def test_creates_default_file END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::DefaultLocale.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::DefaultLocale.new], true) analyzer.analyze_theme analyzer.correct_offenses diff --git a/test/checks/deprecate_bgsizes_test.rb b/test/checks/deprecate_bgsizes_test.rb index f72b6739..7eaaf927 100644 --- a/test/checks/deprecate_bgsizes_test.rb +++ b/test/checks/deprecate_bgsizes_test.rb @@ -4,7 +4,7 @@ class DeprecateBgsizesTest < Minitest::Test def test_valid offenses = analyze_theme( - ThemeCheck::DeprecateBgsizes.new, + PlatformosCheck::DeprecateBgsizes.new, "templates/index.liquid" => <<~END,
END @@ -14,7 +14,7 @@ def test_valid def test_reports_data_bgset offenses = analyze_theme( - ThemeCheck::DeprecateBgsizes.new, + PlatformosCheck::DeprecateBgsizes.new, "templates/index.liquid" => <<~END,
END diff --git a/test/checks/deprecate_lazysizes_test.rb b/test/checks/deprecate_lazysizes_test.rb index 85afc8e6..33b4650f 100644 --- a/test/checks/deprecate_lazysizes_test.rb +++ b/test/checks/deprecate_lazysizes_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class DeprecateLazysizesTest < Minitest::Test def test_valid offenses = analyze_theme( diff --git a/test/checks/deprecated_filter_test.rb b/test/checks/deprecated_filter_test.rb index dabdbfed..906fca7e 100644 --- a/test/checks/deprecated_filter_test.rb +++ b/test/checks/deprecated_filter_test.rb @@ -5,7 +5,7 @@ class DeprecatedFilterTest < Minitest::Test def test_reports_on_deprecate_filter offenses = analyze_theme( - ThemeCheck::DeprecatedFilter.new, + PlatformosCheck::DeprecatedFilter.new, "templates/index.liquid" => <<~END, color: {{ settings.color_name | hex_to_rgba: 0.5 }}; END @@ -17,7 +17,7 @@ def test_reports_on_deprecate_filter def test_does_not_report_on_filter offenses = analyze_theme( - ThemeCheck::DeprecatedFilter.new, + PlatformosCheck::DeprecatedFilter.new, "templates/index.liquid" => <<~END, color: {{ '#7ab55c' | color_to_rgb }}; END @@ -27,7 +27,7 @@ def test_does_not_report_on_filter def test_fixes_img_url sources = fix_theme( - ThemeCheck::DeprecatedFilter.new, + PlatformosCheck::DeprecatedFilter.new, "templates/index.liquid" => <<~END, {{ product.featured_image | img_url: '200x', scale: 2, crop: 'center' }} {{ product.featured_image | img_url: '200x', scale: 2 }} @@ -105,7 +105,7 @@ def test_fixes_img_url_named_sizes ] named_sizes.each do |(name, size)| sources = fix_theme( - ThemeCheck::DeprecatedFilter.new, + PlatformosCheck::DeprecatedFilter.new, "templates/index.liquid" => <<~END, {{ product.featured_image | img_url: '#{name}', scale: 2, crop: 'center' }} {{ product.featured_image | img_url: '#{name}', scale: 2 }} @@ -127,7 +127,7 @@ def test_fixes_img_url_named_sizes def test_fixes_img_url_master sources = fix_theme( - ThemeCheck::DeprecatedFilter.new, + PlatformosCheck::DeprecatedFilter.new, "templates/index.liquid" => <<~END, {{ product.featured_image | img_url: 'master', scale: 2, crop: 'center' }} {{ product.featured_image | img_url: 'master', scale: 2 }} diff --git a/test/checks/deprecated_global_app_block_type_test.rb b/test/checks/deprecated_global_app_block_type_test.rb index c6aba758..82c65c42 100644 --- a/test/checks/deprecated_global_app_block_type_test.rb +++ b/test/checks/deprecated_global_app_block_type_test.rb @@ -1,10 +1,10 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck class DeprecatedGlobalAppBlockTypeTest < Minitest::Test def test_reject_invalid_global_app_block_type_in_section_schemas offenses = analyze_theme( - ThemeCheck::DeprecatedGlobalAppBlockType.new, + PlatformosCheck::DeprecatedGlobalAppBlockType.new, "sections/product.liquid" => <<~END, {% schema %} { @@ -22,7 +22,7 @@ def test_reject_invalid_global_app_block_type_in_section_schemas def test_reject_invalid_global_app_block_type_in_conditional_statement offenses = analyze_theme( - ThemeCheck::DeprecatedGlobalAppBlockType.new, + PlatformosCheck::DeprecatedGlobalAppBlockType.new, "sections/product.liquid" => <<~END, {% for block in section.blocks %} {% if block.type = "@global" %} @@ -48,7 +48,7 @@ def test_reject_invalid_global_app_block_type_in_conditional_statement def test_reject_invalid_global_app_block_type_in_switch_case_statement offenses = analyze_theme( - ThemeCheck::DeprecatedGlobalAppBlockType.new, + PlatformosCheck::DeprecatedGlobalAppBlockType.new, "sections/product.liquid" => <<~END, {% for block in section.blocks %} {% case block.type %} @@ -74,7 +74,7 @@ def test_reject_invalid_global_app_block_type_in_switch_case_statement def test_reject_invalid_global_app_block_type_defined_as_liquid_variable offenses = analyze_theme( - ThemeCheck::DeprecatedGlobalAppBlockType.new, + PlatformosCheck::DeprecatedGlobalAppBlockType.new, "sections/product.liquid" => <<~END, {% assign invalid = "@global" %} {% assign valid = "@app" %} @@ -93,7 +93,7 @@ def test_reject_invalid_global_app_block_type_defined_as_liquid_variable def test_does_not_reject_global_string_used_outside_liquid_control_flow_statements offenses = analyze_theme( - ThemeCheck::DeprecatedGlobalAppBlockType.new, + PlatformosCheck::DeprecatedGlobalAppBlockType.new, "sections/product.liquid" => <<~END,

This is "@global"

@@ -110,7 +110,7 @@ def test_does_not_reject_global_string_used_outside_liquid_control_flow_statemen def test_accepts_valid_global_app_block_type offenses = analyze_theme( - ThemeCheck::DeprecatedGlobalAppBlockType.new, + PlatformosCheck::DeprecatedGlobalAppBlockType.new, "sections/product.liquid" => <<~END, {% for block in section.blocks %} {% if block.type = "@app" %} diff --git a/test/checks/html_parsing_error_test.rb b/test/checks/html_parsing_error_test.rb index 9f9e56f5..91c300f9 100644 --- a/test/checks/html_parsing_error_test.rb +++ b/test/checks/html_parsing_error_test.rb @@ -4,7 +4,7 @@ class HtmlParsingErrorTest < Minitest::Test def test_valid offenses = analyze_theme( - ThemeCheck::HtmlParsingError.new, + PlatformosCheck::HtmlParsingError.new, "templates/index.liquid" => <<~END, END @@ -14,7 +14,7 @@ def test_valid def test_reports_to_many_attributes offenses = analyze_theme( - ThemeCheck::HtmlParsingError.new, + PlatformosCheck::HtmlParsingError.new, "templates/index.liquid" => <<~END, END diff --git a/test/checks/img_lazy_loading_test.rb b/test/checks/img_lazy_loading_test.rb index 0178d387..91928778 100644 --- a/test/checks/img_lazy_loading_test.rb +++ b/test/checks/img_lazy_loading_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class ImgLazyLoadingTest < Minitest::Test def test_no_offense_with_loading_lazy_attribute offenses = analyze_theme( diff --git a/test/checks/img_width_and_height_test.rb b/test/checks/img_width_and_height_test.rb index da024746..7cd86580 100644 --- a/test/checks/img_width_and_height_test.rb +++ b/test/checks/img_width_and_height_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class ImgWidthAndHeightTest < Minitest::Test def test_no_offense_for_good_behaviour offenses = analyze_theme( diff --git a/test/checks/liquid_tag_test.rb b/test/checks/liquid_tag_test.rb index 6c597e6b..f4b95ad9 100644 --- a/test/checks/liquid_tag_test.rb +++ b/test/checks/liquid_tag_test.rb @@ -4,7 +4,7 @@ class LiquidTagTest < Minitest::Test def test_consecutive_statements offenses = analyze_theme( - ThemeCheck::LiquidTag.new(min_consecutive_statements: 4), + PlatformosCheck::LiquidTag.new(min_consecutive_statements: 4), "templates/index.liquid" => <<~END, {% assign x = 1 %} {% if x == 1 %} @@ -21,7 +21,7 @@ def test_consecutive_statements def test_ignores_non_consecutive_statements offenses = analyze_theme( - ThemeCheck::LiquidTag.new(min_consecutive_statements: 4), + PlatformosCheck::LiquidTag.new(min_consecutive_statements: 4), "templates/index.liquid" => <<~END, {% assign x = 1 %} Hello @@ -37,7 +37,7 @@ def test_ignores_non_consecutive_statements def test_ignores_inside_liquid_tag offenses = analyze_theme( - ThemeCheck::LiquidTag.new(min_consecutive_statements: 4), + PlatformosCheck::LiquidTag.new(min_consecutive_statements: 4), "templates/index.liquid" => <<~END, {% liquid assign x = 1 diff --git a/test/checks/matching_schema_translations_test.rb b/test/checks/matching_schema_translations_test.rb index 6ad3758c..e9a8f69b 100644 --- a/test/checks/matching_schema_translations_test.rb +++ b/test/checks/matching_schema_translations_test.rb @@ -4,7 +4,7 @@ class MatchingSchemaTranslationsTest < Minitest::Test def test_matching offenses = analyze_theme( - ThemeCheck::MatchingSchemaTranslations.new, + PlatformosCheck::MatchingSchemaTranslations.new, "sections/product.liquid" => <<~END, {% schema %} { @@ -30,7 +30,7 @@ def test_matching def test_missing offenses = analyze_theme( - ThemeCheck::MatchingSchemaTranslations.new, + PlatformosCheck::MatchingSchemaTranslations.new, "sections/product.liquid" => <<~END, {% schema %} { @@ -79,7 +79,7 @@ def test_creates_missing } source = fix_theme( - ThemeCheck::MatchingSchemaTranslations.new, + PlatformosCheck::MatchingSchemaTranslations.new, "sections/product.liquid" => <<~END, {% schema %} { @@ -105,7 +105,7 @@ def test_creates_missing def test_locales offenses = analyze_theme( - ThemeCheck::MatchingSchemaTranslations.new, + PlatformosCheck::MatchingSchemaTranslations.new, "sections/product.liquid" => <<~END, {% schema %} { @@ -150,7 +150,7 @@ def test_creates_missing_translation_key } source = fix_theme( - ThemeCheck::MatchingSchemaTranslations.new, + PlatformosCheck::MatchingSchemaTranslations.new, "sections/product.liquid" => <<~END, {% schema %} { diff --git a/test/checks/matching_translations_test.rb b/test/checks/matching_translations_test.rb index 5596735e..4877ba74 100644 --- a/test/checks/matching_translations_test.rb +++ b/test/checks/matching_translations_test.rb @@ -5,7 +5,7 @@ class MatchingTranslationsTest < Minitest::Test def test_no_default_noops offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.json" => JSON.dump(a: "a"), "locales/fr.json" => JSON.dump(b: "b"), ) @@ -14,7 +14,7 @@ def test_no_default_noops def test_invalid_default_json_noops offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => "}", "locales/fr.json" => JSON.dump(b: "b"), ) @@ -23,7 +23,7 @@ def test_invalid_default_json_noops def test_non_hash_ignored offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump({}), "locales/fr.json" => JSON.dump([]), ) @@ -32,7 +32,7 @@ def test_non_hash_ignored def test_nested_matching_translations offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: { world: "Hello, world" } ), @@ -48,7 +48,7 @@ def test_nested_matching_translations def test_report_missing_keys offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump(hello: "Hello"), "locales/fr.json" => JSON.dump({}), ) @@ -60,7 +60,7 @@ def test_report_missing_keys def test_report_missing_keys_nested offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( "hello": { "world": "Hello, world" } ), @@ -75,7 +75,7 @@ def test_report_missing_keys_nested def test_report_extra_keys offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump({}), "locales/fr.json" => JSON.dump(hello: "Bonjour"), ) @@ -86,7 +86,7 @@ def test_report_extra_keys def test_report_extra_keys_nested offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: {} ), @@ -101,7 +101,7 @@ def test_report_extra_keys_nested def test_report_extra_keys_for_mismatched_types offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: "Hello" ), @@ -116,7 +116,7 @@ def test_report_extra_keys_for_mismatched_types def test_report_missing_keys_for_mismatched_types offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: { world: "Hello, World" } ), @@ -131,7 +131,7 @@ def test_report_missing_keys_for_mismatched_types def test_ignore_pluralization offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: { one: "Hello, you", @@ -151,7 +151,7 @@ def test_ignore_pluralization def test_ignore_shopify_provided offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: "Hello", shopify: { @@ -177,7 +177,7 @@ def test_ignore_shopify_provided def test_ignore_schema_json_locale_files offenses = analyze_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: "Hello", shopify: { @@ -198,7 +198,7 @@ def test_ignore_schema_json_locale_files def test_shape_change sources = fix_theme( - ThemeCheck::MatchingTranslations.new, + PlatformosCheck::MatchingTranslations.new, "locales/en.default.json" => JSON.dump( hello: { another_key: "world", diff --git a/test/checks/missing_enable_comment_test.rb b/test/checks/missing_enable_comment_test.rb index eecc36c3..4101f1c8 100644 --- a/test/checks/missing_enable_comment_test.rb +++ b/test/checks/missing_enable_comment_test.rb @@ -11,13 +11,13 @@ def comment_types end def test_always_enabled_by_default - refute(ThemeCheck::MissingEnableComment.new.can_disable?) + refute(PlatformosCheck::MissingEnableComment.new.can_disable?) end def test_no_default_noops comment_types.each do |comment| offenses = analyze_theme( - ThemeCheck::MissingEnableComment.new, + PlatformosCheck::MissingEnableComment.new, "templates/index.liquid" => <<~END, #{comment.call('theme-check-disable')} {% assign x = 1 %} @@ -31,7 +31,7 @@ def test_no_default_noops def test_first_line_comment_disables_entire_file comment_types.each do |comment| offenses = analyze_theme( - ThemeCheck::MissingEnableComment.new, + PlatformosCheck::MissingEnableComment.new, "templates/index.liquid" => <<~END, #{comment.call('theme-check-disable')} {% assign x = 1 %} @@ -44,7 +44,7 @@ def test_first_line_comment_disables_entire_file def test_non_first_line_comment_triggers_offense comment_types.each do |comment| offenses = analyze_theme( - ThemeCheck::MissingEnableComment.new, + PlatformosCheck::MissingEnableComment.new, "templates/index.liquid" => <<~END,

Hello, world

#{comment.call('theme-check-disable')} @@ -60,7 +60,7 @@ def test_non_first_line_comment_triggers_offense def test_specific_checks_disabled comment_types.each do |comment| offenses = analyze_theme( - ThemeCheck::MissingEnableComment.new, + PlatformosCheck::MissingEnableComment.new, Minitest::Test::TracerCheck.new, "templates/index.liquid" => <<~END,

Hello, world

@@ -77,7 +77,7 @@ def test_specific_checks_disabled def test_specific_checks_disabled_and_reenabled comment_types.each do |comment| offenses = analyze_theme( - ThemeCheck::MissingEnableComment.new, + PlatformosCheck::MissingEnableComment.new, Minitest::Test::TracerCheck.new, "templates/index.liquid" => <<~END,

Hello, world

@@ -94,7 +94,7 @@ def test_specific_checks_disabled_and_reenabled def test_specific_checks_disabled_and_reenabled_with_all_checks_disabled comment_types.each do |comment| offenses = analyze_theme( - ThemeCheck::MissingEnableComment.new, + PlatformosCheck::MissingEnableComment.new, Minitest::Test::TracerCheck.new, "templates/index.liquid" => <<~END,

Hello, world

diff --git a/test/checks/missing_required_template_files_test.rb b/test/checks/missing_required_template_files_test.rb index 95669080..6231f0d1 100644 --- a/test/checks/missing_required_template_files_test.rb +++ b/test/checks/missing_required_template_files_test.rb @@ -4,7 +4,7 @@ class MissingRequiredTemplateFilesTest < Minitest::Test def test_reports_missing_layout_theme_file offenses = analyze_theme( - ThemeCheck::MissingRequiredTemplateFiles.new, + PlatformosCheck::MissingRequiredTemplateFiles.new, "templates/index.liquid" => "", "templates/product.liquid" => "", ) @@ -14,7 +14,7 @@ def test_reports_missing_layout_theme_file def test_reports_missing_template_files offenses = analyze_theme( - ThemeCheck::MissingRequiredTemplateFiles.new, + PlatformosCheck::MissingRequiredTemplateFiles.new, "layout/theme.liquid" => "", ) @@ -24,7 +24,7 @@ def test_reports_missing_template_files def test_does_not_report_missing_template_files offenses = analyze_theme( - ThemeCheck::MissingRequiredTemplateFiles.new, + PlatformosCheck::MissingRequiredTemplateFiles.new, "layout/theme.liquid" => "", "templates/index.liquid" => "", "templates/product.liquid" => "", @@ -52,7 +52,7 @@ def test_does_not_report_missing_template_files def test_does_not_report_missing_template_files_with_json_templates offenses = analyze_theme( - ThemeCheck::MissingRequiredTemplateFiles.new, + PlatformosCheck::MissingRequiredTemplateFiles.new, "layout/theme.liquid" => "", "templates/index.json" => "", "templates/product.json" => "", @@ -84,7 +84,7 @@ def test_creates_missing_layout_theme_file "templates/product.liquid" => "", ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::MissingRequiredTemplateFiles.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::MissingRequiredTemplateFiles.new], true) analyzer.analyze_theme analyzer.correct_offenses @@ -112,7 +112,7 @@ def test_creates_missing_template_files missing_files = ["templates/product.json", "templates/search.json", "templates/customers/login.liquid", "templates/password.json", "templates/gift_card.liquid"] - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::MissingRequiredTemplateFiles.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::MissingRequiredTemplateFiles.new], true) analyzer.analyze_theme analyzer.correct_offenses diff --git a/test/checks/missing_template_test.rb b/test/checks/missing_template_test.rb index 67fe996d..ba1c28db 100644 --- a/test/checks/missing_template_test.rb +++ b/test/checks/missing_template_test.rb @@ -5,7 +5,7 @@ class MissingTemplateTest < Minitest::Test def test_reports_missing_snippet offenses = analyze_theme( - ThemeCheck::MissingTemplate.new, + PlatformosCheck::MissingTemplate.new, "templates/index.liquid" => <<~END, {% include 'one' %} {% render 'two' %} @@ -19,7 +19,7 @@ def test_reports_missing_snippet def test_do_not_report_if_snippet_exists offenses = analyze_theme( - ThemeCheck::MissingTemplate.new, + PlatformosCheck::MissingTemplate.new, "templates/index.liquid" => <<~END, {% include 'one' %} {% render 'two' %} @@ -36,7 +36,7 @@ def test_do_not_report_if_snippet_exists def test_reports_missing_section offenses = analyze_theme( - ThemeCheck::MissingTemplate.new, + PlatformosCheck::MissingTemplate.new, "templates/index.liquid" => <<~END, {% section 'one' %} END @@ -48,7 +48,7 @@ def test_reports_missing_section def test_do_not_report_if_section_exists offenses = analyze_theme( - ThemeCheck::MissingTemplate.new, + PlatformosCheck::MissingTemplate.new, "templates/index.liquid" => <<~END, {% section 'one' %} END @@ -61,7 +61,7 @@ def test_do_not_report_if_section_exists def test_ignore_missing offenses = analyze_theme( - ThemeCheck::MissingTemplate.new(ignore_missing: [ + PlatformosCheck::MissingTemplate.new(ignore_missing: [ "snippets/icon-*", "sections/*", ]), @@ -77,7 +77,7 @@ def test_ignore_missing # then you should probably also ignore missing templates of all snippets/icon-* # See #489 or #589 for more context. def test_ignore_config - check = ThemeCheck::MissingTemplate.new + check = PlatformosCheck::MissingTemplate.new # this is what config.rb would do check.ignored_patterns = [ @@ -104,7 +104,7 @@ def test_creates_missing_snippet END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::MissingTemplate.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::MissingTemplate.new], true) analyzer.analyze_theme analyzer.correct_offenses @@ -119,7 +119,7 @@ def test_creates_missing_section END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::MissingTemplate.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::MissingTemplate.new], true) analyzer.analyze_theme analyzer.correct_offenses diff --git a/test/checks/nested_snippet_test.rb b/test/checks/nested_snippet_test.rb index 8effae90..2def383e 100644 --- a/test/checks/nested_snippet_test.rb +++ b/test/checks/nested_snippet_test.rb @@ -4,7 +4,7 @@ class NestedSnippetTest < Minitest::Test def test_reports_deep_nesting offenses = analyze_theme( - ThemeCheck::NestedSnippet.new(max_nesting_level: 2), + PlatformosCheck::NestedSnippet.new(max_nesting_level: 2), "templates/index.liquid" => <<~END, {% include 'one' %} END @@ -29,7 +29,7 @@ def test_reports_deep_nesting def test_do_not_report_limit_nesting offenses = analyze_theme( - ThemeCheck::NestedSnippet.new(max_nesting_level: 2), + PlatformosCheck::NestedSnippet.new(max_nesting_level: 2), "templates/index.liquid" => <<~END, {% include 'one' %} END diff --git a/test/checks/pagination_size_test.rb b/test/checks/pagination_size_test.rb index c40da8e8..e9163acb 100644 --- a/test/checks/pagination_size_test.rb +++ b/test/checks/pagination_size_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class PaginationSizeTest < Minitest::Test def test_no_offense_for_good_behaviour offenses = analyze_theme( diff --git a/test/checks/parser_blocking_javascript_test.rb b/test/checks/parser_blocking_javascript_test.rb index bddcdd63..2a42cd85 100644 --- a/test/checks/parser_blocking_javascript_test.rb +++ b/test/checks/parser_blocking_javascript_test.rb @@ -4,7 +4,7 @@ class ParserBlockingJavaScriptTest < Minitest::Test def test_async_script_tag offenses = analyze_theme( - ThemeCheck::ParserBlockingJavaScript.new, + PlatformosCheck::ParserBlockingJavaScript.new, "templates/index.liquid" => <<~END, @@ -25,7 +25,7 @@ def test_async_script_tag def test_defer_script_tag offenses = analyze_theme( - ThemeCheck::ParserBlockingJavaScript.new, + PlatformosCheck::ParserBlockingJavaScript.new, "templates/index.liquid" => <<~END, @@ -44,7 +44,7 @@ def test_defer_script_tag def test_parser_blocking_script_tag offenses = analyze_theme( - ThemeCheck::ParserBlockingJavaScript.new, + PlatformosCheck::ParserBlockingJavaScript.new, "templates/index.liquid" => <<~END, @@ -60,7 +60,7 @@ def test_parser_blocking_script_tag def test_parser_blocking_script_over_multiple_lines offenses = analyze_theme( - ThemeCheck::ParserBlockingJavaScript.new, + PlatformosCheck::ParserBlockingJavaScript.new, "templates/index.liquid" => <<~END, @@ -79,7 +79,7 @@ def test_parser_blocking_script_over_multiple_lines def test_parser_blocking_inline_script offenses = analyze_theme( - ThemeCheck::ParserBlockingJavaScript.new, + PlatformosCheck::ParserBlockingJavaScript.new, "templates/index.liquid" => <<~END, @@ -99,7 +99,7 @@ def test_parser_blocking_inline_script def test_repeated_offenses_are_correctly_reported offenses = analyze_theme( - ThemeCheck::ParserBlockingJavaScript.new, + PlatformosCheck::ParserBlockingJavaScript.new, "templates/index.liquid" => <<~END, diff --git a/test/checks/parser_blocking_script_tag_test.rb b/test/checks/parser_blocking_script_tag_test.rb index 97aea767..821b6b33 100644 --- a/test/checks/parser_blocking_script_tag_test.rb +++ b/test/checks/parser_blocking_script_tag_test.rb @@ -4,7 +4,7 @@ class ParserBlockingScriptTagTest < Minitest::Test def test_script_tag_filter offenses = analyze_theme( - ThemeCheck::ParserBlockingScriptTag.new, + PlatformosCheck::ParserBlockingScriptTag.new, "templates/index.liquid" => <<~END, {{ 'foo.js' | asset_url | script_tag }} END diff --git a/test/checks/remote_asset_test.rb b/test/checks/remote_asset_test.rb index 99add1e6..01a1ad86 100644 --- a/test/checks/remote_asset_test.rb +++ b/test/checks/remote_asset_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class RemoteAssetTest < Minitest::Test def test_no_offense_for_good_behaviour offenses = analyze_theme( diff --git a/test/checks/required_directories_test.rb b/test/checks/required_directories_test.rb index e0833c1c..f8733139 100644 --- a/test/checks/required_directories_test.rb +++ b/test/checks/required_directories_test.rb @@ -4,7 +4,7 @@ class RequiredDirectories < Minitest::Test def test_does_not_report_missing_directories offenses = analyze_theme( - ThemeCheck::RequiredDirectories.new, + PlatformosCheck::RequiredDirectories.new, "assets/gift-card.js" => "", "config/settings_data.json" => "", "layout/theme.liquid" => "", @@ -19,7 +19,7 @@ def test_does_not_report_missing_directories def test_reports_missing_directories offenses = analyze_theme( - ThemeCheck::RequiredDirectories.new, + PlatformosCheck::RequiredDirectories.new, "assets/gift-card.js" => "", "config/settings_data.json" => "", "layout/theme.liquid" => "", @@ -41,7 +41,7 @@ def test_creates_missing_directories "templates/index.liquid" => "" ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::RequiredDirectories.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::RequiredDirectories.new], true) analyzer.analyze_theme analyzer.correct_offenses diff --git a/test/checks/required_layout_theme_object_test.rb b/test/checks/required_layout_theme_object_test.rb index 19af6519..f1e4bfe9 100644 --- a/test/checks/required_layout_theme_object_test.rb +++ b/test/checks/required_layout_theme_object_test.rb @@ -60,7 +60,7 @@ def test_creates_missing_content_for_layout END } sources = fix_theme( - ThemeCheck::RequiredLayoutThemeObject.new, + PlatformosCheck::RequiredLayoutThemeObject.new, "layout/theme.liquid" => <<~END, @@ -92,7 +92,7 @@ def test_creates_missing_content_for_header END } sources = fix_theme( - ThemeCheck::RequiredLayoutThemeObject.new, + PlatformosCheck::RequiredLayoutThemeObject.new, "layout/theme.liquid" => <<~END, @@ -118,7 +118,7 @@ def test_no_head_or_body_tag END } sources = fix_theme( - ThemeCheck::RequiredLayoutThemeObject.new, + PlatformosCheck::RequiredLayoutThemeObject.new, "layout/theme.liquid" => <<~END, @@ -134,7 +134,7 @@ def test_no_head_or_body_tag def analyze_layout_theme(content) analyze_theme( - ThemeCheck::RequiredLayoutThemeObject.new, + PlatformosCheck::RequiredLayoutThemeObject.new, "layout/theme.liquid" => content ) end diff --git a/test/checks/schema_json_format_test.rb b/test/checks/schema_json_format_test.rb index ce7bc0a4..0a1a853f 100644 --- a/test/checks/schema_json_format_test.rb +++ b/test/checks/schema_json_format_test.rb @@ -4,7 +4,7 @@ class SchemaJsonFormatTest < Minitest::Test def test_valid offenses = analyze_theme( - ThemeCheck::SchemaJsonFormat.new(start_level: 1), + PlatformosCheck::SchemaJsonFormat.new(start_level: 1), "templates/index.liquid" => <<~END, {% schema %} { @@ -18,7 +18,7 @@ def test_valid def test_does_not_report_on_invalid_json offenses = analyze_theme( - ThemeCheck::SchemaJsonFormat.new(start_level: 1), + PlatformosCheck::SchemaJsonFormat.new(start_level: 1), "templates/index.liquid" => <<~END, {% schema %} { @@ -32,7 +32,7 @@ def test_does_not_report_on_invalid_json def test_reports_offenses offenses = analyze_theme( - ThemeCheck::SchemaJsonFormat.new(start_level: 1), + PlatformosCheck::SchemaJsonFormat.new(start_level: 1), "templates/index.liquid" => <<~END, {% schema %} { "hello": "world" } @@ -65,7 +65,7 @@ def test_fix_offenses } source = fix_theme( - ThemeCheck::SchemaJsonFormat.new(start_level: 1), + PlatformosCheck::SchemaJsonFormat.new(start_level: 1), "sections/product.liquid" => <<~END, {% schema %} { diff --git a/test/checks/space_inside_braces_test.rb b/test/checks/space_inside_braces_test.rb index bc46ed30..55539968 100644 --- a/test/checks/space_inside_braces_test.rb +++ b/test/checks/space_inside_braces_test.rb @@ -4,7 +4,7 @@ class SpaceInsideBracesTest < Minitest::Test def test_reports_missing_space offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {% assign x = 1%} {% assign x = 2-%} @@ -35,7 +35,7 @@ def test_reports_missing_space def test_dont_report_when_no_missing_space offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {% comment %} {% endcomment %} @@ -66,7 +66,7 @@ def test_dont_report_when_no_missing_space def test_reports_extra_space offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ x }} {{- x }} @@ -92,7 +92,7 @@ def test_reports_extra_space def test_reports_extra_space_around_coma offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {% form 'type', object, key:value %} {% endform %} @@ -106,7 +106,7 @@ def test_reports_extra_space_around_coma def test_reports_extra_space_around_pipeline offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ url | asset_url | img_tag }} {{ url | asset_url | img_tag }} @@ -128,7 +128,7 @@ def test_reports_extra_space_around_pipeline def test_reports_missing_space_around_pipeline offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ url| asset_url | img_tag }} {{ url |asset_url | img_tag }} @@ -146,7 +146,7 @@ def test_reports_missing_space_around_pipeline def test_dont_report_on_correct_spaces_around_pipeline offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ url | asset_url | img_tag }} {% assign my_upcase_string = "Hello world" | upcase %} @@ -157,7 +157,7 @@ def test_dont_report_on_correct_spaces_around_pipeline def test_reports_extra_space_after_colon_in_assign_tag offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {% assign max_width = height | times: image.aspect_ratio %} END @@ -169,7 +169,7 @@ def test_reports_extra_space_after_colon_in_assign_tag def test_dont_report_on_proper_spaces_around_pipeline offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {% assign x = 1 %} {{ x }} @@ -202,7 +202,7 @@ def test_corrects_missing_space END } sources = fix_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ x}} {{x }} @@ -221,7 +221,7 @@ def test_corrects_extra_space END } sources = fix_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ x }} {{ x }} @@ -234,7 +234,7 @@ def test_corrects_extra_space def test_reports_extra_space_after_operators offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {%- if x > y -%}{%- endif -%} {%- if x < y -%}{%- endif -%} @@ -258,7 +258,7 @@ def test_reports_extra_space_after_operators def test_reports_missing_space_after_operators offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {%- if x >y -%}{%- endif -%} {%- if x <<~END, {%- if x > y -%}{%- endif -%} {%- if x < y -%}{%- endif -%} @@ -306,7 +306,7 @@ def test_reports_extra_space_before_operators def test_reports_missing_space_before_operators offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {%- if x> y -%}{%- endif -%} {%- if x< y -%}{%- endif -%} @@ -330,7 +330,7 @@ def test_reports_missing_space_before_operators def test_dont_report_with_correct_spaces_around_operators offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {%- if x > y -%}{%- endif -%} {%- if x < y -%}{%- endif -%} @@ -346,7 +346,7 @@ def test_dont_report_with_correct_spaces_around_operators def test_dont_report_missing_spaces_inside_strings offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{ filter.min_value.value | money_without_currency | replace: '.', '' | replace: ',', '.' }} {{ paginate | default_pagination: @@ -422,7 +422,7 @@ def test_reports_correct_location_range }, ].each do |test_desc| offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => test_desc[:liquid] ) assert_offenses_with_range( @@ -434,7 +434,7 @@ def test_reports_correct_location_range def test_reports_properly_at_end_tag offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {% assign x = n-%} 00000000001111111 @@ -450,7 +450,7 @@ def test_reports_properly_at_end_tag def test_dont_report_empty_variables offenses = analyze_theme( - ThemeCheck::SpaceInsideBraces.new, + PlatformosCheck::SpaceInsideBraces.new, "templates/index.liquid" => <<~END, {{}} END diff --git a/test/checks/syntax_error_test.rb b/test/checks/syntax_error_test.rb index e9750ce4..b65d7445 100644 --- a/test/checks/syntax_error_test.rb +++ b/test/checks/syntax_error_test.rb @@ -4,7 +4,7 @@ class SyntaxErrorTest < Minitest::Test def test_reports_parse_errors offenses = analyze_theme( - ThemeCheck::SyntaxError.new, + PlatformosCheck::SyntaxError.new, "templates/index.liquid" => <<~END, {% include 'muffin' END @@ -16,7 +16,7 @@ def test_reports_parse_errors def test_reports_missing_tag offenses = analyze_theme( - ThemeCheck::SyntaxError.new, + PlatformosCheck::SyntaxError.new, "templates/index.liquid" => <<~END, {% unknown %} END @@ -28,7 +28,7 @@ def test_reports_missing_tag def test_reports_lax_warnings_and_continue offenses = analyze_theme( - ThemeCheck::SyntaxError.new, + PlatformosCheck::SyntaxError.new, "templates/index.liquid" => <<~END, {% if collection | size > 0 %} {% endif %} @@ -44,7 +44,7 @@ def test_reports_lax_warnings_and_continue def test_invalid_render_tag offenses = analyze_theme( - ThemeCheck::SyntaxError.new, + PlatformosCheck::SyntaxError.new, "templates/index.liquid" => "{% render ‘foo’ %}", ) assert_offenses(<<~END, offenses) diff --git a/test/checks/template_length_test.rb b/test/checks/template_length_test.rb index 7371dac7..6cbd1c42 100644 --- a/test/checks/template_length_test.rb +++ b/test/checks/template_length_test.rb @@ -4,7 +4,7 @@ class TemplateLengthTest < Minitest::Test def test_finds_unused offenses = analyze_theme( - ThemeCheck::TemplateLength.new(max_length: 10), + PlatformosCheck::TemplateLength.new(max_length: 10), "templates/long.liquid" => <<~END, #{"\n" * 10} END @@ -19,7 +19,7 @@ def test_finds_unused def test_excludes_lines_inside_schema offenses = analyze_theme( - ThemeCheck::TemplateLength.new(max_length: 10, exclude_schema: true), + PlatformosCheck::TemplateLength.new(max_length: 10, exclude_schema: true), "sections/long.liquid" => <<~END, {% schema %} #{"\n" * 10} @@ -31,7 +31,7 @@ def test_excludes_lines_inside_schema def test_excludes_lines_inside_stylesheet offenses = analyze_theme( - ThemeCheck::TemplateLength.new(max_length: 10, exclude_stylesheet: true), + PlatformosCheck::TemplateLength.new(max_length: 10, exclude_stylesheet: true), "sections/long.liquid" => <<~END, {% stylesheet %} #{"\n" * 10} @@ -43,7 +43,7 @@ def test_excludes_lines_inside_stylesheet def test_excludes_lines_inside_javascript offenses = analyze_theme( - ThemeCheck::TemplateLength.new(max_length: 10, exclude_javascript: true), + PlatformosCheck::TemplateLength.new(max_length: 10, exclude_javascript: true), "sections/long.liquid" => <<~END, {% javascript %} #{"\n" * 10} diff --git a/test/checks/translation_key_exists_test.rb b/test/checks/translation_key_exists_test.rb index 304ed1d1..5df9470a 100644 --- a/test/checks/translation_key_exists_test.rb +++ b/test/checks/translation_key_exists_test.rb @@ -4,7 +4,7 @@ class TranslationKeyExistsTest < Minitest::Test def test_noop_without_default_locale offenses = analyze_theme( - ThemeCheck::TranslationKeyExists.new, + PlatformosCheck::TranslationKeyExists.new, "templates/index.liquid" => <<~END, {{"notfound" | t}} END @@ -14,7 +14,7 @@ def test_noop_without_default_locale def test_noop_with_invalid_default_locale offenses = analyze_theme( - ThemeCheck::TranslationKeyExists.new, + PlatformosCheck::TranslationKeyExists.new, "locales/en.default.json" => "{", "templates/index.liquid" => <<~END, {{"notfound" | t}} @@ -25,7 +25,7 @@ def test_noop_with_invalid_default_locale def test_ignores_existing_key offenses = analyze_theme( - ThemeCheck::TranslationKeyExists.new, + PlatformosCheck::TranslationKeyExists.new, "locales/en.default.json" => JSON.dump( key: "", nested: { key: "" } @@ -41,7 +41,7 @@ def test_ignores_existing_key def test_ignores_key_included_in_schema offenses = analyze_theme( - ThemeCheck::TranslationKeyExists.new, + PlatformosCheck::TranslationKeyExists.new, "sections/product.liquid" => <<~END, {{"submit" | t}} {% schema %} @@ -60,7 +60,7 @@ def test_ignores_key_included_in_schema def test_reports_unknown_key offenses = analyze_theme( - ThemeCheck::TranslationKeyExists.new, + PlatformosCheck::TranslationKeyExists.new, "locales/en.default.json" => JSON.dump({}), "templates/index.liquid" => <<~END, {{"unknownkey" | t}} @@ -78,7 +78,7 @@ def test_reports_unknown_key def test_counts_shopify_provided_translations_as_defined offenses = analyze_theme( - ThemeCheck::TranslationKeyExists.new, + PlatformosCheck::TranslationKeyExists.new, "locales/en.default.json" => JSON.dump({}), "templates/index.liquid" => <<~END, {{ 'shopify.sentence.words_connector' | t }} @@ -98,7 +98,7 @@ def test_creates_missing_keys END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::TranslationKeyExists.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::TranslationKeyExists.new], true) analyzer.analyze_theme analyzer.correct_offenses @@ -123,7 +123,7 @@ def test_creates_nested_missing_keys END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::TranslationKeyExists.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::TranslationKeyExists.new], true) analyzer.analyze_theme analyzer.correct_offenses @@ -159,7 +159,7 @@ def test_handles_key_conflicts END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::TranslationKeyExists.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::TranslationKeyExists.new], true) analyzer.analyze_theme assert_offenses(<<~END, analyzer.offenses) diff --git a/test/checks/undefined_object_test.rb b/test/checks/undefined_object_test.rb index 4f504455..acd54bcc 100644 --- a/test/checks/undefined_object_test.rb +++ b/test/checks/undefined_object_test.rb @@ -4,7 +4,7 @@ class UndefinedObjectTest < Minitest::Test def test_report_on_undefined_variable offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {{ price }} END @@ -16,7 +16,7 @@ def test_report_on_undefined_variable def test_report_on_repeated_undefined_variable_on_different_lines offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {{ price }} @@ -31,7 +31,7 @@ def test_report_on_repeated_undefined_variable_on_different_lines def test_report_on_undefined_global_object offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {{ produt.title }} END @@ -43,7 +43,7 @@ def test_report_on_undefined_global_object def test_report_on_undefined_global_object_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {{ form[email] }} END @@ -55,7 +55,7 @@ def test_report_on_undefined_global_object_argument def test_reports_several_offenses_for_same_object offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% if form[email] %} {{ form[email] }} @@ -72,7 +72,7 @@ def test_reports_several_offenses_for_same_object def test_does_not_report_on_string_argument_to_global_object offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {{ form["email"] }} END @@ -82,7 +82,7 @@ def test_does_not_report_on_string_argument_to_global_object def test_does_not_report_on_defined_variable offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% assign field = "email" %} {{ form[field] }} @@ -93,7 +93,7 @@ def test_does_not_report_on_defined_variable def test_does_not_report_on_defined_global_object offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {{ product.title }} END @@ -103,7 +103,7 @@ def test_does_not_report_on_defined_global_object def test_does_not_report_on_assign offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% assign foo = "bar" %} {{ foo }} @@ -114,7 +114,7 @@ def test_does_not_report_on_assign def test_does_not_report_on_capture offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% capture 'var' %}test string{% endcapture %} {{ var }} @@ -125,7 +125,7 @@ def test_does_not_report_on_capture def test_does_not_report_on_forloops offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% for item in collection %} {{ forloop.index }}: {{ item.name }} @@ -137,7 +137,7 @@ def test_does_not_report_on_forloops def test_does_not_report_on_render_using_the_with_parameter offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% assign featured_product = all_products['product_handle'] %} {% render 'product' with featured_product as my_product %} @@ -151,7 +151,7 @@ def test_does_not_report_on_render_using_the_with_parameter def test_does_not_report_on_render_using_the_for_parameter offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% assign variants = product.variants %} {% render 'variant' for variants as my_variant %} @@ -165,7 +165,7 @@ def test_does_not_report_on_render_using_the_for_parameter def test_report_on_render_with_variable_from_parent_context offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% assign price = "$3.00" %} {% render 'product' %} @@ -181,7 +181,7 @@ def test_report_on_render_with_variable_from_parent_context def test_report_on_render_with_undefined_variable_as_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'product', price: adjusted_price %} END @@ -193,7 +193,7 @@ def test_report_on_render_with_undefined_variable_as_argument def test_does_not_report_on_render_with_variable_as_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% assign adjusted_price = "$3.00" %} {% render 'product', price: adjusted_price %} @@ -207,7 +207,7 @@ def test_does_not_report_on_render_with_variable_as_argument def test_does_not_report_on_render_with_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'product', price: '$3.00' %} END @@ -220,7 +220,7 @@ def test_does_not_report_on_render_with_argument def test_report_on_render_with_undefined_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'product' %} END @@ -235,7 +235,7 @@ def test_report_on_render_with_undefined_argument def test_report_on_render_with_repeated_undefined_attribute offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'product' %} END @@ -252,7 +252,7 @@ def test_report_on_render_with_repeated_undefined_attribute def test_report_on_render_with_undefined_argument_in_one_of_multiple_locations offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'product' %} END @@ -270,7 +270,7 @@ def test_report_on_render_with_undefined_argument_in_one_of_multiple_locations def test_report_on_nested_render_with_undefined_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'collection' %} END @@ -288,7 +288,7 @@ def test_report_on_nested_render_with_undefined_argument def test_does_not_report_on_nested_render_with_argument offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'collection' %} END @@ -304,7 +304,7 @@ def test_does_not_report_on_nested_render_with_argument def test_does_not_report_on_unused_snippet offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "snippets/product.liquid" => <<~END, {{ price }} END @@ -314,7 +314,7 @@ def test_does_not_report_on_unused_snippet def test_does_not_report_on_email_in_customers_reset_password offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/customers/reset_password.liquid" => <<~END,

{{ 'customer.reset_password.subtext' | t: email: email }}

END @@ -324,7 +324,7 @@ def test_does_not_report_on_email_in_customers_reset_password def test_reports_on_email_other_than_customers_reset_password offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END,

{{ 'customer.reset_password.subtext' | t: email: email }}

END @@ -336,7 +336,7 @@ def test_reports_on_email_other_than_customers_reset_password def test_does_not_report_on_robots_in_robots offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/robots.txt.liquid" => <<~END, {% for group in robots.default_groups %} {{- group.user_agent -}} @@ -356,7 +356,7 @@ def test_does_not_report_on_robots_in_robots def test_reports_on_robots_other_than_robots offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% for group in robots.default_groups %} {{- group.user_agent -}} @@ -378,7 +378,7 @@ def test_reports_on_robots_other_than_robots def test_does_not_report_on_shopify_plus_objects_in_checkout offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "layout/checkout.liquid" => <<~END,

{{ checkout_html_classes }}

END @@ -388,7 +388,7 @@ def test_does_not_report_on_shopify_plus_objects_in_checkout def test_does_not_report_on_pipe_default offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "layout/checkout.liquid" => <<~END, {% assign obj = param | default: '' %} {% echo variable | default: '' %} @@ -400,7 +400,7 @@ def test_does_not_report_on_pipe_default def test_reports_on_shopify_plus_objects_other_than_checkout offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END,

{{ checkout_html_classes }}

END @@ -412,7 +412,7 @@ def test_reports_on_shopify_plus_objects_other_than_checkout def test_recursion offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "templates/index.liquid" => <<~END, {% render 'one' %} END @@ -432,7 +432,7 @@ def test_recursion def test_render_block offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "sections/apps.liquid" => "{% render block %}" ) assert_offenses("", offenses) @@ -440,7 +440,7 @@ def test_render_block def test_report_on_app_liquid_drop_in_themes offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "blocks/block_a.liquid" => <<~END,

{{ app.metafields.namespace.key }}

END @@ -452,7 +452,7 @@ def test_report_on_app_liquid_drop_in_themes def test_does_not_report_when_section_is_used offenses = analyze_theme( - ThemeCheck::UndefinedObject.new(exclude_snippets: false), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false), "blocks/block_a.liquid" => <<~END,

{{ section.id }}

END @@ -462,7 +462,7 @@ def test_does_not_report_when_section_is_used 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), + PlatformosCheck::UndefinedObject.new(exclude_snippets: false, config_type: :theme_app_extension), "blocks/block_a.liquid" => <<~END,

{{ app.metafields.namespace.key }}

END diff --git a/test/checks/unknown_filter_test.rb b/test/checks/unknown_filter_test.rb index 96997fdd..888b062c 100644 --- a/test/checks/unknown_filter_test.rb +++ b/test/checks/unknown_filter_test.rb @@ -4,7 +4,7 @@ class UnknownFilterTest < Minitest::Test def test_reports_on_unknown_filter offenses = analyze_theme( - ThemeCheck::UnknownFilter.new, + PlatformosCheck::UnknownFilter.new, "templates/index.liquid" => <<~END, {{ "foo" | bar }} END @@ -16,7 +16,7 @@ def test_reports_on_unknown_filter def test_reports_on_unknown_filter_chained_with_known_filters offenses = analyze_theme( - ThemeCheck::UnknownFilter.new, + PlatformosCheck::UnknownFilter.new, "templates/index.liquid" => <<~END, {{ "foo" | append: ".js" | bar }} END @@ -28,7 +28,7 @@ def test_reports_on_unknown_filter_chained_with_known_filters def test_reports_does_not_report_on_known_filter offenses = analyze_theme( - ThemeCheck::UnknownFilter.new, + PlatformosCheck::UnknownFilter.new, "templates/index.liquid" => <<~END, {{ "foo" | upcase }} END @@ -38,7 +38,7 @@ def test_reports_does_not_report_on_known_filter def test_reports_does_not_report_on_chain_of_known_filter offenses = analyze_theme( - ThemeCheck::UnknownFilter.new, + PlatformosCheck::UnknownFilter.new, "templates/index.liquid" => <<~END, {{ "foo" | append: ".js" | upcase }} END diff --git a/test/checks/unused_assign_test.rb b/test/checks/unused_assign_test.rb index fe80d922..7fb2b9b5 100644 --- a/test/checks/unused_assign_test.rb +++ b/test/checks/unused_assign_test.rb @@ -4,7 +4,7 @@ class UnusedAssignTest < Minitest::Test def test_reports_unused_assigns offenses = analyze_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% assign x = 1 %} END @@ -16,7 +16,7 @@ def test_reports_unused_assigns def test_do_not_report_used_assigns offenses = analyze_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% assign a = 1 %} {{ a }} @@ -35,7 +35,7 @@ def test_do_not_report_used_assigns def test_do_not_report_used_assigns_bracket_syntax offenses = analyze_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% liquid assign resource = request.page_type @@ -49,7 +49,7 @@ def test_do_not_report_used_assigns_bracket_syntax def test_do_not_report_assigns_used_before_defined offenses = analyze_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% unless a %} {% assign a = 1 %} @@ -61,7 +61,7 @@ def test_do_not_report_assigns_used_before_defined def test_do_not_report_assigns_used_in_includes offenses = analyze_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% assign a = 1 %} {% include 'using' %} @@ -75,7 +75,7 @@ def test_do_not_report_assigns_used_in_includes def test_recursion_in_includes offenses = analyze_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% assign a = 1 %} {% include 'one' %} @@ -98,7 +98,7 @@ def test_removes_unused_assign "templates/index.liquid" => "\n", } sources = fix_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% assign x = 1 %} END @@ -120,7 +120,7 @@ def test_removes_unused_assign_liquid_block END } sources = fix_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END, {% liquid assign x = 1 @@ -143,7 +143,7 @@ def test_removes_unused_assign_middle_of_line END } sources = fix_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END,

test case

{% assign x = 1 %}

test case

END @@ -160,7 +160,7 @@ def test_removes_unused_assign_leaves_html END } sources = fix_theme( - ThemeCheck::UnusedAssign.new, + PlatformosCheck::UnusedAssign.new, "templates/index.liquid" => <<~END,

test case

{% assign x = 1 %} END diff --git a/test/checks/unused_snippet_test.rb b/test/checks/unused_snippet_test.rb index da2c736d..8df71497 100644 --- a/test/checks/unused_snippet_test.rb +++ b/test/checks/unused_snippet_test.rb @@ -4,7 +4,7 @@ class UnusedSnippetTest < Minitest::Test def test_finds_unused offenses = analyze_theme( - ThemeCheck::UnusedSnippet.new, + PlatformosCheck::UnusedSnippet.new, "templates/index.liquid" => <<~END, {% include 'muffin' %} END @@ -22,7 +22,7 @@ def test_finds_unused def test_ignores_dynamic_includes offenses = analyze_theme( - ThemeCheck::UnusedSnippet.new, + PlatformosCheck::UnusedSnippet.new, "templates/index.liquid" => <<~END, {% assign name = 'muffin' %} {% include name %} @@ -39,7 +39,7 @@ def test_ignores_dynamic_includes def test_does_not_turn_off_the_check_because_of_potential_render_block offenses = analyze_theme( - ThemeCheck::UnusedSnippet.new, + PlatformosCheck::UnusedSnippet.new, "templates/index.liquid" => <<~END, {% for name in section.blocks %} {% render name %} @@ -56,7 +56,7 @@ def test_does_not_turn_off_the_check_because_of_potential_render_block def test_does_turn_off_the_check_because_of_dynamic_include_in_for_loop offenses = analyze_theme( - ThemeCheck::UnusedSnippet.new, + PlatformosCheck::UnusedSnippet.new, "templates/index.liquid" => <<~END, {% for name in includes %} {% include name %} @@ -82,7 +82,7 @@ def test_removes_unused_snippets END ) - analyzer = ThemeCheck::Analyzer.new(theme, [ThemeCheck::UnusedSnippet.new], true) + analyzer = PlatformosCheck::Analyzer.new(theme, [PlatformosCheck::UnusedSnippet.new], true) analyzer.analyze_theme analyzer.correct_offenses diff --git a/test/checks/valid_html_translation_test.rb b/test/checks/valid_html_translation_test.rb index 0f879378..ae29a6b0 100644 --- a/test/checks/valid_html_translation_test.rb +++ b/test/checks/valid_html_translation_test.rb @@ -4,7 +4,7 @@ class ValidHTMLTranslationTest < Minitest::Test def test_do_not_report_valid_html offenses = analyze_theme( - ThemeCheck::ValidHTMLTranslation.new, + PlatformosCheck::ValidHTMLTranslation.new, "locales/en.default.json" => JSON.dump( hello_html: "

Hello, world

", image_html: "", @@ -18,7 +18,7 @@ def test_do_not_report_valid_html def test_report_invalid_html offenses = analyze_theme( - ThemeCheck::ValidHTMLTranslation.new, + PlatformosCheck::ValidHTMLTranslation.new, "locales/en.default.json" => JSON.dump( hello_html: "

Hello, world" ), @@ -34,7 +34,7 @@ def test_report_invalid_html def test_report_nested_invalid_html offenses = analyze_theme( - ThemeCheck::ValidHTMLTranslation.new, + PlatformosCheck::ValidHTMLTranslation.new, "locales/en.default.json" => JSON.dump( hello: { world: { @@ -54,7 +54,7 @@ def test_report_nested_invalid_html def test_report_pluralized_key offenses = analyze_theme( - ThemeCheck::ValidHTMLTranslation.new, + PlatformosCheck::ValidHTMLTranslation.new, "locales/en.default.json" => JSON.dump( hello_html: { one: "

Hello, world" } ), diff --git a/test/checks/valid_json_test.rb b/test/checks/valid_json_test.rb index d79b92e4..98842552 100644 --- a/test/checks/valid_json_test.rb +++ b/test/checks/valid_json_test.rb @@ -4,17 +4,17 @@ class ValidJsonTest < Minitest::Test def test_detects_json_error offenses = analyze_theme( - ThemeCheck::ValidJson.new, + PlatformosCheck::ValidJson.new, "locales/en.json" => "{", ) assert_offenses(<<~END, offenses) - unexpected token at '{' in JSON at locales/en.json + Invalid syntax in JSON at locales/en.json END end def test_valid_json offenses = analyze_theme( - ThemeCheck::ValidJson.new, + PlatformosCheck::ValidJson.new, "locales/en.json" => "{}", ) assert_offenses("", offenses) diff --git a/test/checks/valid_schema_test.rb b/test/checks/valid_schema_test.rb index d39bfc6f..07b34efe 100644 --- a/test/checks/valid_schema_test.rb +++ b/test/checks/valid_schema_test.rb @@ -4,7 +4,7 @@ class ValidSchemaTest < Minitest::Test def test_detects_json_error offenses = analyze_theme( - ThemeCheck::ValidSchema.new, + PlatformosCheck::ValidSchema.new, "sections/product.liquid" => <<~END, {% schema %} { @@ -12,13 +12,13 @@ def test_detects_json_error END ) assert_offenses(<<~END, offenses) - unexpected token at '{ in JSON at sections/product.liquid:1 + Invalid syntax in JSON at sections/product.liquid:1 END end def test_valid_json offenses = analyze_theme( - ThemeCheck::ValidSchema.new, + PlatformosCheck::ValidSchema.new, "sections/product.liquid" => <<~END, {% schema %} {} diff --git a/test/cli_test.rb b/test/cli_test.rb index d0544c70..085ca34f 100644 --- a/test/cli_test.rb +++ b/test/cli_test.rb @@ -4,7 +4,7 @@ class CliTest < Minitest::Test def test_help out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!(%w(--help)) + PlatformosCheck::Cli.parse_and_run!(%w(--help)) end assert_includes(out, "Usage: theme-check") @@ -12,8 +12,8 @@ def test_help def test_check out, _err = capture_io do - assert_raises(ThemeCheck::Cli::Abort) do - ThemeCheck::Cli.parse_and_run!([__dir__ + "/theme"]) + assert_raises(PlatformosCheck::Cli::Abort) do + PlatformosCheck::Cli.parse_and_run!([__dir__ + "/theme"]) end end assert_includes(out, "files inspected") @@ -43,7 +43,7 @@ def test_check_format_json ) out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!([storage.root.to_s, '--output', 'json']) + PlatformosCheck::Cli.parse_and_run!([storage.root.to_s, '--output', 'json']) end assert_equal( @@ -115,7 +115,7 @@ def test_check_format_json def test_print out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!([__dir__ + "/theme", '--print']) + PlatformosCheck::Cli.parse_and_run!([__dir__ + "/theme", '--print']) end assert_includes(out, <<~EXPECTED) @@ -133,7 +133,7 @@ def test_config_flag ) out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!([__dir__ + "/theme", "-C", storage.path(".theme-check.yml").to_s, '--print']) + PlatformosCheck::Cli.parse_and_run!([__dir__ + "/theme", "-C", storage.path(".theme-check.yml").to_s, '--print']) end assert_includes(out, <<~EXPECTED) @@ -144,8 +144,8 @@ def test_config_flag def test_check_with_category out, _err = capture_io do - assert_raises(ThemeCheck::Cli::Abort) do - ThemeCheck::Cli.parse_and_run!([__dir__ + "/theme", "-c", "translation", "--fail-level", "style"]) + assert_raises(PlatformosCheck::Cli::Abort) do + PlatformosCheck::Cli.parse_and_run!([__dir__ + "/theme", "-c", "translation", "--fail-level", "style"]) end end refute_includes(out, "liquid") @@ -153,30 +153,30 @@ def test_check_with_category def test_check_with_exclude_category out, _err = capture_io do - assert_raises(ThemeCheck::Cli::Abort) do - ThemeCheck::Cli.parse_and_run!([__dir__ + "/theme", "-x", "liquid", "--fail-level", "style"]) + assert_raises(PlatformosCheck::Cli::Abort) do + PlatformosCheck::Cli.parse_and_run!([__dir__ + "/theme", "-x", "liquid", "--fail-level", "style"]) end end refute_includes(out, "liquid") end def test_check_no_templates - assert_raises(ThemeCheck::Cli::Abort, /^No templates found./) do + assert_raises(PlatformosCheck::Cli::Abort, /^No templates found./) do capture_io do - ThemeCheck::Cli.parse_and_run!([__dir__]) + PlatformosCheck::Cli.parse_and_run!([__dir__]) end end end def test_list out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!(%w(--list)) + PlatformosCheck::Cli.parse_and_run!(%w(--list)) end assert_includes(out, "LiquidTag:") end def test_update_docs - ThemeCheck::ShopifyLiquid::SourceManager.expects(:download) + PlatformosCheck::ShopifyLiquid::SourceManager.expects(:download) storage = make_file_system_storage( 'layout/theme.liquid' => '', @@ -188,7 +188,7 @@ def test_update_docs ) _out, err = capture_io do - ThemeCheck::Cli.parse_and_run!([storage.root, '--update-docs']) + PlatformosCheck::Cli.parse_and_run!([storage.root, '--update-docs']) end assert_includes(err, 'Updating documentation...') @@ -201,7 +201,7 @@ def test_auto_correct LIQUID ) out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!([storage.root.to_s, "-a"]) + PlatformosCheck::Cli.parse_and_run!([storage.root.to_s, "-a"]) end assert_includes(out, "corrected") end @@ -213,7 +213,7 @@ def test_fail_level_and_exit_codes YAML "crash_test_check.rb" => <<~RUBY, # frozen_string_literal: true - module ThemeCheck + module PlatformosCheck class MockCheck < LiquidCheck severity :error category :liquid @@ -235,7 +235,7 @@ def on_end ) # Teardown code so that Checks.all doesn't have MockCheck in it - ThemeCheck::Check.all.delete(ThemeCheck::MockCheck) + PlatformosCheck::Check.all.delete(PlatformosCheck::MockCheck) assert_exit_code(1, "error", "templates/theme.liquid" => <<~YAML, @@ -264,7 +264,7 @@ def on_end def test_init storage = make_file_system_storage out, _err = capture_io do - ThemeCheck::Cli.parse_and_run!([storage.root, "--init"]) + PlatformosCheck::Cli.parse_and_run!([storage.root, "--init"]) end assert_includes(out, "Writing new .theme-check.yml") end @@ -275,9 +275,9 @@ def test_init_abort_with_existing_config_file root: . END ) - assert_raises(ThemeCheck::Cli::Abort, /^.theme-check.yml already exists/) do + assert_raises(PlatformosCheck::Cli::Abort, /^.theme-check.yml already exists/) do capture_io do - ThemeCheck::Cli.parse_and_run!([storage.root, "--init"]) + PlatformosCheck::Cli.parse_and_run!([storage.root, "--init"]) end end end @@ -299,7 +299,7 @@ def assert_exit_code(exit_code, severity, files = {}) err = assert_raises(SystemExit) do capture_io do - ThemeCheck::Cli.parse_and_run([storage.root, "--fail-level", severity, "-C", storage.path(".theme-check.yml").to_s]) + PlatformosCheck::Cli.parse_and_run([storage.root, "--fail-level", severity, "-C", storage.path(".theme-check.yml").to_s]) end end diff --git a/test/config_default_test.rb b/test/config_default_test.rb index 7e8f3465..b44dc4bc 100644 --- a/test/config_default_test.rb +++ b/test/config_default_test.rb @@ -2,7 +2,7 @@ require "test_helper" require "yaml" -module ThemeCheck +module PlatformosCheck class ConfigDefaultTest < Minitest::Test def setup @default_config = YAML.load(default_config_path.read) diff --git a/test/config_test.rb b/test/config_test.rb index afb37e8a..5b5f44be 100644 --- a/test/config_test.rb +++ b/test/config_test.rb @@ -8,7 +8,7 @@ def test_load_file_uses_provided_config TemplateLength: enabled: false END - config = ThemeCheck::Config.from_path(storage.root).to_h + config = PlatformosCheck::Config.from_path(storage.root).to_h refute(config.dig("TemplateLength", "enabled")) end @@ -20,23 +20,23 @@ def test_load_file_in_parent_dir END "dist/templates/index.liquid" => "", ) - config = ThemeCheck::Config.from_path(storage.root.join("dist")).to_h + config = PlatformosCheck::Config.from_path(storage.root.join("dist")).to_h refute(config.dig("TemplateLength", "enabled")) end def test_missing_file storage = make_file_system_storage - config = ThemeCheck::Config.from_path(storage.root) - assert_equal(ThemeCheck::Config.default, config.to_h) + config = PlatformosCheck::Config.from_path(storage.root) + assert_equal(PlatformosCheck::Config.default, config.to_h) end def test_from_path_uses_empty_config_when_config_file_is_missing - ThemeCheck::Config.expects(:new).with(root: 'theme/') - ThemeCheck::Config.from_path('theme/') + PlatformosCheck::Config.expects(:new).with(root: 'theme/') + PlatformosCheck::Config.from_path('theme/') end def test_from_string - config = ThemeCheck::Config.from_string(<<~CONFIG) + config = PlatformosCheck::Config.from_string(<<~CONFIG) TemplateLength: enabled: false CONFIG @@ -44,7 +44,7 @@ def test_from_string end def test_from_hash - config = ThemeCheck::Config.from_hash({ + config = PlatformosCheck::Config.from_hash({ "TemplateLength" => { "enabled" => false, }, @@ -53,19 +53,19 @@ def test_from_hash end def test_enabled_checks_excludes_disabled_checks - config = ThemeCheck::Config.new(root: ".", configuration: { "MissingTemplate" => { "enabled" => false } }) - refute(check_enabled?(config, ThemeCheck::MissingTemplate)) + config = PlatformosCheck::Config.new(root: ".", configuration: { "MissingTemplate" => { "enabled" => false } }) + refute(check_enabled?(config, PlatformosCheck::MissingTemplate)) end def test_root - config = ThemeCheck::Config.new(root: ".", configuration: { "root" => "dist" }) + config = PlatformosCheck::Config.new(root: ".", configuration: { "root" => "dist" }) assert_equal(Pathname.new("dist"), config.root) end def test_empty_file storage = make_file_system_storage(".theme-check.yml" => "") - config = ThemeCheck::Config.from_path(storage.root) - assert_equal(ThemeCheck::Config.default, config.to_h) + config = PlatformosCheck::Config.from_path(storage.root) + assert_equal(PlatformosCheck::Config.default, config.to_h) end def test_root_from_config @@ -75,7 +75,7 @@ def test_root_from_config END "dist/templates/index.liquid" => "", ) - config = ThemeCheck::Config.from_path(storage.root) + config = PlatformosCheck::Config.from_path(storage.root) assert_equal(storage.root.join("dist"), config.root) end @@ -98,12 +98,12 @@ def test_relative_extends "dist/templates/index.liquid" => "", ) - dist_config = ThemeCheck::Config.from_path(storage.root.join('dist')) + dist_config = PlatformosCheck::Config.from_path(storage.root.join('dist')) assert(dist_config.to_h.dig('MatchingTranslations', 'enabled')) refute(dist_config.to_h.dig('SyntaxError', 'enabled')) assert_equal(storage.root.join('dist'), dist_config.root) - root_config = ThemeCheck::Config.from_path(storage.root) + root_config = PlatformosCheck::Config.from_path(storage.root) refute(root_config.to_h.dig('MatchingTranslations', 'enabled')) refute(root_config.to_h.dig('SyntaxError', 'enabled')) assert_equal(storage.root.join('src'), root_config.root) @@ -122,10 +122,10 @@ def test_relative_extends_reused_root_is_relative_to_found_root END ) - project1_config = ThemeCheck::Config.from_path(storage.root.join('project1')) + project1_config = PlatformosCheck::Config.from_path(storage.root.join('project1')) assert_equal(storage.root.join('project1/src'), project1_config.root) - project2_config = ThemeCheck::Config.from_path(storage.root.join('project2')) + project2_config = PlatformosCheck::Config.from_path(storage.root.join('project2')) assert_equal(storage.root.join('project2/src'), project2_config.root) end @@ -142,7 +142,7 @@ def test_absolute_path_config END ) - config = ThemeCheck::Config.from_path(storage.root) + config = PlatformosCheck::Config.from_path(storage.root) refute(config.to_h.dig('SyntaxError', 'enabled')) end @@ -157,29 +157,29 @@ def test_picks_nearest_config enabled: true END ) - config = ThemeCheck::Config.from_path(storage.root.join("src")) + config = PlatformosCheck::Config.from_path(storage.root.join("src")) assert_equal(storage.root.join("src"), config.root) - assert(check_enabled?(config, ThemeCheck::TemplateLength)) + assert(check_enabled?(config, PlatformosCheck::TemplateLength)) end def test_respects_provided_root - config = ThemeCheck::Config.from_path(__dir__) + config = PlatformosCheck::Config.from_path(__dir__) assert_equal(Pathname.new(__dir__), config.root) end def test_enabled_checks_returns_default_checks_for_empty_config mock_default_config("SyntaxError" => { "enabled" => true }) - config = ThemeCheck::Config.new(root: ".") - assert(check_enabled?(config, ThemeCheck::SyntaxError)) + config = PlatformosCheck::Config.new(root: ".") + assert(check_enabled?(config, PlatformosCheck::SyntaxError)) end def test_warn_about_unknown_config mock_default_config("SyntaxError" => { "enabled" => true }) - ThemeCheck::Config.any_instance + PlatformosCheck::Config.any_instance .expects(:warn).with("unknown configuration: unknown") - ThemeCheck::Config.any_instance + PlatformosCheck::Config.any_instance .expects(:warn).with("unknown configuration: SyntaxError.unknown") - ThemeCheck::Config.new( + PlatformosCheck::Config.new( root: ".", configuration: { "unknown" => ".", @@ -195,13 +195,13 @@ def test_warn_about_type_mismatch "SyntaxError" => { "enabled" => true }, "TemplateLength" => { "enabled" => true }, ) - ThemeCheck::Config.any_instance + PlatformosCheck::Config.any_instance .expects(:warn).with("bad configuration type for root: expected a String, got []") - ThemeCheck::Config.any_instance + PlatformosCheck::Config.any_instance .expects(:warn).with("bad configuration type for SyntaxError.enabled: expected true or false, got nil") - ThemeCheck::Config.any_instance + PlatformosCheck::Config.any_instance .expects(:warn).with("bad configuration type for TemplateLength: expected a Hash, got true") - ThemeCheck::Config.new( + PlatformosCheck::Config.new( root: ".", configuration: { "root" => [], @@ -228,7 +228,7 @@ def test_merge_configs "enabled" => true, }, ) - config = ThemeCheck::Config.new( + config = PlatformosCheck::Config.new( root: ".", configuration: { "ignore": [ @@ -268,14 +268,14 @@ def test_custom_check enabled: true END "checks/custom_check.rb" => <<~END, - module ThemeCheck + module PlatformosCheck class CustomCheck < Check end end END ) - config = ThemeCheck::Config.from_path(storage.root) - assert(check_enabled?(config, ThemeCheck::CustomCheck)) + config = PlatformosCheck::Config.from_path(storage.root) + assert(check_enabled?(config, PlatformosCheck::CustomCheck)) end def test_custom_check_with_root @@ -290,30 +290,30 @@ def test_custom_check_with_root END "dist/layout/theme.liquid" => "", "checks/custom_check.rb" => <<~END, - module ThemeCheck + module PlatformosCheck class CustomCheck < Check end end END ) - config = ThemeCheck::Config.new( + config = PlatformosCheck::Config.new( root: storage.root, - configuration: ThemeCheck::Config.load_config(storage.root.join('.config/.theme-check.yml')) + configuration: PlatformosCheck::Config.load_config(storage.root.join('.config/.theme-check.yml')) ) - assert(check_enabled?(config, ThemeCheck::CustomCheck)) + assert(check_enabled?(config, PlatformosCheck::CustomCheck)) end def test_include_category - config = ThemeCheck::Config.new(root: ".") + config = PlatformosCheck::Config.new(root: ".") config.include_categories = [:liquid] assert(config.enabled_checks.any?) assert(config.enabled_checks.all? { |c| c.categories.include?(:liquid) }) end def test_include_categories - config = ThemeCheck::Config.new(root: ".") + config = PlatformosCheck::Config.new(root: ".") config.include_categories = [:liquid, :performance] assert(config.enabled_checks.any?) assert(config.enabled_checks.all? { |c| c.categories.include?(:liquid) && c.categories.include?(:performance) }) @@ -321,14 +321,14 @@ def test_include_categories end def test_exclude_category - config = ThemeCheck::Config.new(root: ".") + config = PlatformosCheck::Config.new(root: ".") config.exclude_categories = [:liquid] assert(config.enabled_checks.any?) assert(config.enabled_checks.none? { |c| c.categories.include?(:liquid) }) end def test_exclude_categories - config = ThemeCheck::Config.new(root: ".") + config = PlatformosCheck::Config.new(root: ".") config.exclude_categories = [:liquid, :performance] assert(config.enabled_checks.any?) assert(config.enabled_checks.none? { |c| c.categories.include?(:liquid) || c.categories.include?(:performance) }) @@ -342,7 +342,7 @@ def test_ignore - dist/*.json END ) - config = ThemeCheck::Config.from_path(storage.root) + config = PlatformosCheck::Config.from_path(storage.root) assert_equal(["node_modules", "dist/*.json"], config.ignored_patterns) end @@ -359,7 +359,7 @@ def test_merged_ignored_patterns - 'snippets/foo.js' END ) - config = ThemeCheck::Config.from_path(storage.root) + config = PlatformosCheck::Config.from_path(storage.root) missing_snippets_check = config.enabled_checks.find { |c| c.code_name == 'MissingTemplate' } assert_equal( ["snippets/foo.js", "node_modules", "dist/*.json"], @@ -374,8 +374,8 @@ def check_enabled?(config, klass) end def mock_default_config(config) - ThemeCheck::Config.stubs(:default).returns(config) - ThemeCheck::Config.stubs(:load_config).with(:default).returns(config) - ThemeCheck::Config.stubs(:load_config).with(":default").returns(config) + PlatformosCheck::Config.stubs(:default).returns(config) + PlatformosCheck::Config.stubs(:load_config).with(:default).returns(config) + PlatformosCheck::Config.stubs(:load_config).with(":default").returns(config) end end diff --git a/test/corrector_test.rb b/test/corrector_test.rb index b3b9ee22..495f290f 100644 --- a/test/corrector_test.rb +++ b/test/corrector_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class CorrectorTest < Minitest::Test def setup @contents = <<~END diff --git a/test/disabled_checks_test.rb b/test/disabled_checks_test.rb index 515a986d..fb462441 100644 --- a/test/disabled_checks_test.rb +++ b/test/disabled_checks_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class DisabledChecksTest < Minitest::Test # This check flags uses of the assign tag. class AssignCheck < Check diff --git a/test/documentation_test.rb b/test/documentation_test.rb index 5a1addac..c9df90c5 100644 --- a/test/documentation_test.rb +++ b/test/documentation_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class DocumentationTest < Minitest::Test def setup @checks = Check.all diff --git a/test/html_node_test.rb b/test/html_node_test.rb index a12fa7aa..46ddd11d 100644 --- a/test/html_node_test.rb +++ b/test/html_node_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class HtmlNodeTest < Minitest::Test def test_markup html = <<~HTML diff --git a/test/html_visitor_test.rb b/test/html_visitor_test.rb index 6de6598b..7c4a21e2 100644 --- a/test/html_visitor_test.rb +++ b/test/html_visitor_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class HtmlVisitorTest < Minitest::Test def setup @tracer = TracerCheck.new diff --git a/test/json_file_test.rb b/test/json_file_test.rb index 0f0d139d..6e4c7ffc 100644 --- a/test/json_file_test.rb +++ b/test/json_file_test.rb @@ -35,7 +35,7 @@ def test_parse_error_with_error def test_write storage = make_storage("a.json" => '{ "hello": "world" }') expected = { hello: "friend" } - @json = ThemeCheck::JsonFile.new("a.json", storage) + @json = PlatformosCheck::JsonFile.new("a.json", storage) @json.update_contents(expected) @json.write assert_equal(JSON.pretty_generate(expected), storage.read("a.json")) @@ -45,6 +45,6 @@ def test_write def make_json_file(name, content) storage = make_storage(name => content) - ThemeCheck::JsonFile.new(name, storage) + PlatformosCheck::JsonFile.new(name, storage) end end diff --git a/test/json_helpers_test.rb b/test/json_helpers_test.rb index 6f6afea5..6c597324 100644 --- a/test/json_helpers_test.rb +++ b/test/json_helpers_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class JsonHelpersTest < Minitest::Test include JsonHelpers diff --git a/test/language_server/bridge_test.rb b/test/language_server/bridge_test.rb index 87f2055b..b81103d1 100644 --- a/test/language_server/bridge_test.rb +++ b/test/language_server/bridge_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class BridgeTest < Minitest::Test def setup diff --git a/test/language_server/code_action_providers/quickfix_code_action_provider_test.rb b/test/language_server/code_action_providers/quickfix_code_action_provider_test.rb index c1df083a..b71f609a 100644 --- a/test/language_server/code_action_providers/quickfix_code_action_provider_test.rb +++ b/test/language_server/code_action_providers/quickfix_code_action_provider_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class QuickfixCodeActionProviderTest < Minitest::Test def setup @@ -18,9 +18,9 @@ def setup {% endschema %} LIQUID instances = diagnose_theme( - ThemeCheck::SpaceInsideBraces.new, - ThemeCheck::MatchingSchemaTranslations.new, - ThemeCheck::TemplateLength.new(max_length: 0), + PlatformosCheck::SpaceInsideBraces.new, + PlatformosCheck::MatchingSchemaTranslations.new, + PlatformosCheck::TemplateLength.new(max_length: 0), "index.liquid" => @index, "other.liquid" => <<~LIQUID, cookies diff --git a/test/language_server/code_action_providers/source_fix_all_code_action_provider_test.rb b/test/language_server/code_action_providers/source_fix_all_code_action_provider_test.rb index 75939272..83b4d112 100644 --- a/test/language_server/code_action_providers/source_fix_all_code_action_provider_test.rb +++ b/test/language_server/code_action_providers/source_fix_all_code_action_provider_test.rb @@ -1,13 +1,13 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class SourceFixAllCodeActionProviderTest < Minitest::Test def setup instances = diagnose_theme( - ThemeCheck::SpaceInsideBraces.new, - ThemeCheck::TemplateLength.new(max_length: 0), + PlatformosCheck::SpaceInsideBraces.new, + PlatformosCheck::TemplateLength.new(max_length: 0), "index.liquid" => <<~LIQUID, {{x}} muffin diff --git a/test/language_server/completion_context_test.rb b/test/language_server/completion_context_test.rb index df1fd481..dfade492 100644 --- a/test/language_server/completion_context_test.rb +++ b/test/language_server/completion_context_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class CompletionContextTest < Minitest::Test def setup diff --git a/test/language_server/completion_engine_test.rb b/test/language_server/completion_engine_test.rb index f2b41ffa..f1907a7d 100644 --- a/test/language_server/completion_engine_test.rb +++ b/test/language_server/completion_engine_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class CompletionEngineTest < Minitest::Test def setup diff --git a/test/language_server/completion_provider_test.rb b/test/language_server/completion_provider_test.rb index 327069cc..d18a0d5c 100644 --- a/test/language_server/completion_provider_test.rb +++ b/test/language_server/completion_provider_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class CompletionProviderTest < Minitest::Test def setup diff --git a/test/language_server/completion_providers/assignments_completion_provider_test.rb b/test/language_server/completion_providers/assignments_completion_provider_test.rb index 7aaa4a89..90cf5555 100644 --- a/test/language_server/completion_providers/assignments_completion_provider_test.rb +++ b/test/language_server/completion_providers/assignments_completion_provider_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class AssignmentsCompletionProviderTest < Minitest::Test include CompletionProviderTestHelper diff --git a/test/language_server/completion_providers/filter_completion_provider_test.rb b/test/language_server/completion_providers/filter_completion_provider_test.rb index c5ec94a9..0701f784 100644 --- a/test/language_server/completion_providers/filter_completion_provider_test.rb +++ b/test/language_server/completion_providers/filter_completion_provider_test.rb @@ -2,7 +2,7 @@ require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class FilterCompletionProviderTest < Minitest::Test include CompletionProviderTestHelper diff --git a/test/language_server/completion_providers/object_attribute_completion_provider_test.rb b/test/language_server/completion_providers/object_attribute_completion_provider_test.rb index 8c725895..2799a5a6 100644 --- a/test/language_server/completion_providers/object_attribute_completion_provider_test.rb +++ b/test/language_server/completion_providers/object_attribute_completion_provider_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class ObjectAttributeCompletionProviderTest < Minitest::Test include CompletionProviderTestHelper diff --git a/test/language_server/completion_providers/object_completion_provider_test.rb b/test/language_server/completion_providers/object_completion_provider_test.rb index b4f1f1fb..94d27ce8 100644 --- a/test/language_server/completion_providers/object_completion_provider_test.rb +++ b/test/language_server/completion_providers/object_completion_provider_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class ObjectCompletionProviderTest < Minitest::Test include CompletionProviderTestHelper diff --git a/test/language_server/completion_providers/tag_completion_provider_test.rb b/test/language_server/completion_providers/tag_completion_provider_test.rb index d47a90bc..33ba8b30 100644 --- a/test/language_server/completion_providers/tag_completion_provider_test.rb +++ b/test/language_server/completion_providers/tag_completion_provider_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class TagCompletionProviderTest < Minitest::Test include CompletionProviderTestHelper diff --git a/test/language_server/diagnostics_engine_test.rb b/test/language_server/diagnostics_engine_test.rb index f0038633..25667d1d 100644 --- a/test/language_server/diagnostics_engine_test.rb +++ b/test/language_server/diagnostics_engine_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class DiagnosticsEngineTest < Minitest::Test include URIHelper @@ -118,6 +118,7 @@ def test_analyze_and_send_offenses_mixed_mode # If you run analyze_and_send_offenses while one is running, the test should be skipped. def test_analyze_and_send_offenses_is_throttled + skip "Flaky test" # Setup test in single file mode analyze_and_send_offenses("snippets/a.liquid") @messenger.sent_messages.clear @@ -135,7 +136,7 @@ def test_analyze_and_send_offenses_is_throttled def analyze_and_send_offenses(path, only_single_file: false) @engine.analyze_and_send_offenses( @storage.path(path), - ThemeCheck::Config.from_path(@storage.root), + PlatformosCheck::Config.from_path(@storage.root), only_single_file: only_single_file ) end diff --git a/test/language_server/diagnostics_manager_test.rb b/test/language_server/diagnostics_manager_test.rb index bd8ebc37..f6467cd8 100644 --- a/test/language_server/diagnostics_manager_test.rb +++ b/test/language_server/diagnostics_manager_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class DiagnosticsManagerTest < Minitest::Test Offense = Struct.new( @@ -274,7 +274,7 @@ def test_delete_applied_returns_empty_diagnostics_if_all_were_cleared private def diagnose_theme(*check_classes, templates) - diagnostics_manager = ThemeCheck::LanguageServer::DiagnosticsManager.new + diagnostics_manager = PlatformosCheck::LanguageServer::DiagnosticsManager.new offenses = analyze_theme(*check_classes, templates) diagnostics_manager.build_diagnostics(offenses) diagnostics_manager diff --git a/test/language_server/document_change_corrector_test.rb b/test/language_server/document_change_corrector_test.rb index 4d483e6b..71f8bebb 100644 --- a/test/language_server/document_change_corrector_test.rb +++ b/test/language_server/document_change_corrector_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class DocumentChangeCorrectorTest < Minitest::Test include URIHelper diff --git a/test/language_server/document_link_engine_test.rb b/test/language_server/document_link_engine_test.rb index 516c7568..9177d88b 100644 --- a/test/language_server/document_link_engine_test.rb +++ b/test/language_server/document_link_engine_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class DocumentLinkEngineTest < Minitest::Test include PositionHelper diff --git a/test/language_server/handler_test.rb b/test/language_server/handler_test.rb index 86ac4ba7..65c8a20e 100644 --- a/test/language_server/handler_test.rb +++ b/test/language_server/handler_test.rb @@ -2,7 +2,7 @@ require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class HandlerTest < Minitest::Test include URIHelper @@ -208,7 +208,7 @@ def test_handle_workspace_did_delete_files_missing_template_handling def test_handle_text_document_close_by_clearing_diagnostics_with_only_single_file_checks initialize!(1, nil, @storage.root) initialized! - ThemeCheck::LanguageServer::Configuration.any_instance + PlatformosCheck::LanguageServer::Configuration.any_instance .stubs(:only_single_file?).returns(true) file_path = "snippets/error.liquid" @@ -233,7 +233,7 @@ def test_handle_text_document_close_by_clearing_diagnostics_with_only_single_fil def test_handle_text_document_close_does_not_clear_diagnostics_unless_only_single_file_checks initialize!(1, nil, @storage.root) initialized! - ThemeCheck::LanguageServer::Configuration.any_instance + PlatformosCheck::LanguageServer::Configuration.any_instance .stubs(:only_single_file?).returns(false) file_path = "snippets/error.liquid" @@ -273,7 +273,7 @@ def initialize!(id, root_uri_path, root_path = nil) end def initialized! - ThemeCheck::LanguageServer::Configuration.any_instance.stubs(:fetch).returns(nil) + PlatformosCheck::LanguageServer::Configuration.any_instance.stubs(:fetch).returns(nil) @handler.on_initialized(nil, nil) end diff --git a/test/language_server/io_messenger_test.rb b/test/language_server/io_messenger_test.rb index 289c3762..e8151f1e 100644 --- a/test/language_server/io_messenger_test.rb +++ b/test/language_server/io_messenger_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class IOMessengerTest < Minitest::Test def setup diff --git a/test/language_server/tokens_test.rb b/test/language_server/tokens_test.rb index 4589018e..b8d37b81 100644 --- a/test/language_server/tokens_test.rb +++ b/test/language_server/tokens_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class TokensTest < Minitest::Test def test_tokens contents = <<~LIQUID diff --git a/test/language_server/uri_helper_test.rb b/test/language_server/uri_helper_test.rb index e2d39b5a..f6c92c83 100644 --- a/test/language_server/uri_helper_test.rb +++ b/test/language_server/uri_helper_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class URIHelperTest < Minitest::Test include URIHelper diff --git a/test/language_server/variable_lookup_finder/assignments_finder_test.rb b/test/language_server/variable_lookup_finder/assignments_finder_test.rb index a6363f90..d5f1c99f 100644 --- a/test/language_server/variable_lookup_finder/assignments_finder_test.rb +++ b/test/language_server/variable_lookup_finder/assignments_finder_test.rb @@ -2,7 +2,7 @@ require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class AssignmentsFinderTest < Minitest::Test diff --git a/test/language_server/variable_lookup_finder/liquid_fixer_test.rb b/test/language_server/variable_lookup_finder/liquid_fixer_test.rb index 1a96a14a..57e755e8 100644 --- a/test/language_server/variable_lookup_finder/liquid_fixer_test.rb +++ b/test/language_server/variable_lookup_finder/liquid_fixer_test.rb @@ -2,7 +2,7 @@ require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer module VariableLookupFinder class LiquidFixerTest < Minitest::Test diff --git a/test/language_server/variable_lookup_finder_test.rb b/test/language_server/variable_lookup_finder_test.rb index 21ade42c..b376e048 100644 --- a/test/language_server/variable_lookup_finder_test.rb +++ b/test/language_server/variable_lookup_finder_test.rb @@ -2,7 +2,7 @@ require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class VariableLookupFinderTest < Minitest::Test def setup diff --git a/test/language_server_test.rb b/test/language_server_test.rb index fbeda1df..ab3c1e2d 100644 --- a/test/language_server_test.rb +++ b/test/language_server_test.rb @@ -3,13 +3,13 @@ require "test_helper" class LanguageServerTest < Minitest::Test - include ThemeCheck::LanguageServer::URIHelper + include PlatformosCheck::LanguageServer::URIHelper - Diagnostic = ThemeCheck::LanguageServer::Diagnostic + Diagnostic = PlatformosCheck::LanguageServer::Diagnostic def setup @messenger = MockMessenger.new - @server = ThemeCheck::LanguageServer::Server.new( + @server = PlatformosCheck::LanguageServer::Server.new( messenger: @messenger, should_raise_errors: true, number_of_threads: 1 @@ -52,13 +52,13 @@ def self.build(path) TemplateMock = Struct.new(:path, :relative_path) # Stringify keys - CAPABILITIES = ThemeCheck::LanguageServer::Handler::CAPABILITIES - SERVER_INFO = ThemeCheck::LanguageServer::Handler::SERVER_INFO + CAPABILITIES = PlatformosCheck::LanguageServer::Handler::CAPABILITIES + SERVER_INFO = PlatformosCheck::LanguageServer::Handler::SERVER_INFO def test_sends_offenses_on_open storage = make_file_system_storage("layout/theme.liquid" => "") offense = OffenseMock.build(storage.path("layout/theme.liquid")) - ThemeCheck::Analyzer.any_instance.stubs(:offenses).returns([offense]) + PlatformosCheck::Analyzer.any_instance.stubs(:offenses).returns([offense]) send_messages({ jsonrpc: "2.0", @@ -103,7 +103,7 @@ def test_sends_offenses_on_open def test_sends_offenses_on_text_document_did_save storage = make_file_system_storage("layout/theme.liquid" => "") offense = OffenseMock.build(storage.path("layout/theme.liquid")) - ThemeCheck::Analyzer.any_instance.expects(:offenses).returns([offense]) + PlatformosCheck::Analyzer.any_instance.expects(:offenses).returns([offense]) send_messages({ jsonrpc: "2.0", diff --git a/test/liquid_file_test.rb b/test/liquid_file_test.rb index aec427eb..2af56b71 100644 --- a/test/liquid_file_test.rb +++ b/test/liquid_file_test.rb @@ -3,7 +3,7 @@ class LiquidFileTest < Minitest::Test def setup - @theme_file = ThemeCheck::LiquidFile.new( + @theme_file = PlatformosCheck::LiquidFile.new( "templates/index.liquid", make_storage("templates/index.liquid" => <<~LIQUID)

Title

diff --git a/test/liquid_node_test.rb b/test/liquid_node_test.rb index d44f160c..bea67c66 100644 --- a/test/liquid_node_test.rb +++ b/test/liquid_node_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class LiquidNodeTest < Minitest::Test def test_markup root = root_node(<<~END) diff --git a/test/liquid_visitor_test.rb b/test/liquid_visitor_test.rb index 1561373c..b0d917d2 100644 --- a/test/liquid_visitor_test.rb +++ b/test/liquid_visitor_test.rb @@ -4,12 +4,12 @@ class LiquidVisitorTest < Minitest::Test def setup @tracer = TracerCheck.new - @visitor = ThemeCheck::LiquidVisitor.new(ThemeCheck::Checks.new([@tracer]), ThemeCheck::DisabledChecks.new) + @visitor = PlatformosCheck::LiquidVisitor.new(PlatformosCheck::Checks.new([@tracer]), PlatformosCheck::DisabledChecks.new) end def run # Liquid-C is disabled from the Analyzer, before the visitor is called - ThemeCheck.with_liquid_c_disabled { super } + PlatformosCheck.with_liquid_c_disabled { super } end def test_assign diff --git a/test/locale_diff_test.rb b/test/locale_diff_test.rb index 1086cb2e..cc1ee0a8 100644 --- a/test/locale_diff_test.rb +++ b/test/locale_diff_test.rb @@ -3,7 +3,7 @@ class LocaleDiffTest < Minitest::Test def test_no_diff - diff = ThemeCheck::LocaleDiff.new( + diff = PlatformosCheck::LocaleDiff.new( { "title" => "Hello" }, { "title" => "Bonjour" } ) @@ -12,7 +12,7 @@ def test_no_diff end def test_extra_keys - diff = ThemeCheck::LocaleDiff.new( + diff = PlatformosCheck::LocaleDiff.new( { "title" => "Hello", "general" => {} }, { "title" => "Bonjour", @@ -30,7 +30,7 @@ def test_extra_keys end def test_missing_keys - diff = ThemeCheck::LocaleDiff.new( + diff = PlatformosCheck::LocaleDiff.new( { "title" => "Bonjour", "help" => "Aide", @@ -44,10 +44,10 @@ def test_missing_keys assert_empty(diff.extra_keys) end - class MockCheck < ThemeCheck::LiquidCheck; end + class MockCheck < PlatformosCheck::LiquidCheck; end def test_add_as_offenses - diff = ThemeCheck::LocaleDiff.new( + diff = PlatformosCheck::LocaleDiff.new( { "help" => "Aide" }, { "title" => "Hello" }, ) diff --git a/test/offense_test.rb b/test/offense_test.rb index ec432a8f..1aecc9c3 100644 --- a/test/offense_test.rb +++ b/test/offense_test.rb @@ -21,7 +21,7 @@ def setup ) end - class Bogus < ThemeCheck::Check + class Bogus < PlatformosCheck::Check MESSAGE = "This is bogus" end @@ -31,7 +31,7 @@ def test_source_excerpt line_number: 2, markup: "1 + 2", ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal("{{ 1 + 2 }}", offense.source_excerpt) assert_equal("1 + 2", offense.markup) @@ -44,7 +44,7 @@ def test_truncated_source_excerpt line_number: 1, markup: "include 'icon-error'", ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal("{% include 'icon-error' %}{{ form.errors.translated_fields['email'] | capitalize }} {{ fo...", offense.source_excerpt) assert_equal("include 'icon-error'", offense.markup) @@ -59,7 +59,7 @@ def test_correct end_index: @theme["templates/index"].source.index('2 ') + 2, markup: "1 + 2", ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node, correction: proc { |c| c.insert_after(node, "abc") }) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node, correction: proc { |c| c.insert_after(node, "abc") }) offense.correct node.theme_file.write @@ -72,7 +72,7 @@ def test_location line_number: 2, markup: "1 + 2", ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal(1, offense.start_row) assert_equal(1, offense.end_row) assert_equal(5, offense.start_column) @@ -85,7 +85,7 @@ def test_multiline_markup_location line_number: 1, markup: "render 'product-card',\n product: product,\n show: true", ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal(0, offense.start_row) assert_equal(3, offense.start_column) assert_equal(2, offense.end_row) @@ -99,7 +99,7 @@ def test_multiline_markup_location_with_trailing_new_line line_number: 1, markup: markup ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal(0, offense.start_row) assert_equal(3, offense.start_column) assert_equal(5, offense.end_row) @@ -113,7 +113,7 @@ def test_multiline_markup_location_with_multiple_new_lines_back_to_back line_number: 1, markup: markup ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal(0, offense.start_row) assert_equal(3, offense.start_column) assert_equal(3, offense.end_row) @@ -126,7 +126,7 @@ def test_location_without_markup line_number: 1, markup: nil, ) - offense = ThemeCheck::Offense.new(check: Bogus.new, node: node) + offense = PlatformosCheck::Offense.new(check: Bogus.new, node: node) assert_equal(0, offense.start_row) assert_equal(0, offense.end_row) assert_equal(0, offense.start_column) @@ -134,13 +134,13 @@ def test_location_without_markup end def test_equal - assert_equal(ThemeCheck::Offense.new(check: Bogus.new, line_number: 2), ThemeCheck::Offense.new(check: Bogus.new, line_number: 2)) - refute_equal(ThemeCheck::Offense.new(check: Bogus.new, line_number: 1), ThemeCheck::Offense.new(check: Bogus.new, line_number: 2)) + assert_equal(PlatformosCheck::Offense.new(check: Bogus.new, line_number: 2), PlatformosCheck::Offense.new(check: Bogus.new, line_number: 2)) + refute_equal(PlatformosCheck::Offense.new(check: Bogus.new, line_number: 1), PlatformosCheck::Offense.new(check: Bogus.new, line_number: 2)) end def test_offense_in_range theme_file = stub(source: "supp world! how are you doing today?") - offense = ThemeCheck::Offense.new( + offense = PlatformosCheck::Offense.new( check: Bogus.new, markup: "world", theme_file: theme_file, @@ -178,7 +178,7 @@ def test_offense_in_range def test_offense_in_range_zero_length_offense theme_file = stub(source: '{ "json_file_without_line_numbers": "ok" }') - offense = ThemeCheck::Offense.new( + offense = PlatformosCheck::Offense.new( check: Bogus.new, theme_file: theme_file, ) diff --git a/test/parsing_helpers_test.rb b/test/parsing_helpers_test.rb index c6b30467..03246d45 100644 --- a/test/parsing_helpers_test.rb +++ b/test/parsing_helpers_test.rb @@ -2,7 +2,7 @@ require "test_helper" class ParsingHelpersTest < Minitest::Test - include ThemeCheck::ParsingHelpers + include PlatformosCheck::ParsingHelpers def test_outside_of_strings chunks = [] diff --git a/test/position_helper_test.rb b/test/position_helper_test.rb index cb65351b..62a1a14f 100644 --- a/test/position_helper_test.rb +++ b/test/position_helper_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck module LanguageServer class PositionHelperTest < Minitest::Test include PositionHelper diff --git a/test/position_test.rb b/test/position_test.rb index a2b40a7a..1e741e50 100644 --- a/test/position_test.rb +++ b/test/position_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class PositionTest < Minitest::Test def setup @contents = [ diff --git a/test/remote_asset_file_test.rb b/test/remote_asset_file_test.rb index ead445f6..e58cba27 100644 --- a/test/remote_asset_file_test.rb +++ b/test/remote_asset_file_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class RemoteAssetFileTest < Minitest::Test def setup @src = 'https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js' diff --git a/test/schema_helper_test.rb b/test/schema_helper_test.rb index 1d7de1a5..ba744c15 100644 --- a/test/schema_helper_test.rb +++ b/test/schema_helper_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class SchemaHelperTest < Minitest::Test def test_set assert_equal({ "a" => { "b" => 1 } }, SchemaHelper.set({}, 'a.b', 1)) diff --git a/test/shopify_liquid/documentation/markdown_template_test.rb b/test/shopify_liquid/documentation/markdown_template_test.rb index ca430b03..f9dc8e39 100644 --- a/test/shopify_liquid/documentation/markdown_template_test.rb +++ b/test/shopify_liquid/documentation/markdown_template_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class Documentation class MarkdownTemplateTest < Minitest::Test diff --git a/test/shopify_liquid/documentation_test.rb b/test/shopify_liquid/documentation_test.rb index 6816c12c..2000f12a 100644 --- a/test/shopify_liquid/documentation_test.rb +++ b/test/shopify_liquid/documentation_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class DocumentationTest < Minitest::Test def test_filter_doc diff --git a/test/shopify_liquid/source_index/base_entry_test.rb b/test/shopify_liquid/source_index/base_entry_test.rb index 58cf9e23..d79d4dbf 100644 --- a/test/shopify_liquid/source_index/base_entry_test.rb +++ b/test/shopify_liquid/source_index/base_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class BaseEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/filter_entry_test.rb b/test/shopify_liquid/source_index/filter_entry_test.rb index 3387e46e..df00fd1a 100644 --- a/test/shopify_liquid/source_index/filter_entry_test.rb +++ b/test/shopify_liquid/source_index/filter_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class FilterEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/filter_state_test.rb b/test/shopify_liquid/source_index/filter_state_test.rb index ba57f404..7f5034e1 100644 --- a/test/shopify_liquid/source_index/filter_state_test.rb +++ b/test/shopify_liquid/source_index/filter_state_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class FilterStateTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/object_entry_test.rb b/test/shopify_liquid/source_index/object_entry_test.rb index c5ee0d0c..9c4e4fde 100644 --- a/test/shopify_liquid/source_index/object_entry_test.rb +++ b/test/shopify_liquid/source_index/object_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ObjectEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/object_state_test.rb b/test/shopify_liquid/source_index/object_state_test.rb index bc131eea..dae04ab8 100644 --- a/test/shopify_liquid/source_index/object_state_test.rb +++ b/test/shopify_liquid/source_index/object_state_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ObjectStateTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/parameter_entry_test.rb b/test/shopify_liquid/source_index/parameter_entry_test.rb index c48b7026..1391e6af 100644 --- a/test/shopify_liquid/source_index/parameter_entry_test.rb +++ b/test/shopify_liquid/source_index/parameter_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ParameterEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/property_entry_test.rb b/test/shopify_liquid/source_index/property_entry_test.rb index 573b1e98..0178c7ac 100644 --- a/test/shopify_liquid/source_index/property_entry_test.rb +++ b/test/shopify_liquid/source_index/property_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class PropertyEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/return_type_entry_test.rb b/test/shopify_liquid/source_index/return_type_entry_test.rb index 27d63662..f668ad5e 100644 --- a/test/shopify_liquid/source_index/return_type_entry_test.rb +++ b/test/shopify_liquid/source_index/return_type_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class ReturnTypeEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/tag_entry_test.rb b/test/shopify_liquid/source_index/tag_entry_test.rb index 9d739878..063874b4 100644 --- a/test/shopify_liquid/source_index/tag_entry_test.rb +++ b/test/shopify_liquid/source_index/tag_entry_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class TagEntryTest < Minitest::Test diff --git a/test/shopify_liquid/source_index/tag_state_test.rb b/test/shopify_liquid/source_index/tag_state_test.rb index 8c463647..524f961a 100644 --- a/test/shopify_liquid/source_index/tag_state_test.rb +++ b/test/shopify_liquid/source_index/tag_state_test.rb @@ -2,7 +2,7 @@ require 'test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndex class TagStateTest < Minitest::Test diff --git a/test/shopify_liquid/source_index_test.rb b/test/shopify_liquid/source_index_test.rb index 1f0fdb95..cf25f673 100644 --- a/test/shopify_liquid/source_index_test.rb +++ b/test/shopify_liquid/source_index_test.rb @@ -3,7 +3,7 @@ require 'test_helper' require_relative './source_test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceIndexTest < Minitest::Test include SourceTestHelper diff --git a/test/shopify_liquid/source_manager_test.rb b/test/shopify_liquid/source_manager_test.rb index 9fc06cf7..071fa4bd 100644 --- a/test/shopify_liquid/source_manager_test.rb +++ b/test/shopify_liquid/source_manager_test.rb @@ -3,7 +3,7 @@ require 'test_helper' require_relative './source_test_helper' -module ThemeCheck +module PlatformosCheck module ShopifyLiquid class SourceManagerTest < Minitest::Test include SourceTestHelper diff --git a/test/shopify_liquid/source_test_helper.rb b/test/shopify_liquid/source_test_helper.rb index 532bf3fa..a04eb896 100644 --- a/test/shopify_liquid/source_test_helper.rb +++ b/test/shopify_liquid/source_test_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module ThemeCheck +module PlatformosCheck module ShopifyLiquid module SourceTestHelper # Use a documentation folder in the test/ directory by default diff --git a/test/shopify_liquid_test.rb b/test/shopify_liquid_test.rb index bc73888f..570cb65d 100644 --- a/test/shopify_liquid_test.rb +++ b/test/shopify_liquid_test.rb @@ -5,17 +5,17 @@ class ShopifyLiquidTest < Minitest::Test def test_deprecated_filter_alternatives assert_equal( ['color_to_rgb', 'color_modify'].sort, - ThemeCheck::ShopifyLiquid::DeprecatedFilter.alternatives('hex_to_rgba').sort, + PlatformosCheck::ShopifyLiquid::DeprecatedFilter.alternatives('hex_to_rgba').sort, ) - assert_nil(ThemeCheck::ShopifyLiquid::DeprecatedFilter.alternatives('color_to_rgb')) + assert_nil(PlatformosCheck::ShopifyLiquid::DeprecatedFilter.alternatives('color_to_rgb')) end def test_filter_labels - assert_operator(ThemeCheck::ShopifyLiquid::Filter.labels.size, :>=, 169) + assert_operator(PlatformosCheck::ShopifyLiquid::Filter.labels.size, :>=, 169) end def test_object_labels - assert_operator(ThemeCheck::ShopifyLiquid::Object.labels.size, :>=, 119) + assert_operator(PlatformosCheck::ShopifyLiquid::Object.labels.size, :>=, 119) end end diff --git a/test/test_helper.rb b/test/test_helper.rb index 1859e0f9..85850892 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true $LOAD_PATH.unshift(File.expand_path("../../lib", __FILE__)) -require "theme_check" +require "platformos_check" require "minitest/autorun" require "minitest/focus" require "mocha/minitest" @@ -49,7 +49,7 @@ def pretty_print(hash) def parse_liquid(code) storage = make_storage("file.liquid" => code) - ThemeCheck::LiquidFile.new("file.liquid", storage) + PlatformosCheck::LiquidFile.new("file.liquid", storage) end def liquid_c_enabled? @@ -57,23 +57,23 @@ def liquid_c_enabled? end def analyze_theme(*check_classes, templates) - analyzer = ThemeCheck::Analyzer.new(make_theme(templates), check_classes) + analyzer = PlatformosCheck::Analyzer.new(make_theme(templates), check_classes) analyzer.analyze_theme analyzer.offenses end def diagnose_theme(*check_classes, templates) - storage = ThemeCheck::VersionedInMemoryStorage.new(templates) + storage = PlatformosCheck::VersionedInMemoryStorage.new(templates) templates.each do |path, value| # set initial version of the files to 1 storage.write(path, value, 1) end - theme = ThemeCheck::Theme.new(storage) - analyzer = ThemeCheck::Analyzer.new(theme, check_classes) + theme = PlatformosCheck::Theme.new(storage) + analyzer = PlatformosCheck::Analyzer.new(theme, check_classes) analyzer.analyze_theme offenses = analyzer.offenses - diagnostics_manager = ThemeCheck::LanguageServer::DiagnosticsManager.new + diagnostics_manager = PlatformosCheck::LanguageServer::DiagnosticsManager.new diagnostics_manager.build_diagnostics(offenses) { diagnostics_manager: diagnostics_manager, @@ -83,7 +83,7 @@ def diagnose_theme(*check_classes, templates) def make_theme(files = {}) storage = make_storage(files) - ThemeCheck::Theme.new(storage) + PlatformosCheck::Theme.new(storage) end def make_storage(files = {}) @@ -99,16 +99,16 @@ def make_file_system_storage(files = {}) path.write(content, mode: 'w+b') end at_exit { dir.rmtree } - ThemeCheck::FileSystemStorage.new(dir) + PlatformosCheck::FileSystemStorage.new(dir) end def make_in_memory_storage(files = {}) - ThemeCheck::InMemoryStorage.new(files) + PlatformosCheck::InMemoryStorage.new(files) end def fix_theme(*check_classes, templates) theme = make_theme(templates) - analyzer = ThemeCheck::Analyzer.new(theme, check_classes, true) + analyzer = PlatformosCheck::Analyzer.new(theme, check_classes, true) analyzer.analyze_theme analyzer.correct_offenses sources = theme.liquid.map { |theme_file| [theme_file.relative_path.to_s, theme_file.rewriter.to_s] } @@ -218,11 +218,11 @@ def mock_context(provider, token, offset) line = lines.size + 1 col = lines.last.size + offset - ThemeCheck::LanguageServer::CompletionContext.new(storage, relative_path, line, col) + PlatformosCheck::LanguageServer::CompletionContext.new(storage, relative_path, line, col) end end - class TracerCheck < ThemeCheck::Check + class TracerCheck < PlatformosCheck::Check attr_reader :calls def initialize @@ -251,7 +251,7 @@ def after_node(node) end end - class MockMessenger < ThemeCheck::LanguageServer::Messenger + class MockMessenger < PlatformosCheck::LanguageServer::Messenger attr_accessor :logs, :sent_messages attr_writer :supports_work_done_progress @@ -265,7 +265,7 @@ def initialize def read_message @queue.pop ensure - raise ThemeCheck::LanguageServer::DoneStreaming if @queue.closed? + raise PlatformosCheck::LanguageServer::DoneStreaming if @queue.closed? end def send_message(message_body) diff --git a/test/theme_file_test.rb b/test/theme_file_test.rb index 4ad40800..aded72fe 100644 --- a/test/theme_file_test.rb +++ b/test/theme_file_test.rb @@ -1,7 +1,7 @@ # frozen_string_literal: true require "test_helper" -module ThemeCheck +module PlatformosCheck class ThemeFileTest < Minitest::Test def setup @theme = make_theme( diff --git a/test/theme_test.rb b/test/theme_test.rb index 9c9f9055..9f7d9dff 100644 --- a/test/theme_test.rb +++ b/test/theme_test.rb @@ -20,17 +20,17 @@ def test_all def test_assets assert_equal(2, @theme.assets.size) - assert(@theme.assets.all? { |a| a.instance_of?(ThemeCheck::AssetFile) }) + assert(@theme.assets.all? { |a| a.instance_of?(PlatformosCheck::AssetFile) }) end def test_liquid assert_equal(3, @theme.liquid.size) - assert(@theme.liquid.all? { |a| a.instance_of?(ThemeCheck::LiquidFile) }) + assert(@theme.liquid.all? { |a| a.instance_of?(PlatformosCheck::LiquidFile) }) end def test_json assert_equal(2, @theme.json.size) - assert(@theme.json.all? { |a| a.instance_of?(ThemeCheck::JsonFile) }) + assert(@theme.json.all? { |a| a.instance_of?(PlatformosCheck::JsonFile) }) end def test_by_name @@ -60,7 +60,7 @@ def test_default_locale end def test_ignore - storage = ThemeCheck::FileSystemStorage.new(make_file_system_storage( + storage = PlatformosCheck::FileSystemStorage.new(make_file_system_storage( "templates/index.liquid" => "", "ignored/product.liquid" => "", "ignored/nested/product.liquid" => "", @@ -70,7 +70,7 @@ def test_ignore "ignored/*", "*.json", ]) - theme = ThemeCheck::Theme.new(storage) + theme = PlatformosCheck::Theme.new(storage) assert_equal([], theme.json.map(&:name)) assert_equal(["templates/index"], theme.liquid.map(&:name))