Skip to content

Fix strict parsing of find variable with a name expression#1317

Merged
dylanahsmith merged 3 commits into
masterfrom
strict-parse-dynamic-find-var
Oct 19, 2020
Merged

Fix strict parsing of find variable with a name expression#1317
dylanahsmith merged 3 commits into
masterfrom
strict-parse-dynamic-find-var

Conversation

@dylanahsmith
Copy link
Copy Markdown
Contributor

Problem

As discussed in Shopify/liquid-c#60 (comment) the strict parser doesn't support finding a variable with an expression key like {{ [x] }}. This seems like a bug, since I don't believe it was the intention of the strict parser to remove any features. This is also an incompatibility with liquid-c, where its strict parser has allowed this type of dynamic find variable.

Solution

I've added a regression test, which fails with the syntax error we were seeing without the corresponding fix.

I also turned Liquid::Parser#variable_signature into a variable_lookups method that no longer assumes the it starts with a dot lookup. I've refactored Liquid::Parser#expression to use a case statement, then added the new :open_square case.

@dylanahsmith dylanahsmith merged commit 784db05 into master Oct 19, 2020
@dylanahsmith dylanahsmith deleted the strict-parse-dynamic-find-var branch October 19, 2020 17:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants