Add support for arrow functions#871
Closed
antoineveldhoven wants to merge 16 commits into
Closed
Conversation
7c375e6 to
93a1b6b
Compare
eabe55c to
ee22d77
Compare
willrowe
requested changes
Oct 11, 2023
| { | ||
| type: Twig.expression.type.operator.binary, | ||
| // Match any of ??, ?:, +, *, /, -, %, ~, <, <=, >, >=, !=, ==, **, ?, :, and, b-and, or, b-or, b-xor, in, not in | ||
| // Match any of ??, ?:, +, *, /, -, %, ~, <=>, <, <=, >, >=, !=, ==, **, ?, :, and, b-and, or, b-or, b-xor, in, not in |
Collaborator
There was a problem hiding this comment.
Remove this change and submit as separate PR.
| // Match any of ??, ?:, +, *, /, -, %, ~, <=>, <, <=, >, >=, !=, ==, **, ?, :, and, b-and, or, b-or, b-xor, in, not in | ||
| // and, or, in, not in, matches, starts with, ends with can be followed by a space or parenthesis | ||
| regex: /(^\?\?|^\?:|^(b-and)|^(b-or)|^(b-xor)|^[+\-~%?]|^[:](?!\d\])|^[!=]==?|^[!<>]=?|^\*\*?|^\/\/?|^(and)[(|\s+]|^(or)[(|\s+]|^(in)[(|\s+]|^(not in)[(|\s+]|^(matches)|^(starts with)|^(ends with)|^\.\.)/, | ||
| regex: /(^\?\?|^\?:|^(b-and)|^(b-or)|^(b-xor)|^[+\-~%?]|^(<=>)|^[:](?!\d\])|^[!=]==?|^[!<>]=?|^\*\*?|^\/\/?|^(and)[(|\s+]|^(or)[(|\s+]|^(in)[(|\s+]|^(not in)[(|\s+]|^(matches)|^(starts with)|^(ends with)|^\.\.)/, |
Collaborator
There was a problem hiding this comment.
Remove this change and submit as separate PR.
| token.precidence = 9; | ||
| token.associativity = Twig.expression.operator.leftToRight; | ||
| break; | ||
|
|
Collaborator
There was a problem hiding this comment.
Remove this change and submit as separate PR.
| case '<=>': | ||
| stack.push(a === b ? 0 : (a < b ? -1 : 1)); | ||
| break; | ||
|
|
Collaborator
There was a problem hiding this comment.
Remove this change and submit as separate PR.
| const template = Twig.exports.twig({data: params.body}); | ||
| return template.render(data); | ||
| }, params.args || 0); | ||
| } |
Collaborator
There was a problem hiding this comment.
Remove these changes and submit as a separate PR after this is one merged.
| const output = testTemplate.render(pair); | ||
| output.should.equal((pair.a === pair.b ? 0 : (pair.a < pair.b ? -1 : 1)).toString()); | ||
| }); | ||
| }); |
Collaborator
There was a problem hiding this comment.
Remove this change and submit as separate PR.
| testTemplate.render().should.equal('18'); | ||
| }); | ||
| }); | ||
|
|
Collaborator
There was a problem hiding this comment.
Remove these changes and submit as a separate PR after this is one merged.
Co-authored-by: Will Rowe <willrowe@users.noreply.github.com>
Co-authored-by: Will Rowe <willrowe@users.noreply.github.com>
Co-authored-by: Will Rowe <willrowe@users.noreply.github.com>
Co-authored-by: Will Rowe <willrowe@users.noreply.github.com>
Co-authored-by: Will Rowe <willrowe@users.noreply.github.com>
Co-authored-by: Will Rowe <willrowe@users.noreply.github.com>
Contributor
Author
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Aiming to resolve #652
I'm not (yet) quite convinced if this is the way to go; would really like to get some discussion going on how to approach this and eventually get this fixed and merged.
Implementation of arrow functions in filters:
Object manipulation is not really supported; this implementation accepts a callbackFunction (Twig syntax) which is compiled and parsed as a new (runtime) template. The return values (e.g. output) of the callBackFunctions are delegated to their respective JS functions.
As previously stated: this is merely a functional (read dirty) workaround; but for most of the use cases it will do the trick.