Error when encountering ArrowFunctionExpression in computed setter
xg-wang opened this issue · 2 comments
For example:
_list: computed('list.[]', {
get() {
return A(get(this, 'list').map((el) => el));
},
set: (key, value) => value
}),
This code will throw
Transformation error (Cannot read property 'map' of undefined)
TypeError: Cannot read property 'map' of undefined
at Lines.Lp.join (~/.npm/_npx/41642/lib/node_modules/ember-native-class-codemod/node_modules/jscodeshift/node_modules/recast/lib/lines.js:867:12)
Chatted with @rwjblue, arrow function should be forbidden in computed properties: https://github.com/ember-cli/eslint-plugin-ember/blob/master/docs/rules/no-arrow-function-computed-properties.md
The codemod should check ArrowFunctionExpression
and throw a more meaningful error on this specific file
@xg-wang I don't think the codemod should throw an error at all, necessarily. Arrow functions should be forbidden in computed properties, but it is not an error to use them if you don't reference this
. In fact, the lint rule you linked to specifically has a configuration option to allow arrow functions in computed properties where this
isn't referenced. Since that is technically valid code, the codemod should not error but instead successfully transform the code.
IMHO the hierarchy here is that throwing a useful error is better than today and actually fixing the transform to function properly would be better than that.