-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
local variables should always win over helper #17121
Comments
IMHO, this is clearly a bug and we should just fix it (Option 1). |
imo, these are also bugs but in the sub-expression positions, but that's probably more controversial: https://ember-twiddle.com/95790479cef1d910bdc12ffcfc446149?openFiles=templates.application.hbs%2C (cc @wycats @mmun) |
Not sure if the approach is still good for the current glimmer codebase, but here was the last patch that fixed the |
👍 from me. I agree with all the statements in the second twiddle. |
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the precense of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{foo 1 2 3}} ~~~ local variable invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This will now invoke `foo` local variable as a contextual component. (In other words, this removes the remaining "dot rule" exceptions for contextual components, as per [RFC #311](https://github.com/emberjs/rfcs/blob/master/text/0311-angle-bracket-invocation.md).) This commit also fixed another related issue: ```hbs {{#let (hash foo="foo-bar") as |h|}} {{h.foo 1 2 3}} ~~~~~ this is a string, not a component! {{/let}} ``` Previously, this would have tried to resolve and invoke the `foo-bar` component. This is an unintended consequence (i.e. a bug) of the "dot rule" implementation. This will now raise a `TypeError` in development mode and result in undefined behavior in production builds (probably some other runtime error deep inside the Glimmer VM internals). Fixes #17121.
```hbs {{#let this.foo as |foo|}} {{foo 1 2 3}} ~~~ local variable invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This will now invoke `foo` local variable as a contextual component. (In other words, this removes the remaining "dot rule" exceptions for contextual components, as per [RFC #311](https://github.com/emberjs/rfcs/blob/master/text/0311-angle-bracket-invocation.md).) This commit also fixed another related issue: ```hbs {{#let (hash foo="foo-bar") as |h|}} {{h.foo 1 2 3}} ~~~~~ this is a string, not a component! {{/let}} ``` Previously, this would have tried to resolve and invoke the `foo-bar` component. This is an unintended consequence (i.e. a bug) of the "dot rule" implementation. This will now raise a `TypeError` in development mode and result in undefined behavior in production builds (probably some other runtime error deep inside the Glimmer VM internals). Fixes #17121.
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{foo 1 2 3}} ~~~ local variable invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This will now invoke `foo` local variable as a contextual component. In other words, this removes the remaining "dot rule" exceptions for contextual components, as per [RFC #311](https://github.com/emberjs/rfcs/blob/master/text/0311-angle-bracket-invocation.md): > We propose to relax that rule to match the proposed angle bracket > invocation semantics (i.e. allowing local variables without a dot, as > well as `@names`, but disallowing implicit `this` lookup). This commit also fixed another related issue: ```hbs {{#let (hash foo="foo-bar") as |h|}} {{h.foo 1 2 3}} ~~~~~ this is a string, not a component! {{/let}} ``` Previously, this would have tried to resolve and invoke the `foo-bar` component. This is an unintended consequence (i.e. a bug) of the "dot rule" implementation. This will now raise a `TypeError` in development mode and result in undefined behavior in production builds (probably some other runtime error deep inside the Glimmer VM internals). Fixes #17121.
```hbs {{#let this.foo as |foo|}} {{foo 1 2 3}} ~~~ local variable invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This will now invoke `foo` local variable as a contextual component. In other words, this removes the remaining "dot rule" exceptions for contextual components, as per [RFC #311](https://github.com/emberjs/rfcs/blob/master/text/0311-angle-bracket-invocation.md): > We propose to relax that rule to match the proposed angle bracket > invocation semantics (i.e. allowing local variables without a dot, as > well as `@names`, but disallowing implicit `this` lookup). This commit also fixed another related issue: ```hbs {{#let (hash foo="foo-bar") as |h|}} {{h.foo 1 2 3}} ~~~~~ this is a string, not a component! {{/let}} ``` Previously, this would have tried to resolve and invoke the `foo-bar` component. This is an unintended consequence (i.e. a bug) of the "dot rule" implementation. This will now raise a `TypeError` in development mode and result in undefined behavior in production builds (probably some other runtime error deep inside the Glimmer VM internals). Fixes #17121, #16510.
```hbs {{#let this.foo as |foo|}} {{concat (foo)}} ~~~ shadowed helper invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This is now an error (assertion). This paves the way for allowing "contextual helpers" in the future, where the local variable `foo` contains an invocable helper value. Partially addresses #17121, allowing the rest of the bugs to be fixed in Glimmer VM.
```hbs {{#let this.foo as |foo|}} {{foo 1 2 3}} ~~~ local variable invocation! {{/let}} ``` Previously, this would have tried to resolve and invoke the helper `foo`, ignoring the presence of the `foo` local variable. This is inconsistent with our general lexical lookup rules. This will now invoke `foo` local variable as a contextual component. In other words, this removes the remaining "dot rule" exceptions for contextual components, as per [RFC #311](https://github.com/emberjs/rfcs/blob/master/text/0311-angle-bracket-invocation.md): > We propose to relax that rule to match the proposed angle bracket > invocation semantics (i.e. allowing local variables without a dot, as > well as `@names`, but disallowing implicit `this` lookup). This commit also fixed another related issue: ```hbs {{#let (hash foo="foo-bar") as |h|}} {{h.foo 1 2 3}} ~~~~~ this is a string, not a component! {{/let}} ``` Previously, this would have tried to resolve and invoke the `foo-bar` component. This is an unintended consequence (i.e. a bug) of the "dot rule" implementation. This will now raise a `TypeError` in development mode and result in undefined behavior in production builds (probably some other runtime error deep inside the Glimmer VM internals). Fixes #17121, #16510.
We tried to fix this in #14520, but apparently we didn't catch all the cases.
Reproduction: https://ember-twiddle.com/dcce0cd429ceb1d454d62988937bfd15?openFiles=templates.application.hbs%2C
Options are:
The text was updated successfully, but these errors were encountered: