diff --git a/index.js b/index.js index 76073ea3..0e138a5f 100644 --- a/index.js +++ b/index.js @@ -61,7 +61,16 @@ function monkeypatch() { estraverses.push(estraverseFb); assign(estraverseFb.VisitorKeys, t.VISITOR_KEYS); } catch (err) { - throw new Error("babel-eslint isn't currently compatible with ESLint 2.3.x. The recommendation is to pin to ESLint 2.2.x right now."); + // Ignore: ESLint v2.3.0 does not have estraverse-fb + } + + // get espree to make VisitorKeys. + var espreeOfEslint = eslintMod.require("espree"); + var VisitorKeys; + if (espreeOfEslint.VisitorKeys) { + VisitorKeys = assign({}, espreeOfEslint.VisitorKeys, t.VISITOR_KEYS); + } else { + VisitorKeys = t.VISITOR_KEYS; } // ESLint v1.9.0 uses estraverse directly to work around https://github.com/npm/npm/issues/9663 @@ -69,6 +78,18 @@ function monkeypatch() { if (estraverseOfEslint !== estraverseFb) { estraverses.push(estraverseOfEslint); assign(estraverseOfEslint.VisitorKeys, t.VISITOR_KEYS); + + // ESLint v2.3.0 is addressing VisitorKeys as arguments. + (function(Controller, VisitorKeys) { + var traverse = Controller.prototype.traverse; + + Controller.prototype.traverse = function(root, visitor) { + if (visitor.hasOwnProperty("keys")) { + visitor.keys = VisitorKeys; + } + return traverse.call(this, root, visitor); + }; + })(estraverseOfEslint.Controller, VisitorKeys); } // monkeypatch escope @@ -77,6 +98,12 @@ function monkeypatch() { escope.analyze = function (ast, opts) { opts.ecmaVersion = 6; opts.sourceType = "module"; + + // ESLint v2.3.0 is addressing VisitorKeys as arguments. + if (opts.childVisitorKeys) { + opts.childVisitorKeys = VisitorKeys; + } + var results = analyze.call(this, ast, opts); return results; }; @@ -350,8 +377,6 @@ function monkeypatch() { }; } -exports.VisitorKeys = t.VISITOR_KEYS; - exports.parse = function (code, options) { options = options || {}; diff --git a/package.json b/package.json index a0ea3e2e..408f1031 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ }, "homepage": "https://github.com/babel/babel-eslint", "devDependencies": { - "eslint": "~2.2.0", + "eslint": "^2.3.0", "espree": "^3.0.0", "mocha": "^2.3.3" }