ember-native-class-codemod icon indicating copy to clipboard operation
ember-native-class-codemod copied to clipboard

Error when encountering ArrowFunctionExpression in computed setter

Open xg-wang opened this issue 4 years ago • 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 avatar Mar 16 '21 16:03 xg-wang

@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.

elwayman02 avatar Mar 16 '21 17:03 elwayman02

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.

rwjblue avatar Mar 16 '21 18:03 rwjblue