81
rangeEnd = documentText.length;
82
}
84
>
85
>
let lineBreak = false;
86
>
let indentLevel = 0;
87
>
let indentValue: string;
88
>
if (options.insertSpaces) {
89
indentValue = repeat(' ', options.tabSize || 4);
91
indentValue = '\t';
92
}
94
>
const scanner = createScanner(formatText, false);
95
>
let hasError = false;
96
>
97
>
function newLineAndIndent(): string {
98
return eol + repeat(indentValue, initialIndentLevel + indentLevel);
99
}
101
>
let token = scanner.scan();
102
>
lineBreak = false;
103
>
while (token === SyntaxKind.Trivia || token === SyntaxKind.LineBreakTrivia) {
104
lineBreak = lineBreak || (token === SyntaxKind.LineBreakTrivia);
105
token = scanner.scan();
106
}
107
>
hasError = token === SyntaxKind.Unknown || scanner.getTokenError() !== ScanError.None;
jsonFormatter.ts
108
>
return token;
109
>
}
110
>
const editOperations: Edit[] = [];
111
>
function addEdit(text: string, startOffset: number, endOffset: number) {
112
>
if (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {
113
editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });
114
}
116
>
117
>
let firstToken = scanNext();
118
>
119
>
if (firstToken !== SyntaxKind.EOF) {
120
>
const firstTokenStart = scanner.getTokenOffset() + formatTextStart;
121
>
const initialIndent = repeat(indentValue, initialIndentLevel);
122
>
addEdit(initialIndent, formatTextStart, firstTokenStart);
123
>
}
124
>
125
>
while (firstToken !== SyntaxKind.EOF) {
126
>
let firstTokenEnd = scanner.getTokenOffset() + scanner.getTokenLength() + formatTextStart;
127
>
let secondToken = scanNext();
128
>
129
>
let replaceContent = '';
130
>
while (!lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
131
// comments on the same line: keep them on the same line, but ignore them otherwise
132
const commentTokenStart = scanner.getTokenOffset() + formatTextStart;