From a8501eb8d25b9c97a033798b7d95ea68d55efd4d Mon Sep 17 00:00:00 2001 From: Reyad Attiyat Date: Thu, 8 Dec 2016 15:38:40 -0600 Subject: [PATCH] Fix: Exception thrown when space occurs after function name (fixes #123) We can calculate where the function parameters starts by using node.parameters.pos and adding one. --- lib/ast-converter.js | 2 +- .../class-method-named-with-space.result.js | 320 ++++++++++++++++++ .../class-method-named-with-space.src.js | 1 + ...ass-with-accessibility-modifiers.result.js | 6 +- 4 files changed, 325 insertions(+), 4 deletions(-) create mode 100644 tests/fixtures/ecma-features/classes/class-method-named-with-space.result.js create mode 100644 tests/fixtures/ecma-features/classes/class-method-named-with-space.src.js diff --git a/lib/ast-converter.js b/lib/ast-converter.js index f0ded24..db47116 100644 --- a/lib/ast-converter.js +++ b/lib/ast-converter.js @@ -1058,7 +1058,7 @@ module.exports = function(ast, extra) { generator: false, expression: false, body: convertChild(node.body), - range: [ node.name.end, result.range[1]], + range: [ node.parameters.pos - 1, result.range[1]], loc: { start: { line: methodLoc.line + 1, diff --git a/tests/fixtures/ecma-features/classes/class-method-named-with-space.result.js b/tests/fixtures/ecma-features/classes/class-method-named-with-space.result.js new file mode 100644 index 0000000..9082d93 --- /dev/null +++ b/tests/fixtures/ecma-features/classes/class-method-named-with-space.result.js @@ -0,0 +1,320 @@ +module.exports = { + "type": "Program", + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "body": [ + { + "type": "ClassDeclaration", + "range": [ + 0, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 25 + } + }, + "id": { + "type": "Identifier", + "range": [ + 6, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + }, + "name": "A" + }, + "body": { + "type": "ClassBody", + "body": [ + { + "type": "MethodDefinition", + "range": [ + 9, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "key": { + "type": "Identifier", + "range": [ + 9, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 18 + } + }, + "name": "withSpace" + }, + "value": { + "type": "FunctionExpression", + "id": null, + "generator": false, + "expression": false, + "body": { + "type": "BlockStatement", + "range": [ + 22, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "body": [] + }, + "range": [ + 19, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 18 + }, + "end": { + "line": 1, + "column": 24 + } + }, + "params": [] + }, + "computed": false, + "static": false, + "kind": "method", + "accessibility": null, + "decorators": [] + } + ], + "range": [ + 8, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 25 + } + } + }, + "superClass": null, + "implements": [], + "decorators": [] + } + ], + "sourceType": "script", + "tokens": [ + { + "type": "Keyword", + "value": "class", + "range": [ + 0, + 5 + ], + "loc": { + "start": { + "line": 1, + "column": 0 + }, + "end": { + "line": 1, + "column": 5 + } + } + }, + { + "type": "Identifier", + "value": "A", + "range": [ + 6, + 7 + ], + "loc": { + "start": { + "line": 1, + "column": 6 + }, + "end": { + "line": 1, + "column": 7 + } + } + }, + { + "type": "Punctuator", + "value": "{", + "range": [ + 8, + 9 + ], + "loc": { + "start": { + "line": 1, + "column": 8 + }, + "end": { + "line": 1, + "column": 9 + } + } + }, + { + "type": "Identifier", + "value": "withSpace", + "range": [ + 9, + 18 + ], + "loc": { + "start": { + "line": 1, + "column": 9 + }, + "end": { + "line": 1, + "column": 18 + } + } + }, + { + "type": "Punctuator", + "value": "(", + "range": [ + 19, + 20 + ], + "loc": { + "start": { + "line": 1, + "column": 19 + }, + "end": { + "line": 1, + "column": 20 + } + } + }, + { + "type": "Punctuator", + "value": ")", + "range": [ + 20, + 21 + ], + "loc": { + "start": { + "line": 1, + "column": 20 + }, + "end": { + "line": 1, + "column": 21 + } + } + }, + { + "type": "Punctuator", + "value": "{", + "range": [ + 22, + 23 + ], + "loc": { + "start": { + "line": 1, + "column": 22 + }, + "end": { + "line": 1, + "column": 23 + } + } + }, + { + "type": "Punctuator", + "value": "}", + "range": [ + 23, + 24 + ], + "loc": { + "start": { + "line": 1, + "column": 23 + }, + "end": { + "line": 1, + "column": 24 + } + } + }, + { + "type": "Punctuator", + "value": "}", + "range": [ + 24, + 25 + ], + "loc": { + "start": { + "line": 1, + "column": 24 + }, + "end": { + "line": 1, + "column": 25 + } + } + } + ] +}; diff --git a/tests/fixtures/ecma-features/classes/class-method-named-with-space.src.js b/tests/fixtures/ecma-features/classes/class-method-named-with-space.src.js new file mode 100644 index 0000000..3e13605 --- /dev/null +++ b/tests/fixtures/ecma-features/classes/class-method-named-with-space.src.js @@ -0,0 +1 @@ +class A {withSpace () {}} diff --git a/tests/fixtures/typescript/basics/class-with-accessibility-modifiers.result.js b/tests/fixtures/typescript/basics/class-with-accessibility-modifiers.result.js index b79e78f..3ff4c0d 100644 --- a/tests/fixtures/typescript/basics/class-with-accessibility-modifiers.result.js +++ b/tests/fixtures/typescript/basics/class-with-accessibility-modifiers.result.js @@ -261,7 +261,7 @@ module.exports = { ] }, "range": [ - 81, + 82, 111 ], "loc": { @@ -447,7 +447,7 @@ module.exports = { ] }, "range": [ - 130, + 131, 171 ], "loc": { @@ -1284,4 +1284,4 @@ module.exports = { } } ] -}; \ No newline at end of file +};