Skip to content

Commit 76f1311

Browse files
author
aiday-mar
committed
Resolving the reviews and simplifying the code with the function multipleLineBreaks
1 parent 26a70df commit 76f1311

File tree

3 files changed

+43
-64
lines changed

3 files changed

+43
-64
lines changed

.vscode/extensions.json

-13
This file was deleted.

CHANGELOG.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
3.1.0 2022-07-07
22
==================
3-
* Added the possibility to have multi-line formatting
3+
* Added the variable `keepLines` in the FormattingOptions which keeps the empty break lines/new lines in the formatting.
44

55
3.0.0 2020-11-13
66
==================

src/impl/format.ts

+42-50
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
*--------------------------------------------------------------------------------------------*/
55
'use strict';
66

7+
import { mainModule } from 'process';
78
import { Range, FormattingOptions, Edit, SyntaxKind, ScanError } from '../main';
89
import { createScanner } from './scanner';
910

@@ -37,7 +38,7 @@ export function format(documentText: string, range: Range | undefined, options:
3738
let eol = getEOL(options, documentText);
3839

3940
let numberLineBreaks = 0;
40-
let lineBreak = false;
41+
let needsLineBreak = false;
4142
let indentLevel = 0;
4243
let indentValue: string;
4344
if (options.insertSpaces) {
@@ -50,21 +51,38 @@ export function format(documentText: string, range: Range | undefined, options:
5051
let hasError = false;
5152

5253
function newLinesAndIndent(): string {
53-
if (numberLineBreaks > 0) {
54+
if (numberLineBreaks > 1) {
5455
return repeat(eol, numberLineBreaks) + repeat(indentValue, initialIndentLevel + indentLevel);
5556
} else {
5657
return eol + repeat(indentValue, initialIndentLevel + indentLevel);
5758
}
5859
}
5960

61+
function multipleLineBreaks(useVariableNeedsLineBreak = false) {
62+
63+
if (numberLineBreaks > 0) {
64+
return newLinesAndIndent();
65+
} else {
66+
if (!useVariableNeedsLineBreak) {
67+
return ' ';
68+
} else if (useVariableNeedsLineBreak && !needsLineBreak) {
69+
return ' ';
70+
} else {
71+
return '';
72+
}
73+
}
74+
}
75+
6076
function scanNext(): SyntaxKind {
6177
let token = scanner.scan();
6278
numberLineBreaks = 0;
63-
lineBreak = false;
6479
while (token === SyntaxKind.Trivia || token === SyntaxKind.LineBreakTrivia) {
65-
lineBreak = lineBreak || (token === SyntaxKind.LineBreakTrivia);
66-
if (token === SyntaxKind.LineBreakTrivia && options.keepLines) {
67-
numberLineBreaks += 1;
80+
if (token === SyntaxKind.LineBreakTrivia) {
81+
if (options.keepLines) {
82+
numberLineBreaks += 1;
83+
} else {
84+
numberLineBreaks = 1;
85+
}
6886
}
6987
token = scanner.scan();
7088
}
@@ -91,8 +109,9 @@ export function format(documentText: string, range: Range | undefined, options:
91109
let secondToken = scanNext();
92110

93111
let replaceContent = '';
94-
let needsLineBreak = false;
95-
while (!lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
112+
needsLineBreak = false;
113+
114+
while (numberLineBreaks === 0 && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
96115
// comments on the same line: keep them on the same line, but ignore them otherwise
97116
let commentTokenStart = scanner.getTokenOffset() + formatTextStart;
98117
addEdit(' ', firstTokenEnd, commentTokenStart);
@@ -103,53 +122,34 @@ export function format(documentText: string, range: Range | undefined, options:
103122
}
104123

105124
if (secondToken === SyntaxKind.CloseBraceToken) {
125+
if (firstToken !== SyntaxKind.OpenBraceToken) { indentLevel--; };
106126
if (options.keepLines) {
107-
if (firstToken !== SyntaxKind.OpenBraceToken) { indentLevel--; };
108-
if (lineBreak) {
109-
replaceContent = newLinesAndIndent();
110-
} else {
111-
replaceContent = ' ';
112-
}
113-
} else if (!options.keepLines && firstToken !== SyntaxKind.OpenBraceToken){
114-
indentLevel--;
127+
replaceContent = multipleLineBreaks();
128+
} else if (firstToken !== SyntaxKind.OpenBraceToken) {
115129
replaceContent = newLinesAndIndent();
116130
}
117131
} else if (secondToken === SyntaxKind.CloseBracketToken) {
132+
if (firstToken !== SyntaxKind.OpenBracketToken) { indentLevel--; };
118133
if (options.keepLines) {
119-
if(firstToken !== SyntaxKind.OpenBracketToken) {indentLevel--;};
120-
if (lineBreak) {
121-
replaceContent = newLinesAndIndent();
122-
} else {
123-
replaceContent = ' ';
124-
}
134+
replaceContent = multipleLineBreaks();
125135
}
126136
else if (firstToken !== SyntaxKind.OpenBracketToken) {
127-
indentLevel--;
128137
replaceContent = newLinesAndIndent();
129138
}
130139
} else {
131-
132140
switch (firstToken) {
133141
case SyntaxKind.OpenBracketToken:
134142
case SyntaxKind.OpenBraceToken:
135143
indentLevel++;
136144
if (options.keepLines) {
137-
if (lineBreak) {
138-
replaceContent = newLinesAndIndent();
139-
} else {
140-
replaceContent = " ";
141-
}
145+
replaceContent = multipleLineBreaks();
142146
} else {
143147
replaceContent = newLinesAndIndent();
144148
}
145149
break;
146150
case SyntaxKind.CommaToken:
147-
if(options.keepLines) {
148-
if (lineBreak) {
149-
replaceContent = newLinesAndIndent();
150-
} else {
151-
replaceContent = " ";
152-
}
151+
if (options.keepLines) {
152+
replaceContent = multipleLineBreaks();
153153
} else {
154154
replaceContent = newLinesAndIndent();
155155
}
@@ -158,19 +158,11 @@ export function format(documentText: string, range: Range | undefined, options:
158158
replaceContent = newLinesAndIndent();
159159
break;
160160
case SyntaxKind.BlockCommentTrivia:
161-
if (lineBreak) {
162-
replaceContent = newLinesAndIndent();
163-
} else if (!needsLineBreak) {
164-
replaceContent = ' ';
165-
}
161+
replaceContent = multipleLineBreaks(true);
166162
break;
167163
case SyntaxKind.ColonToken:
168164
if (options.keepLines) {
169-
if (lineBreak) {
170-
replaceContent = newLinesAndIndent();
171-
} else if (!needsLineBreak) {
172-
replaceContent = ' ';
173-
}
165+
replaceContent = multipleLineBreaks(true);
174166
} else {
175167
if (!needsLineBreak) {
176168
replaceContent = ' ';
@@ -179,7 +171,7 @@ export function format(documentText: string, range: Range | undefined, options:
179171
break;
180172
case SyntaxKind.StringLiteral:
181173
if (options.keepLines) {
182-
if (lineBreak) {
174+
if (numberLineBreaks > 0) {
183175
replaceContent = newLinesAndIndent();
184176
} else {
185177
if (secondToken === SyntaxKind.ColonToken) {
@@ -203,7 +195,7 @@ export function format(documentText: string, range: Range | undefined, options:
203195
case SyntaxKind.CloseBraceToken:
204196
case SyntaxKind.CloseBracketToken:
205197
if (options.keepLines) {
206-
if (lineBreak) {
198+
if (numberLineBreaks > 0) {
207199
replaceContent = newLinesAndIndent();
208200
} else {
209201
if (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia) {
@@ -229,13 +221,13 @@ export function format(documentText: string, range: Range | undefined, options:
229221
break;
230222
}
231223

232-
if (lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
224+
if (numberLineBreaks > 0 && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
233225
replaceContent = newLinesAndIndent();
234226
}
235227
}
236228
if (secondToken === SyntaxKind.EOF) {
237229
if (options.keepLines) {
238-
if (lineBreak) {
230+
if (numberLineBreaks > 0) {
239231
replaceContent = newLinesAndIndent();
240232
} else {
241233
replaceContent = options.insertFinalNewline ? eol : '';
@@ -294,4 +286,4 @@ function getEOL(options: FormattingOptions, text: string): string {
294286

295287
export function isEOL(text: string, offset: number) {
296288
return '\r\n'.indexOf(text.charAt(offset)) !== -1;
297-
}
289+
}

0 commit comments

Comments
 (0)