From 9046458594f19e53321ea494a3ed7690d83597e5 Mon Sep 17 00:00:00 2001 From: echo094 <20028238+echo094@users.noreply.github.com> Date: Sun, 26 Jan 2025 02:30:13 +0800 Subject: [PATCH] feature: @putout/plugin-remove-nested-blocks: case when it is the only block Signed-off-by: echo094 <20028238+echo094@users.noreply.github.com> --- .../lib/remove-nested-blocks.js | 5 ++++- .../test/fixture/intersect-multi.js | 7 +++++++ .../test/fixture/intersect-single-fix.js | 6 ++++++ .../test/fixture/intersect-single.js | 7 +++++++ .../test/remove-nested-blocks.js | 10 ++++++++++ 5 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 packages/plugin-remove-nested-blocks/test/fixture/intersect-multi.js create mode 100644 packages/plugin-remove-nested-blocks/test/fixture/intersect-single-fix.js create mode 100644 packages/plugin-remove-nested-blocks/test/fixture/intersect-single.js diff --git a/packages/plugin-remove-nested-blocks/lib/remove-nested-blocks.js b/packages/plugin-remove-nested-blocks/lib/remove-nested-blocks.js index 745e70819d..a48f2a1048 100644 --- a/packages/plugin-remove-nested-blocks/lib/remove-nested-blocks.js +++ b/packages/plugin-remove-nested-blocks/lib/remove-nested-blocks.js @@ -49,7 +49,10 @@ module.exports.filter = (path) => { const is = !isIntersect(bindings, path.parentPath); - return is && (parentPath.isBlockStatement() || parentPath.isProgram()); + if (!parentPath.isBlockStatement() && !parentPath.isProgram()) + return false; + + return is || path.container.length === 1; }; function isReturnWithoutArg(path) { diff --git a/packages/plugin-remove-nested-blocks/test/fixture/intersect-multi.js b/packages/plugin-remove-nested-blocks/test/fixture/intersect-multi.js new file mode 100644 index 0000000000..9010ce6b45 --- /dev/null +++ b/packages/plugin-remove-nested-blocks/test/fixture/intersect-multi.js @@ -0,0 +1,7 @@ +function fun1(f) { + let x1; + { + let x1 = f; + return x1; + } +} diff --git a/packages/plugin-remove-nested-blocks/test/fixture/intersect-single-fix.js b/packages/plugin-remove-nested-blocks/test/fixture/intersect-single-fix.js new file mode 100644 index 0000000000..240bfce5b6 --- /dev/null +++ b/packages/plugin-remove-nested-blocks/test/fixture/intersect-single-fix.js @@ -0,0 +1,6 @@ +let x1; + +function fun1(f) { + let x1 = f; + return x1; +} diff --git a/packages/plugin-remove-nested-blocks/test/fixture/intersect-single.js b/packages/plugin-remove-nested-blocks/test/fixture/intersect-single.js new file mode 100644 index 0000000000..f5967f6299 --- /dev/null +++ b/packages/plugin-remove-nested-blocks/test/fixture/intersect-single.js @@ -0,0 +1,7 @@ +let x1; +function fun1(f) { + { + let x1 = f; + return x1; + } +} diff --git a/packages/plugin-remove-nested-blocks/test/remove-nested-blocks.js b/packages/plugin-remove-nested-blocks/test/remove-nested-blocks.js index 84305c5cfb..3d5ace73eb 100644 --- a/packages/plugin-remove-nested-blocks/test/remove-nested-blocks.js +++ b/packages/plugin-remove-nested-blocks/test/remove-nested-blocks.js @@ -61,3 +61,13 @@ test('plugin-remove-nested-blocks: no report: return', (t) => { t.noReport('return'); t.end(); }); + +test('plugin-remove-nested-blocks: transform: intersect-single', (t) => { + t.transform('intersect-single'); + t.end(); +}); + +test('plugin-remove-nested-blocks: no report: intersect-multi', (t) => { + t.noReport('intersect-multi'); + t.end(); +});