es5-getter-ember-codemod
es5-getter-ember-codemod copied to clipboard
es5-getter-ember-codemod
This codemod is intended to automatically convert your usage of get
, and
getProperties
to use traditional object dot notation as proposed by
emberjs/rfcs#281.
Special thanks to @rwjblue, @iezer, and @tbieniek for reviewing my original test cases.
Installation
es5-getter-ember-codemod
itself doesn't need to be installed but you can run it using:
npx github:ember-codemods/es5-getter-ember-codemod ...
Usage
You can clone/download this repository or just run the codemods using the command shown in the following example:
npx github:ember-codemods/es5-getter-ember-codemod es5-getter-ember-codemod app/**/*.js
Transforms
foo.get('bar') -> foo.bar
Transforms get()
method calls on objects (only for this
and variables
called controller
or route
).
Before:
this.get('fullName');
controller.get('fullName');
model.get('fullName');
route.get('fullName');
After:
this.fullName;
controller.fullName;
model.get('fullName');
route.fullName;
Ember.get(foo, 'bar') -> foo.bar
Transforms Ember.get()
(or get()
from @ember/object
) calls (only
for this
as first argument).
Before:
import Ember from 'ember';
import { get } from '@ember/object'
let foo = get(this, 'foo');
let foo = get(this, 'foo.bar');
let foo = Ember.get(this, 'foo');
let foo = Ember.get(this, 'foo.bar');
let obj = { bar: 'baz' };
let bar = get(obj, 'bar');
After:
import Ember from 'ember';
import { get } from '@ember/object'
let foo = this.foo;
let foo = get(this, 'foo.bar');
let foo = this.foo;
let foo = Ember.get(this, 'foo.bar');
let obj = { bar: 'baz' };
let bar = get(obj, 'bar');
let { bar, baz } = foo.getProperties('bar', 'baz') -> let { bar, baz } = this
Transforms getProperties()
method calls on objects (only for
destructuring operations and not for nested paths).
Before:
let { foo, bar, baz } = this.getProperties('foo', 'bar', 'baz');
let { foo, barBaz } = this.getProperties('foo', 'bar.baz');
After:
let { foo, bar, baz } = this;
let { foo, barBaz } = this.getProperties('foo', 'bar.baz');
Enforcement
The ember/no-get lint rule is available for enforcing this.