diff --git a/lib/rules/require-render-return.js b/lib/rules/require-render-return.js index 79ec626d6..f7030d8f2 100644 --- a/lib/rules/require-render-return.js +++ b/lib/rules/require-render-return.js @@ -20,16 +20,12 @@ function create (context) { utils.executeOnVue(context, obj => { const node = obj.properties.find(item => item.type === 'Property' && utils.getStaticPropertyName(item) === 'render' && - (item.value.type === 'ArrowFunctionExpression' || item.value.type === 'FunctionExpression') && - !item.value.expression // render: () => test + (item.value.type === 'ArrowFunctionExpression' || item.value.type === 'FunctionExpression') ) if (!node) return forbiddenNodes.forEach(el => { - if ( - el.loc.start.line >= node.value.loc.start.line && - el.loc.end.line <= node.value.loc.end.line - ) { + if (node.value === el) { context.report({ node: node.key, message: 'Expected to return a value in render function.' diff --git a/lib/rules/return-in-computed-property.js b/lib/rules/return-in-computed-property.js index 4658e8766..627e61d03 100644 --- a/lib/rules/return-in-computed-property.js +++ b/lib/rules/return-in-computed-property.js @@ -25,11 +25,7 @@ function create (context) { computedProperties.forEach(cp => { forbiddenNodes.forEach(el => { - if ( - cp.value && - el.loc.start.line >= cp.value.loc.start.line && - el.loc.end.line <= cp.value.loc.end.line - ) { + if (cp.value && cp.value.parent === el) { context.report({ node: el, message: 'Expected to return a value in "{{name}}" computed property.', diff --git a/lib/utils/index.js b/lib/utils/index.js index 1e741703b..3a3428268 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -553,7 +553,7 @@ module.exports = { funcInfo.hasReturnValue = Boolean(node.argument) }, 'ArrowFunctionExpression:exit' (node) { - if (!isValidReturn()) { + if (!isValidReturn() && !node.expression) { cb(funcInfo.node) } }, diff --git a/tests/lib/rules/require-render-return.js b/tests/lib/rules/require-render-return.js index d40c49209..5aebda6eb 100644 --- a/tests/lib/rules/require-render-return.js +++ b/tests/lib/rules/require-render-return.js @@ -88,6 +88,19 @@ ruleTester.run('require-render-return', rule, { } }`, parserOptions + }, + { + filename: 'test.vue', + code: `export default { + render(h) { + const options = [] + this.matches.forEach(function (match) { + options.push(match) + }) + return h('div', options) + } + }`, + parserOptions } ], diff --git a/tests/lib/rules/return-in-computed-property.js b/tests/lib/rules/return-in-computed-property.js index 7dde0ea63..e1d290fba 100644 --- a/tests/lib/rules/return-in-computed-property.js +++ b/tests/lib/rules/return-in-computed-property.js @@ -12,6 +12,11 @@ const rule = require('../../../lib/rules/return-in-computed-property') const RuleTester = require('eslint').RuleTester +const parserOptions = { + ecmaVersion: 6, + sourceType: 'module' +} + // ------------------------------------------------------------------------------ // Tests // ------------------------------------------------------------------------------ @@ -49,7 +54,41 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' } + parserOptions + }, + { + filename: 'test.vue', + code: ` + export default { + computed: { + foo () { + const options = [] + this.matches.forEach((match) => { + options.push(match) + }) + return options + } + } + } + `, + parserOptions + }, + { + filename: 'test.vue', + code: ` + export default { + computed: { + foo () { + const options = [] + this.matches.forEach(function (match) { + options.push(match) + }) + return options + } + } + } + `, + parserOptions }, { filename: 'test.vue', @@ -64,7 +103,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' }, + parserOptions, options: [{ treatUndefinedAsUnspecified: false }] } ], @@ -80,7 +119,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' }, + parserOptions, errors: [{ message: 'Expected to return a value in "foo" computed property.', line: 4 @@ -135,7 +174,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' }, + parserOptions, errors: [{ message: 'Expected to return a value in "foo" computed property.', line: 7 @@ -155,7 +194,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' }, + parserOptions, errors: [{ message: 'Expected to return a value in "foo" computed property.', line: 4 @@ -174,7 +213,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' }, + parserOptions, options: [{ treatUndefinedAsUnspecified: false }], errors: [{ message: 'Expected to return a value in "foo" computed property.', @@ -192,7 +231,7 @@ ruleTester.run('return-in-computed-property', rule, { } } `, - parserOptions: { ecmaVersion: 8, sourceType: 'module' }, + parserOptions, options: [{ treatUndefinedAsUnspecified: true }], errors: [{ message: 'Expected to return a value in "foo" computed property.',