Skip to content

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

Merged
rwjblue merged 1 commit intomasterfrom
assert-local-variable-shadowing-helper-invocation
Oct 19, 2018
Merged

[BUGFIX beta] Assert when local variables shadow helper invocations#17132
rwjblue merged 1 commit intomasterfrom
assert-local-variable-shadowing-helper-invocation

Conversation

@chancancode
Copy link
Copy Markdown
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
Copy Markdown
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
Copy Markdown
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