Skip to content

Commit

Permalink
Set loose in the global map
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolo-ribaudo committed Jun 10, 2018
1 parent fe9f911 commit 40d4078
Show file tree
Hide file tree
Showing 6 changed files with 42 additions and 1 deletion.
14 changes: 14 additions & 0 deletions packages/babel-plugin-proposal-enhanced-classes/src/features.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ export const FEATURES = Object.freeze({
// - node_modules
// - @babel-plugin-proposal-enhanced-classes
const featuresKey = "@babel/plugin-proposal-enhanced-classes/featuresKey";
const looseKey = "@babel/plugin-proposal-enhanced-classes/looseKey";

export function enableFeature(file, feature) {
file.set(featuresKey, file.get(featuresKey) | feature);
Expand Down Expand Up @@ -59,3 +60,16 @@ export function verifyUsedFeatures(path, file) {
}
}
}

// Set "loose". The original value isn't overwritten, so
// @babel/plugin-class-properties { loose: true }
// @babel/plugin-class-properties { loose: false }
// is transformed in loose mode.
export function setLoose(file, loose) {
const oldLoose = file.get(looseKey);
if (oldLoose === undefined) file.set(looseKey, loose);
}

export function isLoose(file) {
return !!file.get(looseKey);
}
11 changes: 10 additions & 1 deletion packages/babel-plugin-proposal-enhanced-classes/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,13 @@ import {
buildFieldsInitNodes,
} from "./fields";
import { injectInitialization, extractComputedKeys } from "./misc";
import { enableFeature, verifyUsedFeatures, FEATURES } from "./features";
import {
enableFeature,
verifyUsedFeatures,
FEATURES,
setLoose,
isLoose,
} from "./features";

export default declare((api, options) => {
api.assertVersion(7);
Expand All @@ -24,6 +30,8 @@ export default declare((api, options) => {
},

pre() {
setLoose(this.file, loose);

if (instanceFields) enableFeature(this.file, FEATURES.instanceFields);
if (staticFields) enableFeature(this.file, FEATURES.staticFields);
if (privateMethods) enableFeature(this.file, FEATURES.privateMethods);
Expand All @@ -33,6 +41,7 @@ export default declare((api, options) => {
visitor: {
Class(path, state) {
verifyUsedFeatures(path, this.file);
const loose = isLoose(this.file);

let constructor;
const props = [];
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
class A {
foo;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"plugins": [
["proposal-class-properties", { "loose": true }, "name 1"],
["proposal-class-properties", { "loose": false }, "name 2"]
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class A {
constructor() {
this.foo = void 0;
}

}
3 changes: 3 additions & 0 deletions packages/babel-plugin-proposal-enhanced-classes/test/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import runner from "@babel/helper-plugin-test-runner";

runner(__dirname);

0 comments on commit 40d4078

Please sign in to comment.