piuccio / sublime-esformatter

JavaScript formatter plugin for Sublime Text
MIT License
28 stars 20 forks source link

EsFormatter throws error in save #51

Open joekukish opened 9 years ago

joekukish commented 9 years ago

I'm using Sublime Text 3, with the following configuration:

{
    // Format the file when saved
    "format_on_save": true,

    // Path to the node executable, by default it tries to resolve the executable
    // for the command 'node' or 'nodejs'. Change this value to specify your own path
    "nodejs_path": null,

    // EsFormatter specific options
    // default are specified here https://github.com/millermedeiros/esformatter/blob/master/lib/preset/default.json
    "format_options" : {

        // You can change the preset for any other available on ESFormatter
        // Ref: https://github.com/millermedeiros/esformatter/tree/master/lib/preset
        // e.g.: "preset": "jquery"
        "preset": "default",

        "indent": {
            "alignComments": true,
            "value": "  ",
            "ArrayExpression": 1,
            "AssignmentExpression": 1,
            "AssignmentExpression.BinaryExpression": 1,
            "AssignmentExpression.LogicalExpression": 1,
            "AssignmentExpression.UnaryExpression": 1,
            "BinaryExpression": -1,
            "CallExpression": 1,
            "CallExpression.BinaryExpression": 1,
            "CallExpression.LogicalExpression": 1,
            "CatchClause": 1,
            "ConditionalExpression": 1,
            "DoWhileStatement": 1,
            "ForInStatement": 1,
            "ForStatement": 1,
            "FunctionDeclaration": 1,
            "FunctionExpression": 1,
            "IfStatement": 1,
            "MemberExpression": 1,
            "MultipleVariableDeclaration": 1,
            "NewExpression": 1,
            "ObjectExpression": 1,
            "ObjectExpression.BinaryExpression": 1,
            "ObjectExpression.LogicalExpression": 1,
            "ObjectExpression.UnaryExpression": 1,
            "ParameterList": 1,
            "ReturnStatement": 1,
            "SwitchCase": 1,
            "SwitchStatement": 0,
            "TopLevelFunctionBlock": 1,
            "TryStatement": 1,
            "VariableDeclaration.BinaryExpression": 1,
            "VariableDeclaration.LogicalExpression": 1,
            "VariableDeclaration.UnaryExpression": 1,
            "WhileStatement": 1
        },
        "lineBreak": {
            "value": "\n",
            "before": {
                "AssignmentExpression": ">=1",
                "AssignmentOperator": 0,
                "BlockStatement": 0,
                "CallExpression": -1,
                "CallExpressionOpeningParentheses": 0,
                "CallExpressionClosingParentheses": -1,
                "ConditionalExpression": ">=1",
                "CatchOpeningBrace": 0,
                "CatchClosingBrace": ">=1",
                "CatchKeyword": 0,
                "DeleteOperator": ">=1",
                "DoWhileStatement": ">=1",
                "DoWhileStatementOpeningBrace": 0,
                "DoWhileStatementClosingBrace": ">=1",
                "EndOfFile": -1,
                "EmptyStatement": -1,
                "FinallyKeyword": -1,
                "FinallyOpeningBrace": 0,
                "FinallyClosingBrace": ">=1",
                "ForInStatement": ">=1",
                "ForInStatementExpressionOpening": 0,
                "ForInStatementExpressionClosing": 0,
                "ForInStatementOpeningBrace": 0,
                "ForInStatementClosingBrace": ">=1",
                "ForStatement": ">=1",
                "ForStatementExpressionOpening": 0,
                "ForStatementExpressionClosing": "<2",
                "ForStatementOpeningBrace": 0,
                "ForStatementClosingBrace": ">=1",
                "FunctionExpression": -1,
                "FunctionExpressionOpeningBrace": 0,
                "FunctionExpressionClosingBrace": ">=1",
                "FunctionDeclaration": ">=1",
                "FunctionDeclarationOpeningBrace": 0,
                "FunctionDeclarationClosingBrace": ">=1",
                "IIFEClosingParentheses": 0,
                "IfStatement": ">=1",
                "IfStatementOpeningBrace": 0,
                "IfStatementClosingBrace": ">=1",
                "ElseIfStatement": 1,
                "ElseIfStatementOpeningBrace": 0,
                "ElseIfStatementClosingBrace": ">=1",
                "ElseStatement": 1,
                "ElseStatementOpeningBrace": 0,
                "ElseStatementClosingBrace": ">=1",
                "LogicalExpression": -1,
                "ObjectExpressionClosingBrace": ">=1",
                "Property": ">=1",
                "ReturnStatement": -1,
                "SwitchOpeningBrace": 0,
                "SwitchClosingBrace": ">=1",
                "ThisExpression": -1,
                "ThrowStatement": ">=1",
                "TryKeyword": -1,
                "TryOpeningBrace": 0,
                "TryClosingBrace": ">=1",
                "VariableName": ">=1",
                "VariableValue": 0,
                "VariableDeclaration": ">=1",
                "VariableDeclarationWithoutInit": ">=1",
                "WhileStatement": ">=1",
                "WhileStatementOpeningBrace": 0,
                "WhileStatementClosingBrace": ">=1"
            },
            "after": {
                "AssignmentExpression": ">=1",
                "AssignmentOperator": 0,
                "BlockStatement": 0,
                "CallExpression": -1,
                "CallExpressionOpeningParentheses": -1,
                "CallExpressionClosingParentheses": -1,
                "CatchOpeningBrace": ">=1",
                "CatchClosingBrace": ">=0",
                "CatchKeyword": 0,
                "ConditionalExpression": ">=1",
                "DeleteOperator": ">=1",
                "DoWhileStatement": ">=1",
                "DoWhileStatementOpeningBrace": ">=1",
                "DoWhileStatementClosingBrace": 0,
                "EmptyStatement": -1,
                "FinallyKeyword": -1,
                "FinallyOpeningBrace": ">=1",
                "FinallyClosingBrace": ">=1",
                "ForInStatement": ">=1",
                "ForInStatementExpressionOpening": "<2",
                "ForInStatementExpressionClosing": -1,
                "ForInStatementOpeningBrace": ">=1",
                "ForInStatementClosingBrace": ">=1",
                "ForStatement": ">=1",
                "ForStatementExpressionOpening": "<2",
                "ForStatementExpressionClosing": -1,
                "ForStatementOpeningBrace": ">=1",
                "ForStatementClosingBrace": ">=1",
                "FunctionExpression": ">=1",
                "FunctionExpressionOpeningBrace": ">=1",
                "FunctionExpressionClosingBrace": -1,
                "FunctionDeclaration": ">=1",
                "FunctionDeclarationOpeningBrace": ">=1",
                "FunctionDeclarationClosingBrace": ">=1",
                "IIFEOpeningParentheses": 0,
                "IfStatement": ">=1",
                "IfStatementOpeningBrace": ">=1",
                "IfStatementClosingBrace": ">=1",
                "ElseIfStatement": ">=1",
                "ElseIfStatementOpeningBrace": ">=1",
                "ElseIfStatementClosingBrace": ">=1",
                "ElseStatement": ">=1",
                "ElseStatementOpeningBrace": ">=1",
                "ElseStatementClosingBrace": ">=1",
                "LogicalExpression": -1,
                "ObjectExpressionOpeningBrace": ">=1",
                "Property": 0,
                "ReturnStatement": -1,
                "SwitchOpeningBrace": ">=1",
                "SwitchClosingBrace": ">=1",
                "ThisExpression": 0,
                "ThrowStatement": ">=1",
                "TryKeyword": -1,
                "TryOpeningBrace": ">=1",
                "TryClosingBrace": 0,
                "VariableDeclaration": ">=1",
                "WhileStatement": ">=1",
                "WhileStatementOpeningBrace": ">=1",
                "WhileStatementClosingBrace": ">=1"
            }
        },
        "whiteSpace": {
            "value": " ",
            "removeTrailing": 1,
            "before": {
                "ArrayExpressionOpening": 0,
                "ArrayExpressionClosing": 0,
                "ArrayExpressionComma": 0,
                "ArgumentComma": 0,
                "ArgumentList": 0,
                "AssignmentOperator": 1,
                "BinaryExpression": 0,
                "BinaryExpressionOperator": 1,
                "BlockComment": 1,
                "CallExpression": -1,
                "CallExpressionOpeningParentheses": 0,
                "CallExpressionClosingParentheses": -1,
                "CatchParameterList": 0,
                "CatchOpeningBrace": 1,
                "CatchClosingBrace": 1,
                "CatchKeyword": 1,
                "CommaOperator": 0,
                "ConditionalExpressionConsequent": 1,
                "ConditionalExpressionAlternate": 1,
                "DoWhileStatementOpeningBrace": 1,
                "DoWhileStatementClosingBrace": 1,
                "DoWhileStatementConditional": 1,
                "EmptyStatement": 0,
                "ExpressionClosingParentheses": 0,
                "FinallyKeyword": -1,
                "FinallyOpeningBrace": 1,
                "FinallyClosingBrace": 1,
                "ForInStatement": 1,
                "ForInStatementExpressionOpening": 1,
                "ForInStatementExpressionClosing": 0,
                "ForInStatementOpeningBrace": 1,
                "ForInStatementClosingBrace": 1,
                "ForStatement": 1,
                "ForStatementExpressionOpening": 1,
                "ForStatementExpressionClosing": 0,
                "ForStatementOpeningBrace": 1,
                "ForStatementClosingBrace": 1,
                "ForStatementSemicolon": 0,
                "FunctionDeclarationOpeningBrace": 1,
                "FunctionDeclarationClosingBrace": 1,
                "FunctionExpressionOpeningBrace": 1,
                "FunctionExpressionClosingBrace": 1,
                "IIFEClosingParentheses": 0,
                "IfStatementConditionalOpening": 1,
                "IfStatementConditionalClosing": 0,
                "IfStatementOpeningBrace": 1,
                "IfStatementClosingBrace": 1,
                "ElseStatementOpeningBrace": 1,
                "ElseStatementClosingBrace": 1,
                "ElseIfStatementOpeningBrace": 1,
                "ElseIfStatementClosingBrace": 1,
                "MemberExpressionClosing": 0,
                "LineComment": 1,
                "LogicalExpressionOperator": 1,
                "Property": 1,
                "PropertyValue": 1,
                "ParameterComma": 0,
                "ParameterList": 0,
                "SwitchDiscriminantOpening": 1,
                "SwitchDiscriminantClosing": 0,
                "ThrowKeyword": 1,
                "TryKeyword": -1,
                "TryOpeningBrace": 1,
                "TryClosingBrace": 1,
                "UnaryExpressionOperator": 0,
                "VariableName": 1,
                "VariableValue": 1,
                "WhileStatementConditionalOpening": 1,
                "WhileStatementConditionalClosing": 0,
                "WhileStatementOpeningBrace": 1,
                "WhileStatementClosingBrace": 1
            },
            "after": {
                "ArrayExpressionOpening": 0,
                "ArrayExpressionClosing": 0,
                "ArrayExpressionComma": 1,
                "ArgumentComma": 1,
                "ArgumentList": 0,
                "AssignmentOperator": 1,
                "BinaryExpression": 0,
                "BinaryExpressionOperator": 1,
                "BlockComment": 1,
                "CallExpression": -1,
                "CallExpressionOpeningParentheses": -1,
                "CallExpressionClosingParentheses": -1,
                "CatchParameterList": 0,
                "CatchOpeningBrace": 1,
                "CatchClosingBrace": 1,
                "CatchKeyword": 1,
                "CommaOperator": 1,
                "ConditionalExpressionConsequent": 1,
                "ConditionalExpressionTest": 1,
                "DoWhileStatementOpeningBrace": 1,
                "DoWhileStatementClosingBrace": 1,
                "DoWhileStatementBody": 1,
                "EmptyStatement": 0,
                "ExpressionOpeningParentheses": 0,
                "FinallyKeyword": -1,
                "FinallyOpeningBrace": 1,
                "FinallyClosingBrace": 1,
                "ForInStatement": 1,
                "ForInStatementExpressionOpening": 0,
                "ForInStatementExpressionClosing": 1,
                "ForInStatementOpeningBrace": 1,
                "ForInStatementClosingBrace": 1,
                "ForStatement": 1,
                "ForStatementExpressionOpening": 0,
                "ForStatementExpressionClosing": 1,
                "ForStatementClosingBrace": 1,
                "ForStatementOpeningBrace": 1,
                "ForStatementSemicolon": 1,
                "FunctionReservedWord": 0,
                "FunctionName": 0,
                "FunctionExpressionOpeningBrace": 1,
                "FunctionExpressionClosingBrace": 0,
                "FunctionDeclarationOpeningBrace": 1,
                "FunctionDeclarationClosingBrace": 1,
                "IIFEOpeningParentheses": 0,
                "IfStatementConditionalOpening": 0,
                "IfStatementConditionalClosing": 1,
                "IfStatementOpeningBrace": 1,
                "IfStatementClosingBrace": 1,
                "ElseStatementOpeningBrace": 1,
                "ElseStatementClosingBrace": 1,
                "ElseIfStatementOpeningBrace": 1,
                "ElseIfStatementClosingBrace": 1,
                "MemberExpressionOpening": 0,
                "LogicalExpressionOperator": 1,
                "ObjectExpressionClosingBrace": 0,
                "PropertyName": 0,
                "PropertyValue": 0,
                "ParameterComma": 1,
                "ParameterList": 0,
                "SwitchDiscriminantOpening": 0,
                "SwitchDiscriminantClosing": 1,
                "ThrowKeyword": 1,
                "TryKeyword": -1,
                "TryOpeningBrace": 1,
                "TryClosingBrace": 1,
                "UnaryExpressionOperator": 0,
                "VariableName": 1,
                "WhileStatementConditionalOpening": 0,
                "WhileStatementConditionalClosing": 1,
                "WhileStatementOpeningBrace": 1,
                "WhileStatementClosingBrace": 1
            }
        }
    }
}

