Skip to content

Commit fcc9c86

Browse files
committed
allow one-line array/object literals in indentation rule
1 parent 5cd203a commit fcc9c86

File tree

5 files changed

+88
-20
lines changed

5 files changed

+88
-20
lines changed

bin/tslint-cli.js

+26-6
Original file line numberDiff line numberDiff line change
@@ -27132,15 +27132,27 @@ var Lint;
2713227132
};
2713327133

2713427134
IndentWalker.prototype.visitObjectLiteralExpression = function (node) {
27135-
this.visitToken(node.openBraceToken);
27136-
this.checkAndVisitSeparatedList(node.propertyAssignments);
27137-
this.visitToken(node.closeBraceToken);
27135+
var startPosition = this.position() + node.leadingTriviaWidth();
27136+
27137+
if (!this.arePositionsOnSameLine(startPosition, startPosition + node.width())) {
27138+
this.visitToken(node.openBraceToken);
27139+
this.checkAndVisitSeparatedList(node.propertyAssignments);
27140+
this.visitToken(node.closeBraceToken);
27141+
} else {
27142+
_super.prototype.visitObjectLiteralExpression.call(this, node);
27143+
}
2713827144
};
2713927145

2714027146
IndentWalker.prototype.visitArrayLiteralExpression = function (node) {
27141-
this.visitToken(node.openBracketToken);
27142-
this.checkAndVisitSeparatedList(node.expressions);
27143-
this.visitToken(node.closeBracketToken);
27147+
var startPosition = this.position() + node.leadingTriviaWidth();
27148+
27149+
if (!this.arePositionsOnSameLine(startPosition, startPosition + node.width())) {
27150+
this.visitToken(node.openBracketToken);
27151+
this.checkAndVisitSeparatedList(node.expressions);
27152+
this.visitToken(node.closeBracketToken);
27153+
} else {
27154+
_super.prototype.visitArrayLiteralExpression.call(this, node);
27155+
}
2714427156
};
2714527157

2714627158
IndentWalker.prototype.visitModuleDeclaration = function (node) {
@@ -27183,6 +27195,14 @@ var Lint;
2718327195
this.checkAndVisitList(node.statements);
2718427196
};
2718527197

