diff --git a/packages/@ember/-internals/environment/lib/env.ts b/packages/@ember/-internals/environment/lib/env.ts index 93f3d1ac326..f8b196b7aad 100644 --- a/packages/@ember/-internals/environment/lib/env.ts +++ b/packages/@ember/-internals/environment/lib/env.ts @@ -155,23 +155,6 @@ export const ENV = { */ _RERENDER_LOOP_LIMIT: 1000, - /** - Allows disabling the implicit this property fallback deprecation. This could be useful - as a way to control the volume of deprecations that are issued by temporarily disabling - the implicit this fallback deprecations, which would allow the other deprecations to be more easily - identified in the console). - - NOTE: The fallback behavior **will be removed** in Ember 4.0.0, disabling **_IS NOT_** - a viable strategy for handling this deprecation. - - @property _DISABLE_PROPERTY_FALLBACK_DEPRECATION - @for EmberENV - @type boolean - @default false - @private - */ - _DISABLE_PROPERTY_FALLBACK_DEPRECATION: false, - EMBER_LOAD_HOOKS: {} as { [hook: string]: Function[]; }, diff --git a/packages/@ember/-internals/glimmer/lib/environment.ts b/packages/@ember/-internals/glimmer/lib/environment.ts index 12a91fcb41d..3e6cafbde2a 100644 --- a/packages/@ember/-internals/glimmer/lib/environment.ts +++ b/packages/@ember/-internals/glimmer/lib/environment.ts @@ -106,16 +106,6 @@ const VM_DEPRECATION_OVERRIDES: (DeprecationOptions & { enabled: '3.21.0', }, }, - { - id: 'this-property-fallback', - disabled: ENV._DISABLE_PROPERTY_FALLBACK_DEPRECATION, - url: 'https://deprecations.emberjs.com/v3.x#toc_this-property-fallback', - until: '4.0.0', - for: 'ember-source', - since: { - enabled: '3.26.0', - }, - }, { id: 'argument-less-helper-paren-less-invocation', url: 'https://deprecations.emberjs.com/v3.x#toc_argument-less-helper-paren-less-invocation', diff --git a/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js b/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js index 71bc1b74107..d4d1b8b48ea 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/application/engine-test.js @@ -178,7 +178,7 @@ moduleFor( } ['@test sharing a template between engine and application has separate refinements']() { - this.assert.expect(2); + this.assert.expect(1); let sharedTemplate = compile(strip`

{{this.contextType}}

@@ -187,10 +187,6 @@ moduleFor( {{outlet}} `); - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.add('template:application', sharedTemplate); this.add( 'controller:application', @@ -238,10 +234,6 @@ moduleFor( ['@test sharing a layout between engine and application has separate refinements']() { this.assert.expect(2); - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - let sharedLayout = compile(strip` {{ambiguous-curlies}} `); diff --git a/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js b/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js index ba43210274c..2eee0f6cf63 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/application/rendering-test.js @@ -105,47 +105,7 @@ moduleFor( }); } - ['@test it can access the model provided by the route via implicit this fallback']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - - this.add( - 'route:application', - Route.extend({ - model() { - return ['red', 'yellow', 'blue']; - }, - }) - ); - - this.addTemplate( - 'application', - strip` - - ` - ); - - return this.visit('/').then(() => { - this.assertInnerHTML(strip` - - `); - }); - } - async ['@test interior mutations on the model with set'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.router.map(function () { this.route('color', { path: '/:color' }); }); @@ -164,7 +124,7 @@ moduleFor( strip` [@model: {{@model.color}}] [this.model: {{this.model.color}}] - [model: {{model.color}}] + [model: {{this.model.color}}] ` ); @@ -203,10 +163,6 @@ moduleFor( } async ['@test interior mutations on the model with tracked properties'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - class Model { @tracked color; @@ -233,7 +189,7 @@ moduleFor( strip` [@model: {{@model.color}}] [this.model: {{this.model.color}}] - [model: {{model.color}}] + [model: {{this.model.color}}] ` ); @@ -271,10 +227,6 @@ moduleFor( } async ['@test exterior mutations on the model with set'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.router.map(function () { this.route('color', { path: '/:color' }); }); @@ -293,7 +245,7 @@ moduleFor( strip` [@model: {{@model}}] [this.model: {{this.model}}] - [model: {{model}}] + [model: {{this.model}}] ` ); @@ -332,10 +284,6 @@ moduleFor( } async ['@test exterior mutations on the model with tracked properties'](assert) { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.router.map(function () { this.route('color', { path: '/:color' }); }); @@ -361,7 +309,7 @@ moduleFor( strip` [@model: {{@model}}] [this.model: {{this.model}}] - [model: {{model}}] + [model: {{this.model}}] ` ); diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js index 5fdd2305aff..84c620de3fa 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/components/curly-components-test.js @@ -3515,24 +3515,6 @@ moduleFor( this.assertComponentElement(this.firstChild, { content: 'hello' }); } - ['@test can use `{{component.foo}}` in a template GH#19313']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - - this.registerComponent('foo-bar', { - template: '{{component.foo}}', - }); - - this.render('{{foo-bar component=(hash foo="bar")}}'); - - this.assertComponentElement(this.firstChild, { content: 'bar' }); - - runTask(() => this.rerender()); - - this.assertComponentElement(this.firstChild, { content: 'bar' }); - } - ['@test can use `{{@component.foo}}` in a template GH#19313']() { this.registerComponent('foo-bar', { template: '{{@component.foo}}', diff --git a/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js b/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js index 22896382648..033188083ac 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/components/template-only-components-test.js @@ -197,11 +197,7 @@ if (ENV._TEMPLATE_ONLY_GLIMMER_COMPONENTS) { } ['@test it renders named arguments as reflected properties']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - - this.registerTemplateOnlyComponent('foo-bar', '|{{foo}}|{{this.bar}}|'); + this.registerTemplateOnlyComponent('foo-bar', '|{{this.foo}}|{{this.bar}}|'); this.render('{{foo-bar foo=this.foo bar=this.bar}}', { foo: 'foo', diff --git a/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js b/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js index dcba0e131bf..c5634e8e258 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/helpers/custom-helper-test.js @@ -35,10 +35,6 @@ moduleFor( } ['@test it does not resolve helpers with a `.` (period)']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.registerHelper('hello.world', () => 'hello world'); this.render('{{hello.world}}', { diff --git a/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js b/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js index 2959fda9f77..0a13ec3b556 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/syntax/each-test.js @@ -725,34 +725,28 @@ class EachTest extends AbstractEachTest { } ['@test the scoped variable is not available outside the {{#each}} block.']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.makeList(['Yehuda']); - this.render(`{{name}}-{{#each this.list as |name|}}{{name}}{{/each}}-{{name}}`, { - name: 'Stef', - }); + this.render(`{{name}}-{{#each this.list as |name|}}{{name}}{{/each}}-{{name}}`); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-Stef'); runTask(() => this.rerender()); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => this.pushObjects([' ', 'Katz'])); - this.assertText('Stef-Yehuda Katz-Stef'); + this.assertText('-Yehuda Katz-'); runTask(() => set(this.context, 'name', 'Tom')); - this.assertText('Tom-Yehuda Katz-Tom'); + this.assertText('-Yehuda Katz-'); runTask(() => set(this.context, 'name', 'Stef')); this.replaceList(['Yehuda']); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); } ['@test inverse template is displayed with context']() { @@ -946,10 +940,6 @@ class EachTest extends AbstractEachTest { } ['@test the scoped variable is not available outside the {{#each}} block']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - let first = this.createList(['Limbo']); let fifth = this.createList(['Wrath']); let ninth = this.createList(['Treachery']); @@ -957,41 +947,38 @@ class EachTest extends AbstractEachTest { this.render( `{{ring}}-{{#each this.first as |ring|}}{{ring}}-{{#each this.fifth as |ring|}}{{ring}}-{{#each this.ninth as |ring|}}{{ring}}-{{/each}}{{ring}}-{{/each}}{{ring}}-{{/each}}{{ring}}`, { - ring: 'Greed', first: first.list, fifth: fifth.list, ninth: ninth.list, } ); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => this.rerender()); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => { - set(this.context, 'ring', 'O'); fifth.delegate.insertAt(0, 'D'); }); - this.assertText('O-Limbo-D-Treachery-D-Wrath-Treachery-Wrath-Limbo-O'); + this.assertText('-Limbo-D-Treachery-D-Wrath-Treachery-Wrath-Limbo-'); runTask(() => { first.delegate.pushObject('I'); ninth.delegate.replace(0, 1, ['K']); }); - this.assertText('O-Limbo-D-K-D-Wrath-K-Wrath-Limbo-I-D-K-D-Wrath-K-Wrath-I-O'); + this.assertText('-Limbo-D-K-D-Wrath-K-Wrath-Limbo-I-D-K-D-Wrath-K-Wrath-I-'); runTask(() => { - set(this.context, 'ring', 'Greed'); set(this.context, 'first', this.createList(['Limbo']).list); set(this.context, 'fifth', this.createList(['Wrath']).list); set(this.context, 'ninth', this.createList(['Treachery']).list); }); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); } ['@test it should support {{#each this.name as |foo|}}, then {{#each foo as |bar|}}']() { diff --git a/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js b/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js index a08c411f2a9..f7cb1ee8049 100644 --- a/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js +++ b/packages/@ember/-internals/glimmer/tests/integration/syntax/let-test.js @@ -96,35 +96,29 @@ moduleFor( } ['@test the scoped variable is not available outside the {{#let}} block.']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.render(`{{name}}-{{#let this.other as |name|}}{{name}}{{/let}}-{{name}}`, { - name: 'Stef', other: 'Yehuda', }); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => this.rerender()); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); runTask(() => set(this.context, 'other', 'Chad')); - this.assertText('Stef-Chad-Stef'); + this.assertText('-Chad-'); runTask(() => set(this.context, 'name', 'Tom')); - this.assertText('Tom-Chad-Tom'); + this.assertText('-Chad-'); runTask(() => { - set(this.context, 'name', 'Stef'); set(this.context, 'other', 'Yehuda'); }); - this.assertText('Stef-Yehuda-Stef'); + this.assertText('-Yehuda-'); } ['@test can access alias of a proxy']() { @@ -246,48 +240,41 @@ moduleFor( } ['@test the scoped variable is not available outside the {{#let}} block']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.render( `{{ring}}-{{#let this.first as |ring|}}{{ring}}-{{#let this.fifth as |ring|}}{{ring}}-{{#let this.ninth as |ring|}}{{ring}}-{{/let}}{{ring}}-{{/let}}{{ring}}-{{/let}}{{ring}}`, { - ring: 'Greed', first: 'Limbo', fifth: 'Wrath', ninth: 'Treachery', } ); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => this.rerender()); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); runTask(() => { - set(this.context, 'ring', 'O'); set(this.context, 'fifth', 'D'); }); - this.assertText('O-Limbo-D-Treachery-D-Limbo-O'); + this.assertText('-Limbo-D-Treachery-D-Limbo-'); runTask(() => { set(this.context, 'first', 'I'); set(this.context, 'ninth', 'K'); }); - this.assertText('O-I-D-K-D-I-O'); + this.assertText('-I-D-K-D-I-'); runTask(() => { - set(this.context, 'ring', 'Greed'); set(this.context, 'first', 'Limbo'); set(this.context, 'fifth', 'Wrath'); set(this.context, 'ninth', 'Treachery'); }); - this.assertText('Greed-Limbo-Wrath-Treachery-Wrath-Limbo-Greed'); + this.assertText('-Limbo-Wrath-Treachery-Wrath-Limbo-'); } ['@test it should support {{#let name as |foo|}}, then {{#let foo as |bar|}}']() { @@ -331,10 +318,6 @@ moduleFor( } ['@test nested {{#let}} blocks should have access to root context']() { - expectDeprecation( - /The `[^`]+` property(?: path)? was used in the `[^`]+` template without using `this`. This fallback behavior has been deprecated, all properties must be looked up on `this` when used in the template: {{[^}]+}}/ - ); - this.render( strip` {{name}} diff --git a/tests/docs/expected.js b/tests/docs/expected.js index 3b98b3f264d..b97f44edb28 100644 --- a/tests/docs/expected.js +++ b/tests/docs/expected.js @@ -9,7 +9,6 @@ module.exports = { 'LOG_VERSION', '[]', '_APPLICATION_TEMPLATE_WRAPPER', - '_DISABLE_PROPERTY_FALLBACK_DEPRECATION', '_DEBUG_RENDER_TREE', '_DEFAULT_ASYNC_OBSERVERS', '_RERENDER_LOOP_LIMIT',