babel-eslint
Advanced tools
Comparing version 7.2.1 to 7.2.2
@@ -0,1 +1,3 @@ | ||
"use strict"; | ||
// comment fixes | ||
@@ -2,0 +4,0 @@ module.exports = function (ast, comments, tokens) { |
@@ -0,1 +1,3 @@ | ||
"use strict"; | ||
module.exports = function (tokens, tt) { | ||
@@ -2,0 +4,0 @@ var startingToken = 0; |
@@ -1,20 +0,36 @@ | ||
exports.attachComments = require("./attachComments"); | ||
"use strict"; | ||
exports.toTokens = require("./toTokens"); | ||
exports.toAST = require("./toAST"); | ||
var attachComments = require("./attachComments"); | ||
var convertComments = require("./convertComments"); | ||
var toTokens = require("./toTokens"); | ||
var toAST = require("./toAST"); | ||
exports.convertComments = function (comments) { | ||
for (var i = 0; i < comments.length; i++) { | ||
var comment = comments[i]; | ||
if (comment.type === "CommentBlock") { | ||
comment.type = "Block"; | ||
} else if (comment.type === "CommentLine") { | ||
comment.type = "Line"; | ||
} | ||
// sometimes comments don't get ranges computed, | ||
// even with options.ranges === true | ||
if (!comment.range) { | ||
comment.range = [comment.start, comment.end]; | ||
} | ||
} | ||
module.exports = function (ast, traverse, tt, code) { | ||
// remove EOF token, eslint doesn't use this for anything and it interferes | ||
// with some rules see https://github.com/babel/babel-eslint/issues/2 | ||
// todo: find a more elegant way to do this | ||
ast.tokens.pop(); | ||
// convert tokens | ||
ast.tokens = toTokens(ast.tokens, tt, code); | ||
// add comments | ||
convertComments(ast.comments); | ||
// transform esprima and acorn divergent nodes | ||
toAST(ast, traverse, code); | ||
// ast.program.tokens = ast.tokens; | ||
// ast.program.comments = ast.comments; | ||
// ast = ast.program; | ||
// remove File | ||
ast.type = "Program"; | ||
ast.sourceType = ast.program.sourceType; | ||
ast.directives = ast.program.directives; | ||
ast.body = ast.program.body; | ||
delete ast.program; | ||
delete ast._paths; | ||
attachComments(ast, ast.comments, ast.tokens); | ||
}; |
@@ -1,10 +0,12 @@ | ||
var source; | ||
"use strict"; | ||
var convertComments = require("./convertComments"); | ||
module.exports = function (ast, traverse, code) { | ||
source = code; | ||
var state = { source: code }; | ||
ast.range = [ast.start, ast.end]; | ||
traverse(ast, astTransformVisitor); | ||
traverse(ast, astTransformVisitor, null, state); | ||
}; | ||
function changeToLiteral(node) { | ||
function changeToLiteral(node, state) { | ||
node.type = "Literal"; | ||
@@ -15,3 +17,3 @@ if (!node.raw) { | ||
} else { | ||
node.raw = source.slice(node.start, node.end); | ||
node.raw = state.source.slice(node.start, node.end); | ||
} | ||
@@ -21,14 +23,2 @@ } | ||
function changeComments(nodeComments) { | ||
for (var i = 0; i < nodeComments.length; i++) { | ||
var comment = nodeComments[i]; | ||
if (comment.type === "CommentLine") { | ||
comment.type = "Line"; | ||
} else if (comment.type === "CommentBlock") { | ||
comment.type = "Block"; | ||
} | ||
comment.range = [comment.start, comment.end]; | ||
} | ||
} | ||
var astTransformVisitor = { | ||
@@ -50,7 +40,7 @@ noScope: true, | ||
if (node.trailingComments) { | ||
changeComments(node.trailingComments); | ||
convertComments(node.trailingComments); | ||
} | ||
if (node.leadingComments) { | ||
changeComments(node.leadingComments); | ||
convertComments(node.leadingComments); | ||
} | ||
@@ -61,10 +51,26 @@ | ||
}, | ||
exit (path) { | ||
exit (path, state) { | ||
var node = path.node; | ||
[ | ||
fixDirectives, | ||
].forEach((fixer) => { | ||
fixer(path); | ||
}); | ||
// fixDirectives | ||
if (path.isFunction() || path.isProgram()) { | ||
var directivesContainer = node; | ||
var body = node.body; | ||
if (node.type !== "Program") { | ||
directivesContainer = body; | ||
body = body.body; | ||
} | ||
if (directivesContainer.directives) { | ||
for (var i = directivesContainer.directives.length - 1; i >= 0; i--) { | ||
var directive = directivesContainer.directives[i]; | ||
directive.type = "ExpressionStatement"; | ||
directive.expression = directive.value; | ||
delete directive.value; | ||
directive.expression.type = "Literal"; | ||
changeToLiteral(directive.expression, state); | ||
body.unshift(directive); | ||
} | ||
delete directivesContainer.directives; | ||
} | ||
} | ||
@@ -78,3 +84,3 @@ if (path.isJSXText()) { | ||
path.isStringLiteral()) { | ||
changeToLiteral(node); | ||
changeToLiteral(node, state); | ||
} | ||
@@ -112,3 +118,3 @@ | ||
if (path.isClassMethod() || path.isObjectMethod()) { | ||
var code = source.slice(node.key.end, node.body.start); | ||
var code = state.source.slice(node.key.end, node.body.start); | ||
var offset = code.indexOf("("); | ||
@@ -220,3 +226,4 @@ | ||
if (path.isTemplateLiteral()) { | ||
node.quasis.forEach((q) => { | ||
for (var j = 0; j < node.quasis.length; j++) { | ||
var q = node.quasis[j]; | ||
q.range[0] -= 1; | ||
@@ -234,32 +241,5 @@ if (q.tail) { | ||
} | ||
}); | ||
} | ||
} | ||
} | ||
}; | ||
function fixDirectives (path) { | ||
if (!(path.isProgram() || path.isFunction())) return; | ||
var node = path.node; | ||
var directivesContainer = node; | ||
var body = node.body; | ||
if (node.type !== "Program") { | ||
directivesContainer = body; | ||
body = body.body; | ||
} | ||
if (!directivesContainer.directives) return; | ||
directivesContainer.directives.reverse().forEach((directive) => { | ||
directive.type = "ExpressionStatement"; | ||
directive.expression = directive.value; | ||
delete directive.value; | ||
directive.expression.type = "Literal"; | ||
changeToLiteral(directive.expression); | ||
body.unshift(directive); | ||
}); | ||
delete directivesContainer.directives; | ||
} | ||
// fixDirectives |
@@ -0,1 +1,3 @@ | ||
"use strict"; | ||
module.exports = function (token, tt, source) { | ||
@@ -2,0 +4,0 @@ var type = token.type; |
@@ -0,1 +1,3 @@ | ||
"use strict"; | ||
var convertTemplateType = require("./convertTemplateType"); | ||
@@ -7,8 +9,9 @@ var toToken = require("./toToken"); | ||
convertTemplateType(tokens, tt); | ||
var transformedTokens = tokens.filter((token) => { | ||
return token.type !== "CommentLine" && token.type !== "CommentBlock"; | ||
}); | ||
for (var i = 0, l = transformedTokens.length; i < l; i++) { | ||
transformedTokens[i] = toToken(transformedTokens[i], tt, code); | ||
var transformedTokens = []; | ||
for (var i = 0; i < tokens.length; i++) { | ||
var token = tokens[i]; | ||
if (token.type !== "CommentLine" && token.type !== "CommentBlock") { | ||
transformedTokens.push(toToken(token, tt, code)); | ||
} | ||
} | ||
@@ -15,0 +18,0 @@ |
114
index.js
@@ -13,17 +13,6 @@ var babylonToEspree = require("./babylon-to-espree"); | ||
function createModule(filename) { | ||
var mod = new Module(filename); | ||
mod.filename = filename; | ||
mod.paths = Module._nodeModulePaths(path.dirname(filename)); | ||
return mod; | ||
} | ||
function monkeypatch() { | ||
if (hasPatched) return; | ||
hasPatched = true; | ||
var eslintLoc; | ||
function getModules() { | ||
try { | ||
// avoid importing a local copy of eslint, try to find a peer dependency | ||
eslintLoc = Module._resolveFilename("eslint", module.parent); | ||
var eslintLoc = Module._resolveFilename("eslint", module.parent); | ||
} catch (err) { | ||
@@ -39,6 +28,34 @@ try { | ||
// get modules relative to what eslint will load | ||
var eslintMod = createModule(eslintLoc); | ||
// ESLint v1.9.0 uses estraverse directly to work around https://github.com/npm/npm/issues/9663 | ||
var eslintMod = new Module(eslintLoc); | ||
eslintMod.filename = eslintLoc; | ||
eslintMod.paths = Module._nodeModulePaths(path.dirname(eslintLoc)); | ||
try { | ||
var escope = eslintMod.require("eslint-scope"); | ||
var Definition = eslintMod.require("eslint-scope/lib/definition").Definition; | ||
var referencer = eslintMod.require("eslint-scope/lib/referencer"); | ||
} catch (err) { | ||
escope = eslintMod.require("escope"); | ||
Definition = eslintMod.require("escope/lib/definition").Definition; | ||
referencer = eslintMod.require("escope/lib/referencer"); | ||
} | ||
var estraverse = eslintMod.require("estraverse"); | ||
if (referencer.__esModule) referencer = referencer.default; | ||
return { | ||
Definition, | ||
escope, | ||
estraverse, | ||
referencer, | ||
}; | ||
} | ||
function monkeypatch(modules) { | ||
var Definition = modules.Definition; | ||
var escope = modules.escope; | ||
var estraverse = modules.estraverse; | ||
var referencer = modules.referencer; | ||
Object.assign(estraverse.VisitorKeys, t.VISITOR_KEYS); | ||
@@ -48,6 +65,2 @@ estraverse.VisitorKeys.MethodDefinition.push("decorators"); | ||
// monkeypatch escope | ||
var escopeLoc = Module._resolveFilename("escope", eslintMod); | ||
var escopeMod = createModule(escopeLoc); | ||
var escope = require(escopeLoc); | ||
var analyze = escope.analyze; | ||
@@ -65,24 +78,2 @@ escope.analyze = function (ast, opts) { | ||
// monkeypatch escope/referencer | ||
var referencerLoc; | ||
try { | ||
referencerLoc = Module._resolveFilename("./referencer", escopeMod); | ||
} catch (err) { | ||
throw new ReferenceError("couldn't resolve escope/referencer"); | ||
} | ||
var referencerMod = createModule(referencerLoc); | ||
var referencer = require(referencerLoc); | ||
if (referencer.__esModule) { | ||
referencer = referencer.default; | ||
} | ||
// reference Definition | ||
var definitionLoc; | ||
try { | ||
definitionLoc = Module._resolveFilename("./definition", referencerMod); | ||
} catch (err) { | ||
throw new ReferenceError("couldn't resolve escope/definition"); | ||
} | ||
var Definition = require(definitionLoc).Definition; | ||
// if there are decorators, then visit each | ||
@@ -375,7 +366,10 @@ function visitDecorators(node) { | ||
try { | ||
monkeypatch(); | ||
} catch (err) { | ||
console.error(err.stack); | ||
process.exit(1); | ||
if (!hasPatched) { | ||
hasPatched = true; | ||
try { | ||
monkeypatch(getModules()); | ||
} catch (err) { | ||
console.error(err.stack); | ||
process.exit(1); | ||
} | ||
} | ||
@@ -436,31 +430,5 @@ | ||
// remove EOF token, eslint doesn't use this for anything and it interferes with some rules | ||
// see https://github.com/babel/babel-eslint/issues/2 for more info | ||
// todo: find a more elegant way to do this | ||
ast.tokens.pop(); | ||
babylonToEspree(ast, traverse, tt, code); | ||
// convert tokens | ||
ast.tokens = babylonToEspree.toTokens(ast.tokens, tt, code); | ||
// add comments | ||
babylonToEspree.convertComments(ast.comments); | ||
// transform esprima and acorn divergent nodes | ||
babylonToEspree.toAST(ast, traverse, code); | ||
// ast.program.tokens = ast.tokens; | ||
// ast.program.comments = ast.comments; | ||
// ast = ast.program; | ||
// remove File | ||
ast.type = "Program"; | ||
ast.sourceType = ast.program.sourceType; | ||
ast.directives = ast.program.directives; | ||
ast.body = ast.program.body; | ||
delete ast.program; | ||
delete ast._paths; | ||
babylonToEspree.attachComments(ast, ast.comments, ast.tokens); | ||
return ast; | ||
}; |
{ | ||
"name": "babel-eslint", | ||
"version": "7.2.1", | ||
"version": "7.2.2", | ||
"description": "Custom parser for ESLint", | ||
@@ -39,2 +39,3 @@ "main": "index.js", | ||
"babel-eslint": "^7.0.0", | ||
"dedent": "^0.7.0", | ||
"eslint": "^3.18.0", | ||
@@ -41,0 +42,0 @@ "eslint-config-babel": "^6.0.0", |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
11
1
34921
7
849