Skip to content

Commit

Permalink
add support for ClassExpression. fixes #359
Browse files Browse the repository at this point in the history
  • Loading branch information
millermedeiros committed Jan 28, 2016
1 parent f103c24 commit 857d72e
Show file tree
Hide file tree
Showing 5 changed files with 112 additions and 12 deletions.
2 changes: 1 addition & 1 deletion lib/hooks.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ exports.AssignmentExpression = require('./hooks/AssignmentExpression');
exports.BinaryExpression = require('./hooks/BinaryExpression');
exports.CallExpression = exports.NewExpression = require('./hooks/CallExpression');
exports.CatchClause = require('./hooks/CatchClause');
exports.ClassDeclaration = require('./hooks/ClassDeclaration');
exports.ClassDeclaration = exports.ClassExpression = require('./hooks/ClassDeclarationAndExpression');
exports.ConditionalExpression = require('./hooks/ConditionalExpression');
exports.DoWhileStatement = require('./hooks/DoWhileStatement');
exports.ExportAllDeclaration = require('./hooks/ExportAllDeclaration');
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
'use strict';

// this file handles both ClassDeclaration and ClassExpression

var tk = require('rocambole-token');
var ws = require('rocambole-whitespace');
var limit = require('../limit');

exports.format = function ClassDeclaration(node) {
exports.format = function ClassDeclarationAndExpression(node) {
var classKeyword = node.startToken;
var opening = tk.findNext(node.startToken, '{');
var closing = node.endToken;
Expand All @@ -17,8 +19,8 @@ exports.format = function ClassDeclaration(node) {
ws.limit(extendsKeyword, 1);
}

limit.around(opening, 'ClassDeclarationOpeningBrace');
limit.around(closing, 'ClassDeclarationClosingBrace');
limit.around(opening, 'ClassOpeningBrace');
limit.around(closing, 'ClassClosingBrace');
};

exports.getIndentEdges = function(node) {
Expand Down
19 changes: 11 additions & 8 deletions lib/preset/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
"ConditionalExpression": 1,
"CommentInsideEmptyBlock": 1,
"ClassDeclaration": 1,
"ClassExpression": 1,
"DoWhileStatement": 1,
"ForInStatement": 1,
"ForOfStatement": 1,
Expand Down Expand Up @@ -70,8 +71,9 @@
"CallExpressionOpeningParentheses" : 0,
"CallExpressionClosingParentheses" : -1,
"ClassDeclaration" : ">=1",
"ClassDeclarationOpeningBrace" : 0,
"ClassDeclarationClosingBrace" : ">=1",
"ClassExpression" : ">=1",
"ClassOpeningBrace" : 0,
"ClassClosingBrace" : ">=1",
"ConditionalExpression" : ">=1",
"CatchOpeningBrace" : 0,
"CatchClosingBrace" : ">=1",
Expand Down Expand Up @@ -162,8 +164,9 @@
"CallExpressionOpeningParentheses" : -1,
"CallExpressionClosingParentheses" : -1,
"ClassDeclaration" : ">=1",
"ClassDeclarationOpeningBrace" : ">=1",
"ClassDeclarationClosingBrace" : ">=1",
"ClassExpression" : ">=1",
"ClassOpeningBrace" : ">=1",
"ClassClosingBrace" : ">=1",
"CatchOpeningBrace" : ">=1",
"CatchClosingBrace" : ">=0",
"CatchKeyword": 0,
Expand Down Expand Up @@ -266,8 +269,8 @@
"CatchClosingBrace" : 1,
"CatchKeyword" : 1,
"CommaOperator" : 0,
"ClassDeclarationOpeningBrace" : 1,
"ClassDeclarationClosingBrace" : 1,
"ClassOpeningBrace" : 1,
"ClassClosingBrace" : 1,
"ConditionalExpressionConsequent" : 1,
"ConditionalExpressionAlternate" : 1,
"DoWhileStatementOpeningBrace" : 1,
Expand Down Expand Up @@ -365,8 +368,8 @@
"CatchOpeningBrace" : 1,
"CatchClosingBrace" : 1,
"CatchKeyword" : 1,
"ClassDeclarationOpeningBrace" : 1,
"ClassDeclarationClosingBrace" : 1,
"ClasOpeningBrace" : 1,
"ClassClosingBrace" : 1,
"CommaOperator" : 1,
"ConditionalExpressionConsequent" : 1,
"ConditionalExpressionTest" : 1,
Expand Down
47 changes: 47 additions & 0 deletions test/compare/default/class_expression-in.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
var foo = class Foo extends Bar {
constructor (properties, name = 'lorem', ...extra)
{
this.properties = properties;
this.name = name;
this.extra = extra;
}
static
log ( msg , level = 'log' ) {
console[level](msg);
} toObject () { return this.properties; } }
let bar = class Foo extends Bar {
// empty lines in between the MethodDefinition are valid/kept

constructor(properties) {
this.properties = properties;
}

get prop() {
return 'getter';
}

set prop(val) {
Foo.log('setting: ', val)
}

static log(msg, level = 'log') {
console[level]('[Foo]', msg);
}

toObject() {
return this.properties;
}

}

// Multi line declaration
let dolor = class
Foo
extends
Bar
{
}
// The value to be extended can be produced by an arbitrary expression.
var amet = class Foo extends BarNamespace.Bar{}
let ipsum = class Foo extends BarNamespace['Bar'].Bar["Bar"]('bar').Bar("bar", "bar"){}
const ullamcor = class Foo extends(BarNamespace.bar)(){}
48 changes: 48 additions & 0 deletions test/compare/default/class_expression-out.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
var foo = class Foo extends Bar {
constructor(properties, name = 'lorem', ...extra) {
this.properties = properties;
this.name = name;
this.extra = extra;
}
static log(msg, level = 'log') {
console[level](msg);
}
toObject() {
return this.properties;
}
}
let bar = class Foo extends Bar {
// empty lines in between the MethodDefinition are valid/kept

constructor(properties) {
this.properties = properties;
}

get prop() {
return 'getter';
}

set prop(val) {
Foo.log('setting: ', val)
}

static log(msg, level = 'log') {
console[level]('[Foo]', msg);
}

toObject() {
return this.properties;
}

}

// Multi line declaration
let dolor = class Foo extends Bar {
}
// The value to be extended can be produced by an arbitrary expression.
var amet = class Foo extends BarNamespace.Bar {
}
let ipsum = class Foo extends BarNamespace['Bar'].Bar["Bar"]('bar').Bar("bar", "bar") {
}
const ullamcor = class Foo extends (BarNamespace.bar)() {
}

0 comments on commit 857d72e

Please sign in to comment.