Index: third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js b/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js |
index 37014ddcfc467fcdfb9099eb1d9ffe47a2fc3e32..2c8fd460578b23d61b7e29c7f08c1b2068a97a12 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js |
+++ b/third_party/WebKit/Source/devtools/front_end/formatter_worker/FormatterWorker.js |
@@ -131,11 +131,11 @@ WebInspector.evaluatableJavaScriptSubstring = function(content) |
*/ |
WebInspector.javaScriptIdentifiers = function(content) |
{ |
- var root = acorn.parse(content, {}); |
+ var root = acorn.parse(content, { ranges: false, ecmaVersion: 6 }); |
+ |
/** @type {!Array<!ESTree.Node>} */ |
var identifiers = []; |
- var functionDeclarationCounter = 0; |
- var walker = new WebInspector.ESTreeWalker(beforeVisit, afterVisit); |
+ var walker = new WebInspector.ESTreeWalker(beforeVisit); |
/** |
* @param {!ESTree.Node} node |
@@ -143,7 +143,7 @@ WebInspector.javaScriptIdentifiers = function(content) |
*/ |
function isFunction(node) |
{ |
- return node.type === "FunctionDeclaration" || node.type === "FunctionExpression"; |
+ return node.type === "FunctionDeclaration" || node.type === "FunctionExpression" || node.type === "ArrowFunctionExpression"; |
} |
/** |
@@ -151,29 +151,29 @@ WebInspector.javaScriptIdentifiers = function(content) |
*/ |
function beforeVisit(node) |
{ |
- if (isFunction(node)) |
- functionDeclarationCounter++; |
+ if (isFunction(node)) { |
+ if (node.id) |
+ identifiers.push(node.id); |
+ return WebInspector.ESTreeWalker.SkipSubtree; |
+ } |
- if (functionDeclarationCounter > 1) |
+ if (node.type !== "Identifier") |
return; |
- if (isFunction(node) && node.params) |
- identifiers.pushAll(node.params); |
- |
- if (node.type === "VariableDeclarator") |
- identifiers.push(/** @type {!ESTree.Node} */(node.id)); |
+ if (node.parent && node.parent.type === "MemberExpression" && node.parent.property === node && !node.parent.computed) |
+ return; |
+ identifiers.push(node); |
} |
- /** |
- * @param {!ESTree.Node} node |
- */ |
- function afterVisit(node) |
- { |
- if (isFunction(node)) |
- functionDeclarationCounter--; |
+ if (!root || root.type !== "Program" || root.body.length !== 1 || !isFunction(root.body[0])) { |
+ postMessage([]); |
+ return; |
} |
- walker.walk(root); |
+ var functionNode = root.body[0]; |
+ for (var param of functionNode.params) |
+ walker.walk(param); |
+ walker.walk(functionNode.body); |
var reduced = identifiers.map(id => ({name: id.name, offset: id.start})); |
postMessage(reduced); |
} |