-
Notifications
You must be signed in to change notification settings - Fork 777
Description
What steps will reproduce the problem?
On a fresh checkout of the harmony branch:
// test.js
var esprima = require('./');
var source = [
'({',
' method1(arg1) {},',
'})'
].join('\n');
var ast = esprima.parse(source, { range: true });
console.log(ast.body[0].expression.properties[0]);
console.log(ast.body[0].expression.properties[0].value.params[0]);$ node test.js
{ type: 'Property',
key: { type: 'Identifier', name: 'method1', range: [ 7, 14 ] },
value:
{ type: 'FunctionExpression',
id: null,
params: [ [Object] ],
defaults: [],
body: { type: 'BlockStatement', body: [], range: [Object] },
rest: null,
generator: false,
expression: false,
range: [ 21, 23 ] },
kind: 'init',
method: true,
shorthand: false,
computed: false,
range: [ 7, 23 ] }
{ type: 'Identifier', name: 'arg1', range: [ 15, 19 ] }
What is the expected output?
I would expect the FunctionExpression's range to include the method's parameters as well as the body as in (arg1) {}.
It makes sense that the method's name is not included, as that is the Property's key and does not belong to the FunctionExpression.
What do you see instead?
The FunctionExpression's range includes only the body, {}, leading to a scenario in which a traversal starting at the FunctionExpression, range 21-23, would reach the parameter, whose range, 15-19, lies outside that of its parent.
(Migrated from https://code.google.com/p/esprima/issues/detail?id=625, as reported by @btmills)