ember-codemods/ember-native-class-codemod

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.