forked from firefox-devtools/debugger
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgetFunctionName.js
More file actions
44 lines (34 loc) · 1.08 KB
/
getFunctionName.js
File metadata and controls
44 lines (34 loc) · 1.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
// @flow
import * as t from "babel-types";
import type { NodePath } from "babel-traverse";
export default function getFunctionName(path: NodePath): string {
if (path.node.id) {
return path.node.id.name;
}
if (path.type === "MethodDefinition") {
return path.node.key.name;
}
const parent = path.parent;
if (parent.type == "ObjectProperty") {
return parent.key.name;
}
if (parent.type == "ObjectExpression" || path.node.type == "ClassMethod") {
return path.node.key.name;
}
if (parent.type == "VariableDeclarator") {
return parent.id.name;
}
if (parent.type == "AssignmentExpression") {
if (parent.left.type == "MemberExpression") {
return parent.left.property.name;
}
return parent.left.name;
}
if (t.isClassProperty(parent) && t.isArrowFunctionExpression(path)) {
return parent.key.name;
}
return "anonymous";
}