From fb367b69e5a8bf76bd37a2e81bebe67748ec10fa Mon Sep 17 00:00:00 2001 From: Armano Date: Tue, 13 Nov 2018 01:23:15 +0100 Subject: [PATCH] Fix reporting issues from `executeOnFunctionsWithoutReturn` --- lib/utils/index.js | 6 +- tests/lib/rules/require-render-return.js | 78 ++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) 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 + }] } ] })