27198+
IndentWalker.prototype.arePositionsOnSameLine = function (pos1, pos2) {
27199+
var lineMap = this.getSyntaxTree().lineMap();
27200+
var line1 = lineMap.getLineAndCharacterFromPosition(pos1).line();
27201+
var line2 = lineMap.getLineAndCharacterFromPosition(pos2).line();
27202+
27203+
return (line1 === line2);
27204+
};
27205+
2718627206
IndentWalker.prototype.checkAndVisitList = function (list) {
2718727207
this.currentLevel += 1;
2718827208
for (var i = 0; i < list.childCount(); i++) {

lib/tslint.js

+26-6
Original file line numberDiff line numberDiff line change
@@ -27132,15 +27132,27 @@ var Lint;
2713227132
};
2713327133

2713427134
IndentWalker.prototype.visitObjectLiteralExpression = function (node) {
27135-
this.visitToken(node.openBraceToken);
27136-
this.checkAndVisitSeparatedList(node.propertyAssignments);
27137-
this.visitToken(node.closeBraceToken);
27135+
var startPosition = this.position() + node.leadingTriviaWidth();
27136+
27137+
if (!this.arePositionsOnSameLine(startPosition, startPosition + node.width())) {
27138+
this.visitToken(node.openBraceToken);
27139+
this.checkAndVisitSeparatedList(node.propertyAssignments);
27140+
this.visitToken(node.closeBraceToken);
27141+
} else {
27142+
_super.prototype.visitObjectLiteralExpression.call(this, node);
27143+
}
2713827144
};
2713927145

2714027146
IndentWalker.prototype.visitArrayLiteralExpression = function (node) {
27141-
this.visitToken(node.openBracketToken);
27142-
this.checkAndVisitSeparatedList(node.expressions);
27143-
this.visitToken(node.closeBracketToken);
27147+
var startPosition = this.position() + node.leadingTriviaWidth();
27148+
27149+
if (!this.arePositionsOnSameLine(startPosition, startPosition + node.width())) {
27150+
this.visitToken(node.openBracketToken);
27151+
this.checkAndVisitSeparatedList(node.expressions);
27152+
this.visitToken(node.closeBracketToken);
27153+
} else {
27154+
_super.prototype.visitArrayLiteralExpression.call(this, node);
27155+
}
2714427156
};
2714527157

2714627158
IndentWalker.prototype.visitModuleDeclaration = function (node) {
@@ -27183,6 +27195,14 @@ var Lint;
2718327195
this.checkAndVisitList(node.statements);
2718427196
};
2718527197

27198+
IndentWalker.prototype.arePositionsOnSameLine = function (pos1, pos2) {
27199+
var lineMap = this.getSyntaxTree().lineMap();
27200+
var line1 = lineMap.getLineAndCharacterFromPosition(pos1).line();
27201+
var line2 = lineMap.getLineAndCharacterFromPosition(pos2).line();
27202+
27203+
return (line1 === line2);
27204+
};
27205+
2718627206
IndentWalker.prototype.checkAndVisitList = function (list) {
2718727207
this.currentLevel += 1;
2718827208
for (var i = 0; i < list.childCount(); i++) {

src/rules/indentRule.ts

+28-8
Original file line numberDiff line numberDiff line change
@@ -86,18 +86,30 @@ module Lint.Rules {
8686
super.visitMemberFunctionDeclaration(node);
8787
}
8888

89-
// object literal indentation
89+
// object literal indentation, ignoring one-line literals
9090
public visitObjectLiteralExpression(node: TypeScript.ObjectLiteralExpressionSyntax): void {
91-
this.visitToken(node.openBraceToken);
92-
this.checkAndVisitSeparatedList(node.propertyAssignments);
93-
this.visitToken(node.closeBraceToken);
91+
var startPosition = this.position() + node.leadingTriviaWidth();
92+
93+
if (!this.arePositionsOnSameLine(startPosition, startPosition + node.width())) {
94+
this.visitToken(node.openBraceToken);
95+
this.checkAndVisitSeparatedList(node.propertyAssignments);
96+
this.visitToken(node.closeBraceToken);
97+
} else {
98+
super.visitObjectLiteralExpression(node);
99+
}
94100
}
95101

96-
// array literal indentation
102+
// array literal indentation, ignoring one-line literals
97103
public visitArrayLiteralExpression(node: TypeScript.ArrayLiteralExpressionSyntax): void {
98-
this.visitToken(node.openBracketToken);
99-
this.checkAndVisitSeparatedList(node.expressions);
100-
this.visitToken(node.closeBracketToken);
104+
var startPosition = this.position() + node.leadingTriviaWidth();
105+
106+
if (!this.arePositionsOnSameLine(startPosition, startPosition + node.width())) {
107+
this.visitToken(node.openBracketToken);
108+
this.checkAndVisitSeparatedList(node.expressions);
109+
this.visitToken(node.closeBracketToken);
110+
} else {
111+
super.visitArrayLiteralExpression(node);
112+
}
101113
}
102114

103115
// module indentation
@@ -143,6 +155,14 @@ module Lint.Rules {
143155
this.checkAndVisitList(node.statements);
144156
}
145157

158+
private arePositionsOnSameLine(pos1: number, pos2: number): boolean {
159+
var lineMap = this.getSyntaxTree().lineMap();
160+
var line1 = lineMap.getLineAndCharacterFromPosition(pos1).line();
161+
var line2 = lineMap.getLineAndCharacterFromPosition(pos2).line();
162+
163+
return (line1 === line2);
164+
}
165+
146166
private checkAndVisitList(list: TypeScript.ISyntaxList): void {
147167
this.currentLevel += 1;
148168
for (var i = 0 ; i < list.childCount(); i++) {

test/files/rules/indent_spaces.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,7 @@ var arr = [
124124
b: 4
125125
}
126126
];
127+
128+
var arr2 = [1, 2, 3];
129+
var obj = {a: 1, b: 2, c: 3};
130+
var both = {a: [1, 2, 3], b: [4, 5, 6]};

test/files/rules/indent_tabs.test.ts

+4
Original file line numberDiff line numberDiff line change
@@ -124,3 +124,7 @@ var arr = [
124124
b: 4
125125
}
126126
];
127+
128+
var arr2 = [1, 2, 3];
129+
var obj = {a: 1, b: 2, c: 3};
130+
var both = {a: [1, 2, 3], b: [4, 5, 6]};

0 commit comments

Comments
 (0)