When I try to format the simplest file I get an exception:

(function() {
  'use strict';

}());

Error:

Error (1):/Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:174
      throw new TypeError('Arguments to path.join must be strings');
            ^
TypeError: Arguments to path.join must be strings
    at /Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:174:13
    at Array.filter (native)
    at filter (/Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:261:30)
    at Object.exports.join (/Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:172:28)
    at getGlobalConfig (/Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:2593:19)
    at Object.getRc [as rc] (/Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:2535:39)
    at /Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:22199:42
    at Object.<anonymous> (/Users/bolanosc/Library/Application Support/Sublime Text 3/Packages/EsFormatter/lib/esformatter.js:22225:3)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
piuccio commented 9 years ago

There seems to be something wrong with module user-home when used inside browserify.

The offending code is

var userHome = require('user-home');
function getGlobalConfig() {
  var file = path.join(userHome, '.esformatter');
  return fs.existsSync(file) ? loadAndParseConfig(file) : {};
}
getGlobalConfig();

In the bundled module generated through browserify require('user-home') returns null.

I don't have time to have a look right now, so I've reverted esformatter to 1.7.1 which doesn't use user-home and pushed a new Sublime-EsFormatter version 1.6.4. Maybe @sindresorhus has a clue.

Let me know if it fixes your problem.

sindresorhus commented 9 years ago

There seems to be something wrong with module user-home when used inside browserify.

No, the issue is in the above code. There's no home folder when browserified, so user-home returns null as noted in its documentation.

That should be handled:

var userHome = require('user-home');
function getGlobalConfig() {
  if (!userHome) {
    return {};
  }

  var file = path.join(userHome, '.esformatter');
  return fs.existsSync(file) ? loadAndParseConfig(file) : {};
}
getGlobalConfig();
piuccio commented 9 years ago

thanks for the comment.

That code is in esformatter

Maybe a better place to discuss this is millermedeiros/esformatter#362