diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/exec.js b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/exec.js new file mode 100644 index 000000000000..4e8130dbed03 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/exec.js @@ -0,0 +1,9 @@ +var result; +class C { + static #x; + static { + var x; + result = do { ({#x: x = 2} = C); } + } +} +expect(result).toBe(C); diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/input.js b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/input.js new file mode 100644 index 000000000000..a929a603b588 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/input.js @@ -0,0 +1,8 @@ +var result; +class C { + static #x; + static { + var x; + result = do { ({#x: x = 2} = C); } + } +} diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/options.json b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/options.json new file mode 100644 index 000000000000..637f74481731 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/options.json @@ -0,0 +1,10 @@ +{ + "plugins": [ + "proposal-do-expressions", + "proposal-destructuring-private", + "proposal-class-static-block", + "proposal-class-properties", + "proposal-private-methods", + ["proposal-object-rest-spread", { "useBuiltIns": true }] + ] +} diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/output.js b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/output.js new file mode 100644 index 000000000000..6820a344d940 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment--es2015/completion-do-expression/output.js @@ -0,0 +1,15 @@ +var result; + +class C {} + +var _x = { + writable: true, + value: void 0 +}; + +(() => { + var _m, _m2; + + var x; + result = (_m = C, _m2 = babelHelpers.classStaticPrivateFieldSpecGet(_m, C, _x), x = _m2 === void 0 ? 2 : _m2, _m); +})(); diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/exec.js b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/exec.js new file mode 100644 index 000000000000..4e8130dbed03 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/exec.js @@ -0,0 +1,9 @@ +var result; +class C { + static #x; + static { + var x; + result = do { ({#x: x = 2} = C); } + } +} +expect(result).toBe(C); diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/input.js b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/input.js new file mode 100644 index 000000000000..a929a603b588 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/input.js @@ -0,0 +1,8 @@ +var result; +class C { + static #x; + static { + var x; + result = do { ({#x: x = 2} = C); } + } +} diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/options.json b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/options.json new file mode 100644 index 000000000000..fd0b65b50e67 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/options.json @@ -0,0 +1,4 @@ +{ + "plugins": ["proposal-do-expressions", "proposal-destructuring-private"], + "minNodeVersion": "16.11.0" +} diff --git a/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/output.js b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/output.js new file mode 100644 index 000000000000..d32ee58d5442 --- /dev/null +++ b/packages/babel-plugin-proposal-destructuring-private/test/fixtures/assignment/completion-do-expression/output.js @@ -0,0 +1,11 @@ +var result; + +class C { + static #x; + static { + var _m, _m2; + + var x; + result = (_m = C, _m2 = _m.#x, x = _m2 === void 0 ? 2 : _m2, _m); + } +} diff --git a/packages/babel-traverse/src/path/introspection.ts b/packages/babel-traverse/src/path/introspection.ts index fa2f623e2115..2db4428fee51 100644 --- a/packages/babel-traverse/src/path/introspection.ts +++ b/packages/babel-traverse/src/path/introspection.ts @@ -149,7 +149,11 @@ export function isCompletionRecord( if (Array.isArray(container) && path.key !== container.length - 1) { return false; } - } while ((path = path.parentPath) && !path.isProgram()); + } while ( + (path = path.parentPath) && + !path.isProgram() && + !path.isDoExpression() + ); return true; }