Skip to content

Commit 7995f91

Browse files
committed
apply suggested changes
1 parent 8ed21a8 commit 7995f91

File tree

3 files changed

+91
-91
lines changed

3 files changed

+91
-91
lines changed

src/services/formatting/formatting.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ namespace ts.formatting {
3434
* the first token in line so it should be indented
3535
*/
3636
interface DynamicIndentation {
37-
getIndentationForToken(tokenLine: number, tokenKind: SyntaxKind, container: Node, suppressDelta?: boolean): number;
37+
getIndentationForToken(tokenLine: number, tokenKind: SyntaxKind, container: Node, suppressDelta: boolean): number;
3838
getIndentationForComment(owningToken: SyntaxKind, tokenIndentation: number, container: Node): number;
3939
/**
4040
* Indentation for open and close tokens of the node if it is block or another node that needs special indentation
@@ -735,7 +735,6 @@ namespace ts.formatting {
735735

736736
let listDynamicIndentation = parentDynamicIndentation;
737737
let startLine = parentStartLine;
738-
let indentationOnListStartToken = parentDynamicIndentation.getIndentation();
739738

740739
if (listStartToken !== SyntaxKind.Unknown) {
741740
// introduce a new indentation scope for lists (including list start and end tokens)
@@ -751,6 +750,7 @@ namespace ts.formatting {
751750

752751
consumeTokenAndAdvanceScanner(tokenInfo, parent, parentDynamicIndentation, parent);
753752

753+
let indentationOnListStartToken: number;
754754
if (indentationOnLastIndentedLine !== Constants.Unknown) {
755755
// scanner just processed list start token so consider last indentation as list indentation
756756
// function foo(): { // last indentation was 0, list item will be indented based on this value
@@ -835,7 +835,7 @@ namespace ts.formatting {
835835

836836
if (indentToken) {
837837
const tokenIndentation = (isTokenInRange && !rangeContainsError(currentTokenInfo.token)) ?
838-
dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container, isListEndToken) :
838+
dynamicIndentation.getIndentationForToken(tokenStart.line, currentTokenInfo.token.kind, container, !!isListEndToken) :
839839
Constants.Unknown;
840840

841841
let indentNextTokenOrTrivia = true;

src/services/formatting/smartIndenter.ts

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ namespace ts.formatting {
6666
}
6767
}
6868

69-
const containerList = getListByPosition(position, precedingToken.parent);
69+
const containerList = getListByPosition(position, precedingToken.parent, sourceFile);
7070
// use list position if the preceding token is before any list items
7171
if (containerList && !rangeContainsRange(containerList, precedingToken)) {
7272
return getActualIndentationForListStartLine(containerList, sourceFile, options) + options.indentSize!; // TODO: GH#18217
@@ -322,15 +322,15 @@ namespace ts.formatting {
322322
return false;
323323
}
324324

325-
function getListIfVisualStartEndIsInListRange(list: NodeArray<Node> | undefined, start: number, end: number, node: Node) {
325+
function getListIfVisualStartEndIsInListRange(list: NodeArray<Node> | undefined, start: number, end: number, node: Node, sourceFile: SourceFile) {
326326
return list && rangeContainsVisualStartEnd(list) ? list : undefined;
327327

328328
// Assumes a list is wrapped by list tokens
329329
function rangeContainsVisualStartEnd(textRange: TextRange): boolean {
330330
const children = node.getChildren();
331331
for (let i = 1; i < children.length - 1; i++) {
332332
if (children[i].pos === textRange.pos && children[i].end === textRange.end) {
333-
return rangeContainsStartEnd({ pos: children[i - 1].end, end: children[i + 1].end - children[i + 1].getWidth() }, start, end);
333+
return rangeContainsStartEnd({ pos: children[i - 1].end, end: children[i + 1].getStart(sourceFile) }, start, end);
334334
}
335335
}
336336
return rangeContainsStartEnd(textRange, start, end);
@@ -343,28 +343,28 @@ namespace ts.formatting {
343343

344344
export function getContainingList(node: Node, sourceFile: SourceFile): NodeArray<Node> | undefined {
345345
if (node.parent) {
346-
return getListByRange(node.getStart(sourceFile), node.getEnd(), node.parent);
346+
return getListByRange(node.getStart(sourceFile), node.getEnd(), node.parent, sourceFile);
347347
}
348348
return undefined;
349349
}
350350

351-
function getListByPosition(pos: number, node: Node): NodeArray<Node> | undefined {
351+
function getListByPosition(pos: number, node: Node, sourceFile: SourceFile): NodeArray<Node> | undefined {
352352
if (!node) {
353353
return;
354354
}
355-
return getListByRange(pos, pos, node);
355+
return getListByRange(pos, pos, node, sourceFile);
356356
}
357357

358-
function getListByRange(start: number, end: number, node: Node): NodeArray<Node> | undefined {
358+
function getListByRange(start: number, end: number, node: Node, sourceFile: SourceFile): NodeArray<Node> | undefined {
359359
switch (node.kind) {
360360
case SyntaxKind.TypeReference:
361-
return getListIfVisualStartEndIsInListRange((<TypeReferenceNode>node).typeArguments, start, end, node);
361+
return getListIfVisualStartEndIsInListRange((<TypeReferenceNode>node).typeArguments, start, end, node, sourceFile);
362362
case SyntaxKind.ObjectLiteralExpression:
363-
return getListIfVisualStartEndIsInListRange((<ObjectLiteralExpression>node).properties, start, end, node);
363+
return getListIfVisualStartEndIsInListRange((<ObjectLiteralExpression>node).properties, start, end, node, sourceFile);
364364
case SyntaxKind.ArrayLiteralExpression:
365-
return getListIfVisualStartEndIsInListRange((<ArrayLiteralExpression>node).elements, start, end, node);
365+
return getListIfVisualStartEndIsInListRange((<ArrayLiteralExpression>node).elements, start, end, node, sourceFile);
366366
case SyntaxKind.TypeLiteral:
367-
return getListIfVisualStartEndIsInListRange((<TypeLiteralNode>node).members, start, end, node);
367+
return getListIfVisualStartEndIsInListRange((<TypeLiteralNode>node).members, start, end, node, sourceFile);
368368
case SyntaxKind.FunctionDeclaration:
369369
case SyntaxKind.FunctionExpression:
370370
case SyntaxKind.ArrowFunction:
@@ -374,30 +374,30 @@ namespace ts.formatting {
374374
case SyntaxKind.Constructor:
375375
case SyntaxKind.ConstructorType:
376376
case SyntaxKind.ConstructSignature: {
377-
return getListIfVisualStartEndIsInListRange((<SignatureDeclaration>node).typeParameters, start, end, node) ||
378-
getListIfVisualStartEndIsInListRange((<SignatureDeclaration>node).parameters, start, end, node);
377+
return getListIfVisualStartEndIsInListRange((<SignatureDeclaration>node).typeParameters, start, end, node, sourceFile) ||
378+
getListIfVisualStartEndIsInListRange((<SignatureDeclaration>node).parameters, start, end, node, sourceFile);
379379
}
380380
case SyntaxKind.ClassDeclaration:
381381
case SyntaxKind.ClassExpression:
382382
case SyntaxKind.InterfaceDeclaration:
383383
case SyntaxKind.TypeAliasDeclaration:
384384
case SyntaxKind.JSDocTemplateTag: {
385385
const { typeParameters } = <ClassDeclaration | ClassExpression | InterfaceDeclaration | TypeAliasDeclaration | JSDocTemplateTag>node;
386-
return getListIfStartEndIsInListRange(typeParameters, start, end);
386+
return getListIfVisualStartEndIsInListRange(typeParameters, start, end, node, sourceFile);
387387
}
388388
case SyntaxKind.NewExpression:
389389
case SyntaxKind.CallExpression: {
390-
return getListIfVisualStartEndIsInListRange((<CallExpression>node).typeArguments, start, end, node) ||
391-
getListIfVisualStartEndIsInListRange((<CallExpression>node).arguments, start, end, node);
390+
return getListIfVisualStartEndIsInListRange((<CallExpression>node).typeArguments, start, end, node, sourceFile) ||
391+
getListIfVisualStartEndIsInListRange((<CallExpression>node).arguments, start, end, node, sourceFile);
392392
}
393393
case SyntaxKind.VariableDeclarationList:
394394
return getListIfStartEndIsInListRange((<VariableDeclarationList>node).declarations, start, end);
395395
case SyntaxKind.NamedImports:
396396
case SyntaxKind.NamedExports:
397-
return getListIfVisualStartEndIsInListRange((<NamedImportsOrExports>node).elements, start, end, node);
397+
return getListIfVisualStartEndIsInListRange((<NamedImportsOrExports>node).elements, start, end, node, sourceFile);
398398
case SyntaxKind.ObjectBindingPattern:
399399
case SyntaxKind.ArrayBindingPattern:
400-
return getListIfVisualStartEndIsInListRange((<ObjectBindingPattern | ArrayBindingPattern>node).elements, start, end, node);
400+
return getListIfVisualStartEndIsInListRange((<ObjectBindingPattern | ArrayBindingPattern>node).elements, start, end, node, sourceFile);
401401
}
402402
}
403403

tests/cases/fourslash/formattingOnChainedCallbacks.ts

Lines changed: 70 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,26 @@
1-
/// <reference path='fourslash.ts' />
2-
3-
////Promise
4-
//// .resolve()
5-
//// .then(() => {/*1*/""/*2*/
6-
////}).then(() => {/*3*//*4*/
7-
////})/*semi1*//*semi2*/
8-
9-
////function foo() {
10-
//// return Promise.resolve()
11-
//// .then(function () {
12-
//// ""/*a*/
13-
//// })/*b*/
14-
////}
15-
16-
////Promise
17-
//// .then(
18-
//// /*n1*/
19-
//// )
20-
//// /*n2*/
21-
//// .then();
22-
23-
// @Filename: listSmart.ts
1+
/// <reference path='fourslash.ts' />
2+
3+
////Promise
4+
//// .resolve()
5+
//// .then(() => {/*1*/""/*2*/
6+
////}).then(() => {/*3*//*4*/
7+
////})/*semi1*//*semi2*/
8+
9+
////function foo() {
10+
//// return Promise.resolve()
11+
//// .then(function () {
12+
//// ""/*a*/
13+
//// })/*b*/
14+
////}
15+
16+
////Promise
17+
//// .then(
18+
//// /*n1*/
19+
//// )
20+
//// /*n2*/
21+
//// .then();
22+
23+
// @Filename: listSmart.ts
2424
////Promise
2525
//// .resolve().then(
2626
//// /*listSmart1*/
@@ -31,19 +31,19 @@
3131
//// /*listSmart3*/
3232
//// ]
3333
//// /*listSmart4*/
34-
//// );
35-
36-
// @Filename: listZeroIndent.ts
34+
//// );
35+
36+
// @Filename: listZeroIndent.ts
3737
////Promise.resolve([
3838
////]).then(
3939
//// /*listZeroIndent1*/
4040
//// [
4141
//// /*listZeroIndent2*/
4242
//// 3
4343
//// ]
44-
//// );
45-
46-
// @Filename: listTypeParameter1.ts
44+
//// );
45+
46+
// @Filename: listTypeParameter1.ts
4747
////foo.then
4848
//// <
4949
//// /*listTypeParameter1*/
@@ -54,49 +54,49 @@
5454
//// },
5555
//// function (): void {
5656
//// }
57-
//// );
58-
59-
// @Filename: listComment.ts
57+
//// );
58+
59+
// @Filename: listComment.ts
6060
////Promise
6161
//// .then(
6262
//// // euphonium
6363
//// "k"
6464
//// // oboe
65-
//// );
66-
67-
68-
goTo.marker('1');
69-
edit.insertLine('');
70-
goTo.marker('2');
71-
verify.currentLineContentIs(' ""');
72-
edit.insertLine('');
73-
verify.indentationIs(8);
74-
goTo.marker('4');
75-
edit.insertLine('');
76-
goTo.marker('3');
77-
verify.currentLineContentIs(' }).then(() => {');
78-
79-
goTo.marker("semi1");
80-
edit.insert(';');
81-
verify.currentLineContentIs(' });');
82-
goTo.marker("semi2");
83-
edit.insert(';');
84-
verify.currentLineContentIs(' });;');
85-
86-
goTo.marker('a');
87-
edit.insert(';');
88-
verify.currentLineContentIs(' "";');
89-
goTo.marker('b');
90-
edit.insert(';');
91-
verify.currentLineContentIs(' });');
92-
93-
goTo.marker('n1');
94-
verify.indentationIs(8);
95-
goTo.marker('n2');
96-
verify.indentationIs(4);
97-
98-
goTo.file(1);
99-
format.document();
65+
//// );
66+
67+
68+
goTo.marker('1');
69+
edit.insertLine('');
70+
goTo.marker('2');
71+
verify.currentLineContentIs(' ""');
72+
edit.insertLine('');
73+
verify.indentationIs(8);
74+
goTo.marker('4');
75+
edit.insertLine('');
76+
goTo.marker('3');
77+
verify.currentLineContentIs(' }).then(() => {');
78+
79+
goTo.marker("semi1");
80+
edit.insert(';');
81+
verify.currentLineContentIs(' });');
82+
goTo.marker("semi2");
83+
edit.insert(';');
84+
verify.currentLineContentIs(' });;');
85+
86+
goTo.marker('a');
87+
edit.insert(';');
88+
verify.currentLineContentIs(' "";');
89+
goTo.marker('b');
90+
edit.insert(';');
91+
verify.currentLineContentIs(' });');
92+
93+
goTo.marker('n1');
94+
verify.indentationIs(8);
95+
goTo.marker('n2');
96+
verify.indentationIs(4);
97+
98+
goTo.file("listSmart.ts");
99+
format.document();
100100
verify.currentFileContentIs(`Promise
101101
.resolve().then(
102102
@@ -117,7 +117,7 @@ verify.indentationIs(12);
117117
goTo.marker("listSmart4");
118118
verify.indentationIs(8);
119119

120-
goTo.file(2);
120+
goTo.file("listZeroIndent.ts");
121121
format.document();
122122
verify.currentFileContentIs(`Promise.resolve([
123123
]).then(
@@ -132,7 +132,7 @@ verify.indentationIs(4);
132132
goTo.marker("listZeroIndent2");
133133
verify.indentationIs(8);
134134

135-
goTo.file(3);
135+
goTo.file("listTypeParameter1.ts");
136136
format.document();
137137
verify.currentFileContentIs(`foo.then
138138
<
@@ -150,7 +150,7 @@ verify.indentationIs(8);
150150
goTo.marker("listTypeParameter2");
151151
verify.indentationIs(8);
152152

153-
goTo.file(4);
153+
goTo.file("listComment.ts");
154154
format.document();
155155
verify.currentFileContentIs(`Promise
156156
.then(

0 commit comments

Comments
 (0)