diff --git a/lib/utils/index.js b/lib/utils/index.js index 28caa444d..540c50d55 100644 --- a/lib/utils/index.js +++ b/lib/utils/index.js @@ -654,8 +654,12 @@ module.exports = { node: null } + function isReachable (segment) { + return segment.reachable + } + function isValidReturn () { - if (!funcInfo.hasReturn) { + if (funcInfo.codePath.currentSegments.some(isReachable)) { return false } return !treatUndefinedAsUnspecified || funcInfo.hasReturnValue diff --git a/tests/lib/rules/require-render-return.js b/tests/lib/rules/require-render-return.js index 38132b287..e7fde4e60 100644 --- a/tests/lib/rules/require-render-return.js +++ b/tests/lib/rules/require-render-return.js @@ -70,6 +70,36 @@ ruleTester.run('require-render-return', rule, { }`, parserOptions }, + { + filename: 'test.vue', + code: `export default { + render() { + const foo = function () {} + return foo + } + }`, + parserOptions + }, + { + filename: 'test.vue', + code: `export default { + render() { + if (a) { + if (b) { + + } + if (c) { + return true + } else { + return foo + } + } else { + return foo + } + } + }`, + parserOptions + }, { filename: 'test.vue', code: `export default { @@ -119,6 +149,22 @@ ruleTester.run('require-render-return', rule, { line: 2 }] }, + { + filename: 'test.vue', + code: `export default { + render: function () { + if (foo) { + return h('div', 'hello') + } + } + }`, + parserOptions, + errors: [{ + message: 'Expected to return a value in render function.', + type: 'Identifier', + line: 2 + }] + }, { code: `Vue.component('test', { render: function () { @@ -133,6 +179,38 @@ ruleTester.run('require-render-return', rule, { type: 'Identifier', line: 2 }] + }, + { + code: `Vue.component('test2', { + render: function () { + if (a) { + return h('div', 'hello') + } + } + })`, + parserOptions, + errors: [{ + message: 'Expected to return a value in render function.', + type: 'Identifier', + line: 2 + }] + }, + { + code: `Vue.component('test2', { + render: function () { + if (a) { + + } else { + return h('div', 'hello') + } + } + })`, + parserOptions, + errors: [{ + message: 'Expected to return a value in render function.', + type: 'Identifier', + line: 2 + }] } ] })