forked from babel/babel
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(class-properties): replace
new.target
in static properties with…
… `undefined` (babel#13560) * fix(class-properties): replace `new.target` in static properties with `undefined` non-static prop is not affected fix babel#12737 * Update packages/babel-helper-create-class-features-plugin/src/fields.ts fix typo Co-authored-by: Brian Ng <[email protected]> * fix: add loose test case and fix replace condition * test: add new.target tests for static block * feat: move new-target replace into thisContextVisitor defaults to replace new.target, do not replace within function * feat: simplify thisContextVisitor remove function visitor since environmentVisitor is skipping arrow function * test: remove unused fixme comments Co-authored-by: Brian Ng <[email protected]>
- Loading branch information
1 parent
6e57617
commit aa18da0
Showing
12 changed files
with
143 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
12 changes: 12 additions & 0 deletions
12
...s/babel-plugin-proposal-class-static-block/test/fixtures/integration/new-target/output.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
class Base { | ||
constructor() { | ||
var _class, _temp; | ||
|
||
this.Foo = (_temp = _class = class {}, (() => { | ||
_class.foo = void 0; | ||
})(), _temp); | ||
} | ||
|
||
} | ||
|
||
expect(new Base().Foo.foo).toBe(undefined); |
9 changes: 9 additions & 0 deletions
9
...es/babel-plugin-transform-new-target/test/fixtures/general/class-properties-loose/exec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
class Foo { | ||
constructor() { | ||
this.Bar = class { | ||
static p = new.target | ||
} | ||
} | ||
} | ||
|
||
expect((new Foo).Bar.p).toBeUndefined() |
20 changes: 20 additions & 0 deletions
20
...s/babel-plugin-transform-new-target/test/fixtures/general/class-properties-loose/input.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
class Foo { | ||
constructor() { | ||
this.Bar = class { | ||
static p = new.target | ||
static p1 = class { constructor() { new.target } } // should not replace | ||
static p2 = new function () { new.target } // should not replace | ||
static p3 = () => { new.target } // should replace | ||
static p4 = function () { new.target } // should not replace | ||
q = new.target // should not replace | ||
} | ||
} | ||
|
||
test = function() { | ||
new.target; | ||
}; | ||
|
||
test2 = () => { | ||
new.target; | ||
} | ||
} |
7 changes: 7 additions & 0 deletions
7
...bel-plugin-transform-new-target/test/fixtures/general/class-properties-loose/options.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"plugins": [ | ||
"transform-new-target", | ||
"transform-arrow-functions", | ||
["proposal-class-properties", { "loose": true }] | ||
] | ||
} |
35 changes: 35 additions & 0 deletions
35
.../babel-plugin-transform-new-target/test/fixtures/general/class-properties-loose/output.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
class Foo { | ||
constructor() { | ||
var _newtarget = this.constructor, | ||
_class, | ||
_temp; | ||
|
||
this.test = function _target() { | ||
this instanceof _target ? this.constructor : void 0; | ||
}; | ||
|
||
this.test2 = function () { | ||
_newtarget; | ||
}; | ||
|
||
this.Bar = (_temp = _class = class _target2 { | ||
constructor() { | ||
this.q = this.constructor; | ||
} // should not replace | ||
|
||
|
||
}, _class.p = void 0, _class.p1 = class _target3 { | ||
constructor() { | ||
this.constructor; | ||
} | ||
|
||
}, _class.p2 = new function _target4() { | ||
this instanceof _target4 ? this.constructor : void 0; | ||
}(), _class.p3 = function () { | ||
void 0; | ||
}, _class.p4 = function _target5() { | ||
this instanceof _target5 ? this.constructor : void 0; | ||
}, _temp); | ||
} | ||
|
||
} |
9 changes: 9 additions & 0 deletions
9
packages/babel-plugin-transform-new-target/test/fixtures/general/class-properties/exec.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
class Foo { | ||
constructor() { | ||
this.Bar = class { | ||
static p = new.target | ||
} | ||
} | ||
} | ||
|
||
expect((new Foo).Bar.p).toBeUndefined() |
11 changes: 11 additions & 0 deletions
11
packages/babel-plugin-transform-new-target/test/fixtures/general/class-properties/input.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
31 changes: 25 additions & 6 deletions
31
packages/babel-plugin-transform-new-target/test/fixtures/general/class-properties/output.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,14 +1,33 @@ | ||
class Foo { | ||
constructor() { | ||
var _newtarget = this.constructor; | ||
var _newtarget = this.constructor, | ||
_class, | ||
_temp; | ||
|
||
this.test = function _target() { | ||
babelHelpers.defineProperty(this, "test", function _target() { | ||
this instanceof _target ? this.constructor : void 0; | ||
}; | ||
|
||
this.test2 = function () { | ||
}); | ||
babelHelpers.defineProperty(this, "test2", function () { | ||
_newtarget; | ||
}; | ||
}); | ||
this.Bar = (_temp = _class = class _target2 { | ||
constructor() { | ||
babelHelpers.defineProperty(this, "q", this.constructor); | ||
} // should not replace | ||
|
||
|
||
}, babelHelpers.defineProperty(_class, "p", void 0), babelHelpers.defineProperty(_class, "p1", class _target3 { | ||
constructor() { | ||
this.constructor; | ||
} | ||
|
||
}), babelHelpers.defineProperty(_class, "p2", new function _target4() { | ||
this instanceof _target4 ? this.constructor : void 0; | ||
}()), babelHelpers.defineProperty(_class, "p3", function () { | ||
void 0; | ||
}), babelHelpers.defineProperty(_class, "p4", function _target5() { | ||
this instanceof _target5 ? this.constructor : void 0; | ||
}), _temp); | ||
} | ||
|
||
} |