From 0e3bbb54b4200fa8b5452089886eaf26b7b9593d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=94=AF=E7=84=B6?= Date: Thu, 24 Jun 2021 10:45:48 +0800 Subject: [PATCH] chore: make the $parser non-enumerable --- lib/rule-tester/rule-tester.js | 41 ++++++++++++++++++++++++++-------- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/lib/rule-tester/rule-tester.js b/lib/rule-tester/rule-tester.js index 15c29bfde012..b73867c9899e 100644 --- a/lib/rule-tester/rule-tester.js +++ b/lib/rule-tester/rule-tester.js @@ -239,6 +239,21 @@ function defineStartEndAsError(objName, node) { }); } +/** + * define a property $parser to be original parser + * use `defineProperty` to make it non-enumerable + * @param {Parser} wrappedParser the wrapped parser + * @param {Parser} originalParser the original parser + * @returns {void} + */ +function defineOriginalParser(wrappedParser, originalParser) { + Object.defineProperty(wrappedParser, "$parser", { + value: originalParser, + writable: true, + enumerable: false + }); +} + /** * Define `start`/`end` properties of all nodes of the given AST as throwing error. * @param {ASTNode} ast The root node to errorize `start`/`end` properties. @@ -258,8 +273,10 @@ function defineStartEndAsErrorInTree(ast, visitorKeys) { * @returns {Parser} Wrapped parser object. */ function wrapParser(parser) { + let wrappedParser; + if (typeof parser.parseForESLint === "function") { - return { + wrappedParser = { $parser: parser, parseForESLint(...args) { const ret = parser.parseForESLint(...args); @@ -268,16 +285,22 @@ function wrapParser(parser) { return ret; } }; + } else { + wrappedParser = { + $parser: parser, + parse(...args) { + const ast = parser.parse(...args); + + defineStartEndAsErrorInTree(ast); + return ast; + } + }; } - return { - $parser: parser, - parse(...args) { - const ast = parser.parse(...args); - defineStartEndAsErrorInTree(ast); - return ast; - } - }; + defineOriginalParser(wrappedParser, parser); + + return wrappedParser; + } //------------------------------------------------------------------------------