Skip to content
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

[BUGFIX beta] Assert when local variables shadow helper invocations #17132

Merged
merged 1 commit into from
Oct 19, 2018

Conversation

chancancode
Copy link
Member

{{#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.

@chancancode chancancode force-pushed the assert-local-variable-shadowing-helper-invocation branch from dd946a7 to 2a12602 Compare October 19, 2018 01:34
@rwjblue
Copy link
Member

rwjblue commented Oct 19, 2018

Looks like we have some linting failures...

@chancancode chancancode force-pushed the assert-local-variable-shadowing-helper-invocation branch 2 times, most recently from a90fd0a to d581fd5 Compare October 19, 2018 06:06
@chancancode
Copy link
Member Author

chancancode commented Oct 19, 2018

The linter wasn't happy with my Artisanal™ indentation. Not super happy with its suggestions but the linter is going to spend a lot more time looking at this file than me, so I could live with it 🤷‍♂️

@chancancode chancancode force-pushed the assert-local-variable-shadowing-helper-invocation branch from d581fd5 to 54d4977 Compare October 19, 2018 07:01
```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.
@chancancode chancancode force-pushed the assert-local-variable-shadowing-helper-invocation branch from 54d4977 to f66ca05 Compare October 19, 2018 09:57
@rwjblue rwjblue merged commit d600a1d into master Oct 19, 2018
@rwjblue rwjblue deleted the assert-local-variable-shadowing-helper-invocation branch October 19, 2018 14:36
chancancode added a commit that referenced this pull request Oct 20, 2018
Expanding #17132 to cover modifiers.

```hbs
{{#let this.foo as |foo|}}
  <div {{foo}} />
         ~~~ shadowed modifier invocation!
{{/let}}
```

Previously, this would have tried to resolve and invoke the modifier `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 modifiers" in the future, where
the local variable `foo` contains an invocable modifier value.
chancancode added a commit that referenced this pull request Oct 20, 2018
Expanding #17132 to cover modifiers.

```hbs
{{#let this.foo as |foo|}}
  <div {{foo}} />
         ~~~ shadowed modifier invocation!
{{/let}}
```

Previously, this would have tried to resolve and invoke the modifier `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 modifiers" in the future, where
the local variable `foo` contains an invocable modifier value.
chancancode added a commit that referenced this pull request Oct 21, 2018
Expanding #17132 to cover modifiers.

```hbs
{{#let this.foo as |foo|}}
  <div {{foo}} />
         ~~~ shadowed modifier invocation!
{{/let}}
```

Previously, this would have tried to resolve and invoke the modifier `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 modifiers" in the future, where
the local variable `foo` contains an invocable modifier value.

(cherry picked from commit 74b8f60)
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