Created
June 28, 2017 21:08
-
-
Save wldcordeiro/1acf6b11f947291fdb47a94cffa23096 to your computer and use it in GitHub Desktop.
Parsing more function symbol types
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/package.json b/package.json | |
index ad9169df..12e1affd 100644 | |
--- a/package.json | |
+++ b/package.json | |
@@ -51,9 +51,9 @@ | |
"@percy-io/react-percy-storybook": "^0.1.11", | |
"babel-plugin-transform-es2015-modules-commonjs": "^6.22.0", | |
"babel-preset-react": "^6.24.1", | |
- "babel-traverse": "^6.22.1", | |
- "babel-types": "^6.22.0", | |
- "babylon": "^6.15.0", | |
+ "babel-traverse": "^6.25.0", | |
+ "babel-types": "^6.25.0", | |
+ "babylon": "^6.17.4", | |
"codemirror": "^5.1.0", | |
"devtools-components": "^0.0.1", | |
"devtools-launchpad": "0.0.87", | |
diff --git a/src/actions/tests/__snapshots__/ast.js.snap b/src/actions/tests/__snapshots__/ast.js.snap | |
index b3d70195..88e95200 100644 | |
--- a/src/actions/tests/__snapshots__/ast.js.snap | |
+++ b/src/actions/tests/__snapshots__/ast.js.snap | |
@@ -1,6 +1,94 @@ | |
// Jest Snapshot v1, https://goo.gl/fbAQLP | |
exports[`ast getOutOfScopeLocations with selected line 1`] = ` | |
+Object { | |
+ "functions": Array [ | |
+ Object { | |
+ "identifier": Object { | |
+ "end": 13, | |
+ "loc": Object { | |
+ "end": Object { | |
+ "column": 13, | |
+ "line": 1, | |
+ }, | |
+ "identifierName": "base", | |
+ "start": Object { | |
+ "column": 9, | |
+ "line": 1, | |
+ }, | |
+ }, | |
+ "name": "base", | |
+ "start": 9, | |
+ "type": "Identifier", | |
+ }, | |
+ "location": Object { | |
+ "end": Object { | |
+ "column": 21, | |
+ "line": 1, | |
+ }, | |
+ "start": Object { | |
+ "column": 0, | |
+ "line": 1, | |
+ }, | |
+ }, | |
+ "name": "base", | |
+ "parameterNames": Array [ | |
+ "boo", | |
+ ], | |
+ }, | |
+ ], | |
+ "identifiers": Array [ | |
+ Object { | |
+ "expression": "base", | |
+ "location": Object { | |
+ "end": Object { | |
+ "column": 13, | |
+ "line": 1, | |
+ }, | |
+ "start": Object { | |
+ "column": 9, | |
+ "line": 1, | |
+ }, | |
+ }, | |
+ "name": "base", | |
+ }, | |
+ Object { | |
+ "expression": "boo", | |
+ "location": Object { | |
+ "end": Object { | |
+ "column": 17, | |
+ "line": 1, | |
+ }, | |
+ "start": Object { | |
+ "column": 14, | |
+ "line": 1, | |
+ }, | |
+ }, | |
+ "name": "boo", | |
+ }, | |
+ ], | |
+ "memberExpressions": Array [], | |
+ "objectProperties": Array [], | |
+ "variables": Array [ | |
+ Object { | |
+ "location": Object { | |
+ "end": Object { | |
+ "column": 17, | |
+ "line": 1, | |
+ }, | |
+ "identifierName": "boo", | |
+ "start": Object { | |
+ "column": 14, | |
+ "line": 1, | |
+ }, | |
+ }, | |
+ "name": "boo", | |
+ }, | |
+ ], | |
+} | |
+`; | |
+ | |
+exports[`ast getOutOfScopeLocations with selected line 2`] = ` | |
Array [ | |
Object { | |
"end": Object { | |
@@ -15,7 +103,7 @@ Array [ | |
] | |
`; | |
-exports[`ast getOutOfScopeLocations with selected line 2`] = ` | |
+exports[`ast getOutOfScopeLocations with selected line 3`] = ` | |
Array [ | |
1, | |
2, | |
diff --git a/src/utils/parser/tests/__snapshots__/closest.js.snap b/src/utils/parser/tests/__snapshots__/closest.js.snap | |
index 1eff6b32..9c5757b3 100644 | |
--- a/src/utils/parser/tests/__snapshots__/closest.js.snap | |
+++ b/src/utils/parser/tests/__snapshots__/closest.js.snap | |
@@ -77,7 +77,6 @@ FunctionDeclaration (1:0,3:1) | |
operator: '*' | |
right: Identifier (2:13,2:14) | |
name: 'n' | |
- directives: [] | |
expression: false | |
generator: false | |
id: Identifier (1:9,1:15) | |
@@ -93,12 +92,9 @@ FunctionExpression (7:1,9:1) | |
body: BlockStatement (7:12,9:1) | |
body: | |
- ExpressionStatement (8:2,8:4) | |
- expression: NumericLiteral (8:2,8:3) | |
- extra: | |
- raw: '2' | |
- rawValue: 2 | |
+ expression: Literal (8:2,8:3) | |
+ raw: '2' | |
value: 2 | |
- directives: [] | |
expression: false | |
extra: | |
parenStart: 64 | |
@@ -113,7 +109,6 @@ FunctionExpression (5:8,5:21) | |
async: false | |
body: BlockStatement (5:19,5:21) | |
body: [] | |
- directives: [] | |
expression: false | |
generator: false | |
id: null | |
diff --git a/src/utils/parser/tests/__snapshots__/getSymbols.js.snap b/src/utils/parser/tests/__snapshots__/getSymbols.js.snap | |
index cd597746..1dcc65ba 100644 | |
--- a/src/utils/parser/tests/__snapshots__/getSymbols.js.snap | |
+++ b/src/utils/parser/tests/__snapshots__/getSymbols.js.snap | |
@@ -83,53 +83,19 @@ variables | |
exports[`Parser.getSymbols expression 1`] = ` | |
"properties | |
-[(1, 14), (1, 15)] obj.a a | |
-[(1, 19), (1, 20)] obj.a.b b | |
-[(5, 15), (5, 16)] com[a] a | |
-[(5, 21), (5, 22)] com[a].b b | |
-[(5, 30), (5, 31)] com[a][d] d | |
-[(5, 42), (5, 43)] com[b] b | |
-[(8, 2), (8, 8)] render | |
-[(12, 12), (12, 13)] obj.foo.a a | |
-[(12, 17), (12, 18)] obj.foo.a.b b | |
-[(12, 27), (12, 28)] obj.foo.b b | |
-[(13, 8), (13, 9)] com.a a | |
-[(13, 13), (13, 14)] com.a.b b | |
-[(13, 23), (13, 24)] com.b b | |
-[(16, 15), (16, 16)] res[0].a a | |
-[(16, 25), (16, 26)] res[1].b b | |
-[(17, 15), (17, 16)] res2.a a | |
-[(17, 21), (17, 22)] res2.a[0].b b | |
-[(18, 15), (18, 16)] res3.a a | |
-[(18, 21), (18, 22)] res3.a[0].b b | |
-[(18, 30), (18, 31)] res3.b b | |
-[(18, 36), (18, 37)] res3.b[0].c c | |
-[(19, 17), (19, 18)] res4[0].a a | |
-[(19, 29), (19, 30)] res4[0].b b | |
-[(22, 8), (22, 9)] b b | |
-[(22, 11), (22, 16)] resty resty | |
-[(25, 18), (25, 19)] a a | |
-[(25, 21), (25, 22)] b b | |
-[(26, 22), (26, 23)] a a | |
-[(26, 25), (26, 26)] b b | |
+ | |
member expressions | |
[(2, 19), (2, 33)] [(2, 12), (2, 33)] obj2.c.secondProperty secondProperty | |
[(2, 17), (2, 18)] [(2, 12), (2, 18)] obj2.c c | |
[(7, 4), (7, 12)] [(7, 0), (7, 12)] app.TodoView TodoView | |
[(7, 24), (7, 30)] [(7, 15), (7, 30)] Backbone.extend extend | |
[(12, 4), (12, 7)] [(12, 0), (12, 7)] obj.foo foo | |
-[(19, 40), (19, 41)] [(19, 32), (19, 41)] a.b.c.v.d d | |
-[(19, 38), (19, 39)] [(19, 32), (19, 39)] a.b.c.v v | |
-[(19, 36), (19, 37)] [(19, 32), (19, 37)] a.b.c c | |
-[(19, 34), (19, 35)] [(19, 32), (19, 35)] a.b b | |
[(27, 29), (27, 43)] [(27, 13), (27, 43)] secondProperty | |
[(27, 27), (27, 28)] [(27, 13), (27, 28)] c | |
[(27, 18), (27, 24)] [(27, 13), (27, 24)] obj2.doEvil doEvil | |
identifiers | |
[(1, 6), (1, 27)] obj obj | |
[(1, 6), (1, 9)] obj obj | |
-[(1, 14), (1, 15)] a a | |
-[(1, 19), (1, 20)] b b | |
[(2, 6), (2, 33)] foo foo | |
[(2, 6), (2, 9)] foo foo | |
[(2, 12), (2, 16)] obj2 obj2 | |
@@ -137,52 +103,22 @@ identifiers | |
[(2, 19), (2, 33)] secondProperty secondProperty | |
[(5, 6), (5, 49)] com com | |
[(5, 6), (5, 9)] com com | |
-[(5, 15), (5, 16)] a a | |
-[(5, 21), (5, 22)] b b | |
-[(5, 30), (5, 31)] d d | |
-[(5, 42), (5, 43)] b b | |
[(7, 0), (7, 3)] app app | |
[(7, 4), (7, 12)] TodoView TodoView | |
[(7, 15), (7, 23)] Backbone Backbone | |
[(7, 24), (7, 30)] extend extend | |
-[(8, 2), (8, 8)] render render | |
[(12, 0), (12, 3)] obj obj | |
[(12, 4), (12, 7)] foo foo | |
-[(12, 12), (12, 13)] a a | |
-[(12, 17), (12, 18)] b b | |
-[(12, 27), (12, 28)] b b | |
[(13, 0), (13, 3)] com com | |
-[(13, 8), (13, 9)] a a | |
-[(13, 13), (13, 14)] b b | |
-[(13, 23), (13, 24)] b b | |
[(16, 6), (16, 32)] res res | |
[(16, 6), (16, 9)] res res | |
-[(16, 15), (16, 16)] a a | |
-[(16, 25), (16, 26)] b b | |
[(17, 6), (17, 30)] res2 res2 | |
[(17, 6), (17, 10)] res2 res2 | |
-[(17, 15), (17, 16)] a a | |
-[(17, 21), (17, 22)] b b | |
[(18, 6), (18, 45)] res3 res3 | |
[(18, 6), (18, 10)] res3 res3 | |
-[(18, 15), (18, 16)] a a | |
-[(18, 21), (18, 22)] b b | |
-[(18, 30), (18, 31)] b b | |
-[(18, 36), (18, 37)] c c | |
[(19, 6), (19, 45)] res4 res4 | |
[(19, 6), (19, 10)] res4 res4 | |
-[(19, 17), (19, 18)] a a | |
-[(19, 29), (19, 30)] b b | |
-[(19, 32), (19, 33)] a a | |
-[(19, 34), (19, 35)] b b | |
-[(19, 36), (19, 37)] c c | |
-[(19, 38), (19, 39)] v v | |
-[(19, 40), (19, 41)] d d | |
[(22, 6), (22, 35)] undefined | |
-[(22, 8), (22, 9)] b b | |
-[(22, 8), (22, 9)] b b | |
-[(22, 11), (22, 16)] resty resty | |
-[(22, 11), (22, 16)] resty resty | |
[(22, 21), (22, 28)] compute compute | |
[(22, 29), (22, 34)] stuff stuff | |
[(23, 6), (23, 35)] undefined | |
@@ -191,16 +127,8 @@ identifiers | |
[(23, 21), (23, 28)] compute compute | |
[(23, 29), (23, 34)] stuff stuff | |
[(25, 9), (25, 15)] params params | |
-[(25, 18), (25, 19)] a a | |
-[(25, 18), (25, 19)] a a | |
-[(25, 21), (25, 22)] b b | |
-[(25, 21), (25, 22)] b b | |
[(26, 4), (26, 32)] pars pars | |
[(26, 4), (26, 8)] pars pars | |
-[(26, 22), (26, 23)] a a | |
-[(26, 22), (26, 23)] a a | |
-[(26, 25), (26, 26)] b b | |
-[(26, 25), (26, 26)] b b | |
[(27, 6), (27, 43)] evil evil | |
[(27, 6), (27, 10)] evil evil | |
[(27, 13), (27, 17)] obj2 obj2 | |
@@ -209,52 +137,23 @@ identifiers | |
[(27, 29), (27, 43)] secondProperty secondProperty | |
variables | |
[(1, 6), (1, 27)] obj | |
-[(1, 14), (1, 25)] a | |
-[(1, 19), (1, 23)] b | |
[(2, 6), (2, 33)] foo | |
[(5, 6), (5, 49)] com | |
-[(5, 14), (5, 39)] a | |
-[(5, 21), (5, 27)] b | |
-[(5, 29), (5, 37)] d | |
-[(5, 41), (5, 47)] b | |
-[(12, 12), (12, 25)] a | |
-[(12, 17), (12, 23)] b | |
-[(12, 27), (12, 31)] b | |
-[(13, 8), (13, 21)] a | |
-[(13, 13), (13, 19)] b | |
-[(13, 23), (13, 27)] b | |
[(16, 6), (16, 32)] res | |
-[(16, 15), (16, 19)] a | |
-[(16, 25), (16, 29)] b | |
[(17, 6), (17, 30)] res2 | |
-[(17, 15), (17, 28)] a | |
-[(17, 21), (17, 25)] b | |
[(18, 6), (18, 45)] res3 | |
-[(18, 15), (18, 28)] a | |
-[(18, 21), (18, 25)] b | |
-[(18, 30), (18, 43)] b | |
-[(18, 36), (18, 40)] c | |
[(19, 6), (19, 45)] res4 | |
-[(19, 17), (19, 21)] a | |
-[(19, 29), (19, 41)] b | |
[(22, 6), (22, 35)] undefined | |
-[(22, 8), (22, 9)] b | |
-[(22, 11), (22, 16)] resty | |
[(23, 6), (23, 35)] undefined | |
[(25, 16), (25, 24)] undefined | |
-[(25, 18), (25, 19)] a | |
-[(25, 21), (25, 22)] b | |
[(26, 4), (26, 32)] pars | |
[(26, 20), (26, 28)] undefined | |
-[(26, 22), (26, 23)] a | |
-[(26, 25), (26, 26)] b | |
[(27, 6), (27, 43)] evil " | |
`; | |
exports[`Parser.getSymbols finds symbols in an html file 1`] = ` | |
"properties | |
-[(5, 3), (5, 8)] globalObject.first first | |
-[(6, 3), (6, 7)] globalObject.last last | |
+ | |
member expressions | |
[(23, 18), (23, 29)] [(23, 10), (23, 29)] name.undefined.toUpperCase toUpperCase | |
[(23, 15), (23, 16)] [(23, 10), (23, 17)] name. undefined | |
@@ -267,8 +166,6 @@ member expressions | |
identifiers | |
[(4, 6), (7, 3)] globalObject globalObject | |
[(4, 6), (4, 18)] globalObject globalObject | |
-[(5, 3), (5, 8)] first first | |
-[(6, 3), (6, 7)] last last | |
[(8, 11), (8, 19)] sayHello sayHello | |
[(8, 21), (8, 25)] name name | |
[(9, 20), (9, 24)] name name | |
@@ -298,8 +195,6 @@ identifiers | |
[(38, 15), (38, 23)] greeting greeting | |
variables | |
[(4, 6), (7, 3)] globalObject | |
-[(5, 3), (5, 16)] first | |
-[(6, 3), (6, 16)] last | |
[(8, 21), (8, 25)] name | |
[(22, 8), (24, 3)] capitalize | |
[(22, 21), (22, 25)] name | |
@@ -355,13 +250,10 @@ variables | |
exports[`Parser.getSymbols proto 1`] = ` | |
"properties | |
-[(6, 2), (6, 9)] tagName | |
-[(7, 2), (7, 12)] initialize | |
-[(11, 2), (11, 8)] render | |
+ | |
member expressions | |
[(5, 31), (5, 37)] [(5, 17), (5, 37)] Backbone.View.extend extend | |
[(5, 26), (5, 30)] [(5, 17), (5, 30)] Backbone.View View | |
-[(9, 12), (9, 15)] [(9, 4), (9, 15)] console.log log | |
identifiers | |
[(1, 6), (1, 25)] foo foo | |
[(1, 6), (1, 9)] foo foo | |
@@ -372,20 +264,10 @@ identifiers | |
[(5, 17), (5, 25)] Backbone Backbone | |
[(5, 26), (5, 30)] View View | |
[(5, 31), (5, 37)] extend extend | |
-[(6, 2), (6, 9)] tagName tagName | |
-[(7, 2), (7, 12)] initialize initialize | |
-[(8, 2), (8, 9)] doThing doThing | |
-[(8, 10), (8, 11)] b b | |
-[(9, 4), (9, 11)] console console | |
-[(9, 12), (9, 15)] log log | |
-[(9, 22), (9, 23)] b b | |
-[(11, 2), (11, 8)] render render | |
variables | |
[(1, 6), (1, 25)] foo | |
[(3, 6), (3, 20)] bar | |
-[(5, 6), (14, 2)] TodoView | |
-[(6, 2), (6, 15)] tagName | |
-[(8, 10), (8, 11)] b " | |
+[(5, 6), (14, 2)] TodoView " | |
`; | |
exports[`Parser.getSymbols var 1`] = ` | |
diff --git a/src/utils/parser/tests/fixtures/class.js b/src/utils/parser/tests/fixtures/class.js | |
index d8b6afd6..2bb5a36d 100644 | |
--- a/src/utils/parser/tests/fixtures/class.js | |
+++ b/src/utils/parser/tests/fixtures/class.js | |
@@ -6,6 +6,10 @@ class Test { | |
bar(a) { | |
console.log("bar", a); | |
} | |
+ | |
+ foo = (z, x, y) => { | |
+ return z * x * y; | |
+ }; | |
} | |
class Test2 {} | |
diff --git a/src/utils/parser/utils/ast.js b/src/utils/parser/utils/ast.js | |
index 60f9001b..b08e81e1 100644 | |
--- a/src/utils/parser/utils/ast.js | |
+++ b/src/utils/parser/utils/ast.js | |
@@ -15,7 +15,20 @@ function _parse(code, opts) { | |
code, | |
Object.assign({}, opts, { | |
sourceType: "module", | |
- plugins: ["jsx", "flow"] | |
+ plugins: [ | |
+ "estree", | |
+ "jsx", | |
+ "flow", | |
+ "doExpressions", | |
+ "objectRestSpread", | |
+ "classProperties", | |
+ "exportExtensions", | |
+ "asyncGenerators", | |
+ "functionBind", | |
+ "functionSent", | |
+ "dynamicImport", | |
+ "templateInvalidEscapes" | |
+ ] | |
}) | |
); | |
} | |
diff --git a/src/utils/parser/utils/helpers.js b/src/utils/parser/utils/helpers.js | |
index 4eaec404..2ec04975 100644 | |
--- a/src/utils/parser/utils/helpers.js | |
+++ b/src/utils/parser/utils/helpers.js | |
@@ -14,7 +14,9 @@ export function isFunction(path: NodePath) { | |
t.isFunction(path) || | |
t.isArrowFunctionExpression(path) || | |
t.isObjectMethod(path) || | |
- t.isClassMethod(path) | |
+ t.isClassMethod(path) || | |
+ path.type === "MethodDefinition" || | |
+ (t.isClassProperty(path) && t.isArrowFunctionExpression(path)) | |
); | |
} | |
diff --git a/yarn.lock b/yarn.lock | |
index 95d9c3f2..49084999 100644 | |
--- a/yarn.lock | |
+++ b/yarn.lock | |
@@ -1373,7 +1373,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.25.0, babel-te | |
babylon "^6.17.2" | |
lodash "^4.2.0" | |
-babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.22.1, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0: | |
+babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.25.0, babel-traverse@^6.25.1: | |
version "6.25.0" | |
resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.25.0.tgz#2257497e2fcd19b89edc13c4c91381f9512496f1" | |
dependencies: | |
@@ -1387,7 +1387,7 @@ babel-traverse@^6.16.0, babel-traverse@^6.18.0, babel-traverse@^6.22.1, babel-tr | |
invariant "^2.2.0" | |
lodash "^4.2.0" | |
-babel-types@^6.14.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.22.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: | |
+babel-types@^6.14.0, babel-types@^6.16.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.25.0: | |
version "6.25.0" | |
resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.25.0.tgz#70afb248d5660e5d18f811d91c8303b54134a18e" | |
dependencies: | |
@@ -1403,9 +1403,9 @@ babelify@^7.3.0: | |
babel-core "^6.0.14" | |
object-assign "^4.0.0" | |
-babylon@^6.11.4, babylon@^6.13.0, babylon@^6.15.0, babylon@^6.17.0, babylon@^6.17.2: | |
- version "6.17.3" | |
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.3.tgz#1327d709950b558f204e5352587fd0290f8d8e48" | |
+babylon@^6.11.4, babylon@^6.13.0, babylon@^6.17.0, babylon@^6.17.2, babylon@^6.17.4: | |
+ version "6.17.4" | |
+ resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.17.4.tgz#3e8b7402b88d22c3423e137a1577883b15ff869a" | |
babylon@~5.8.3: | |
version "5.8.38" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment