millermedeiros / esformatter

ECMAScript code beautifier/formatter
MIT License
970 stars 91 forks source link

Problem with object expression containing getters and setters #226

Closed andrelillvede closed 9 years ago

andrelillvede commented 9 years ago

When running:

var esformatter = require('esformatter');

// for a list of available options check "lib/preset/default.json"
var options = {
    // inherit from the default preset
    preset : 'default',
    indent : {
        value : '  '
    }
};

var fs = require('fs');
var codeStr = fs.readFileSync('file.js').toString();

// return a string with the formatted code
var formattedCode = esformatter.format(codeStr, options);
console.log(formattedCode)

And file.js contains:

var o = {
    a: 0,
    get b() {}, 
    set c(x) {}
};

I get no error, but with:

var o = {
    get b() {}, 
    set c(x) {}
};

I get:

node_modules/esformatter/lib/whiteSpace.js:43
    type, amount, token.value
                   ^
TypeError: Cannot read property 'value' of undefined
    at Object.limitBefore (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/whiteSpace.js:43:24)
    at /Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/hooks/ObjectExpression.js:53:9
    at Array.forEach (native)
    at ObjectExpression [as format] (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/hooks/ObjectExpression.js:23:19)
    at transformNode (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/esformatter.js:87:10)
    at Array.forEach (native)
    at Object.moonwalk (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/node_modules/rocambole/rocambole.js:414:11)
    at transform (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/esformatter.js:59:13)
    at Object.format (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/esformatter.js:46:3)
    at Object.<anonymous> (/Users/andre.lillvede/Kod/Node/fmt/index.js:25:33)

and with:

var o = {
    get b() {}, 
};

I get:

node_modules/esformatter/lib/lineBreak.js:166
return end? end : token.root.endToken;
                     ^
TypeError: Cannot read property 'root' of undefined
    at getEndToken (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/lineBreak.js:166:26)
    at Object.limitAfter (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/lineBreak.js:59:13)
    at Object.limitAfter [as after] (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/limit.js:19:7)
    at Object.Params (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/hooks/Params.js:21:12)
    at Object.FunctionExpression [as format] (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/hooks/FunctionExpression.js:34:11)
    at transformNode (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/esformatter.js:87:10)
    at Array.forEach (native)
    at Object.moonwalk (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/node_modules/rocambole/rocambole.js:414:11)
    at transform (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/esformatter.js:59:13)
    at Object.format (/Users/andre.lillvede/Kod/Node/node_modules/esformatter/lib/esformatter.js:46:3)
millermedeiros commented 9 years ago

this was fixed by https://github.com/millermedeiros/esformatter/commit/1549cbd94610f12cddc968b08d8a591d8338e14e