Skip to content

Add rule require-render-return. #114

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Aug 4, 2017

Conversation

armano2
Copy link
Contributor

@armano2 armano2 commented Jul 29, 2017

This PR implements rules proposed in #107

DONE:

  • Create documtation
  • Add tests
  • Implement rule

fixes #107

Copy link
Member

@mysticatea mysticatea left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for contributing! I'm sorry for the delay.

Mostly looks good to me. But I'm not sure Array#filter and Array#forEach is proper in this case. I left a few comments.


return utils.executeOnVue(context, obj => {
obj.properties
.filter(item => item.type === 'Property' &&
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that Array#find fits more in this case.

render: () => null
}`,
parserOptions
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you add tests that this rule does not report functions which are not the render?

@armano2
Copy link
Contributor Author

armano2 commented Aug 1, 2017

@mysticatea merged and few additional tests added

code: `Vue.component('test', {
render: function () {
if (a) {
return
Copy link
Member

@michalsnik michalsnik Aug 1, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

and what about:

render() {
  if (a) {
    return `<div>a</div>`
  } else {
    return `<span>a</span>`
  }
}

?

Copy link
Contributor Author

@armano2 armano2 Aug 1, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@michalsnik i forgot about this case, thank you 🍡

@armano2
Copy link
Contributor Author

armano2 commented Aug 1, 2017

@michalsnik issue with if {return}else{return} fixed

@armano2 armano2 force-pushed the patch-22-render-return branch from 56d5f2d to 3a83a68 Compare August 1, 2017 19:06
},

/**
* Find all function witch do not allways return values
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be: Find all functions which do not always return values

* @param {Array} nodes an array nodes
* @param {boolean} treatUndefinedAsUnspecified
*/
findMissingReturns (nodes, treatUndefinedAsUnspecified) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should avoid mutating arguments. I suggest to modify this function to be more explicit (we can even change the name a bit, to be consistent with executeOnVue and so on):

executeOnFunctionsWithoutReturn (treatUndefinedAsUnspecified, cb) {
  // ...

  return {
    // ...
    'ArrowFunctionExpression:exit' (node) {
      if (isValidReturn()) return
      cb(funcInfo.node)
    },
    'FunctionExpression:exit' (node) {
      if (isValidReturn()) return
      cb(funcInfo.node)
    }
  }
}

Then you could use it like this:

return Object.assign({},
  utils.executeOnFunctionsWithoutReturn(treatUndefinedAsUnspecified, node => {
    forbiddenNodes.push(node)
  }),
  utils.executeOnVue(context, properties => {
    // ...
  })
)

I think it will be much easier to understand, and what do you think @armano2 ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

seems logical, and more consistent with executeOnVue 👍

Copy link
Member

@michalsnik michalsnik left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM 👍 Good work @armano2 :)

@michalsnik michalsnik merged commit 49d3456 into vuejs:master Aug 4, 2017
@armano2 armano2 deleted the patch-22-render-return branch August 4, 2017 16:59
filipalacerda pushed a commit to filipalacerda/eslint-plugin-vue that referenced this pull request Aug 5, 2017
* master:
  Add rule `vue/require-valid-default-prop`. (vuejs#119)
  3.10.0
  Update readme to 3.10.0
  Chore: remove package-lock.json (vuejs#128)
  Fix: parserService must exist always (fixes vuejs#125) (vuejs#127)
  Add rule `require-render-return`. (vuejs#114)
  3.9.0
  Update package-lock
  Update: options for `no-duplicate-attributes` (fixes vuejs#112)(vuejs#113)
  New: add rule `attribute-hyphenation`. (fixes vuejs#92)(vuejs#95)
  Add namespace check of svg & mathML instead of tag names (vuejs#120)
  ⚠️ Add support for deprecated state in update-rules ⚠️ (vuejs#121)
  Add rules: `no-dupe-keys` and `no-reserved-keys`. (vuejs#88)
  Chore: Improve tests for name-property-casing & improve documentation (vuejs#115)
  New: add `require-prop-types` rule (fixes vuejs#19)(vuejs#85)
  Update: upgrade vue-eslint-parser (fixes vuejs#36, fixes vuejs#56, fixes vuejs#96) (vuejs#116)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Rule Proposal: vue/require-render-return
3 participants