indentation : function() { return indentation },
current_width : function() { return current_col - indentation },
should_break : function() { return options.width && this.current_width() >= options.width },
+ has_parens : function() { return OUTPUT.slice(-1) == "(" },
newline : newline,
print : print,
space : space,
// a function expression needs parens around it when it's provably
// the first token to appear in a statement.
PARENS(AST_Function, function(output){
- if (first_in_statement(output)) {
+ if (!output.has_parens() && first_in_statement(output)) {
return true;
}
// same goes for an object literal, because otherwise it would be
// interpreted as a block of code.
- PARENS(AST_Object, first_in_statement);
+ PARENS(AST_Object, function(output){
+ return !output.has_parens() && first_in_statement(output);
+ });
PARENS(AST_Unary, function(output){
var p = output.parent();
}
expect_stdout: "2"
}
+
+deduplicate_parenthesis: {
+ input: {
+ ({}).a = b;
+ (({}).a = b)();
+ (function() {}).a = b;
+ ((function() {}).a = b)();
+ }
+ expect_exact: "({}).a=b;({}.a=b)();(function(){}).a=b;(function(){}.a=b)();"
+}