# frozen_string_literal: true module PlatformosCheck module LanguageServer def self.partial_tag(tag, with_rc: false) / \{%-?\s*#{tag}#{'(_rc)?' if with_rc}\s+'(?[^']*)'| \{%-?\s*#{tag}#{'(_rc)?' if with_rc}\s+"(?[^"]*)"| # in liquid tags the whole line is white space until the tag ^\s*#{tag}#{'(_rc)?' if with_rc}\s+'(?[^']*)'| ^\s*#{tag}#{'(_rc)?' if with_rc}\s+"(?[^"]*)" /mix end def self.partial_tag_with_result(tag) / \{%-?\s*#{tag}\s+(?[\w]+)\s*=\s*'(?[^']*)'| \{%-?\s*#{tag}\s+(?[\w]+)\s*=\s*"(?[^"]*)"| # in liquid tags the whole line is white space until the tag ^\s*#{tag}\s+(?[\w]+)+\s*=\s*'(?[^']*)'| ^\s*#{tag}\s+(?[\w]+)+\s*=\s*"(?[^"]*)" /mix end PARTIAL_RENDER = partial_tag('render') PARTIAL_THEME_RENDER = partial_tag('theme_render', with_rc: true) PARTIAL_INCLUDE = partial_tag('include') PARTIAL_INCLUDE_FORM = partial_tag('include_form') PARTIAL_FUNCTION = partial_tag_with_result('function') PARTIAL_GRAPHQL = partial_tag_with_result('graphql') PARTIAL_BACKGROUND = partial_tag_with_result('background') TAGS_FOR_FILTERS = 'echo|print|log|hash_assign|assign' TRANSLATION_FILTERS_NAMES = 'translate|t_escape|translate_escape|t[^\\w]' OPTIONAL_SCOPE_ARGUMENT = %((:?([\\w:'"\\s]*)\\s*(scope:\\s*['"](?[^'"]*)['"]))?) LOCALIZE_FILTERS_NAMES = '' ASSET_INCLUDE = / \{\{-?\s*'(?[^']*)'\s*\|\s*asset_url| \{\{-?\s*"(?[^"]*)"\s*\|\s*asset_url| # in liquid tags the whole line is white space until the asset partial ^\s*(?:#{TAGS_FOR_FILTERS}[^=]*=)\s*'(?[^']*)'\s*\|\s*asset_url| ^\s*(?:#{TAGS_FOR_FILTERS}[^=]*=)\s*"(?[^"]*)"\s*\|\s*asset_url /mix TRANSLATION_FILTER = / '(?[^']*)'\s*\|\s*(#{TRANSLATION_FILTERS_NAMES})#{OPTIONAL_SCOPE_ARGUMENT}| "(?[^"]*)"\s*\|\s*(#{TRANSLATION_FILTERS_NAMES})#{OPTIONAL_SCOPE_ARGUMENT} /mix LOCALIZE_FILTER = / [\s\w'"-:.]+\|\s*(localize|l):\s*'(?[^']*)'| [\s\w'"-:.]+\|\s*(localize|l):\s*"(?[^"]*)" /mix end end