Skip to content

Commit f8bd282

Browse files
committed
Can we have a "insertFinalNewline" option in "FormattingOptions"? Fixes #11
1 parent fd5fe07 commit f8bd282

File tree

4 files changed

+31
-5
lines changed

4 files changed

+31
-5
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
3.0.0 2020-11-13
2+
==================
3+
* fixed API spec for `parseTree`. Can return `undefine` for empty input.
4+
* added new API `FormattingOptions.insertFinalNewline`.
5+
6+
17
2.3.0 2020-07-03
28
==================
39
* new API `ModificationOptions.isArrayInsertion`: If `JSONPath` refers to an index of an array and `isArrayInsertion` is `true`, then `modify` will insert a new item at that location instead of overwriting its contents.

src/impl/format.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ export function format(documentText: string, range: Range | undefined, options:
6363
}
6464
let editOperations: Edit[] = [];
6565
function addEdit(text: string, startOffset: number, endOffset: number) {
66-
if (!hasError && startOffset < rangeEnd && endOffset > rangeStart && documentText.substring(startOffset, endOffset) !== text) {
66+
if (!hasError && (!range || (startOffset < rangeEnd && endOffset > rangeStart)) && documentText.substring(startOffset, endOffset) !== text) {
6767
editOperations.push({ offset: startOffset, length: endOffset - startOffset, content: text });
6868
}
6969
}
@@ -155,7 +155,9 @@ export function format(documentText: string, range: Range | undefined, options:
155155
if (lineBreak && (secondToken === SyntaxKind.LineCommentTrivia || secondToken === SyntaxKind.BlockCommentTrivia)) {
156156
replaceContent = newLineAndIndent();
157157
}
158-
158+
}
159+
if (secondToken === SyntaxKind.EOF) {
160+
replaceContent = options.insertFinalNewline ? eol : '';
159161
}
160162
let secondTokenStart = scanner.getTokenOffset() + formatTextStart;
161163
addEdit(replaceContent, firstTokenEnd, secondTokenStart);

src/main.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,6 +321,10 @@ export interface FormattingOptions {
321321
* The default 'end of line' character. If not set, '\n' is used as default.
322322
*/
323323
eol?: string;
324+
/**
325+
* If set, will add a new line at the end of the document.
326+
*/
327+
insertFinalNewline?: boolean;
324328
}
325329

326330
/**

src/test/format.test.ts

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Range } from '../main';
1010

1111
suite('JSON - formatter', () => {
1212

13-
function format(content: string, expected: string, insertSpaces = true) {
13+
function format(content: string, expected: string, insertSpaces = true, insertFinalNewline = false) {
1414
let range: Range | undefined = void 0;
1515
var rangeStart = content.indexOf('|');
1616
var rangeEnd = content.lastIndexOf('|');
@@ -19,7 +19,7 @@ suite('JSON - formatter', () => {
1919
range = { offset: rangeStart, length: rangeEnd - rangeStart };
2020
}
2121

22-
var edits = Formatter.format(content, range, { tabSize: 2, insertSpaces: insertSpaces, eol: '\n' });
22+
var edits = Formatter.format(content, range, { tabSize: 2, insertSpaces, insertFinalNewline, eol: '\n' });
2323

2424
let lastEditOffset = content.length;
2525
for (let i = edits.length - 1; i >= 0; i--) {
@@ -472,7 +472,7 @@ suite('JSON - formatter', () => {
472472
format(content, expected);
473473
});
474474

475-
test('line comment bug 33 ', () => {
475+
test('line comment, enforce line comment ', () => {
476476
var content = [
477477
'{"settings": // This is some text',
478478
'{',
@@ -504,4 +504,18 @@ suite('JSON - formatter', () => {
504504

505505
format(content, expected);
506506
});
507+
508+
test('insertFinalNewline', () => {
509+
var content = [
510+
'{',
511+
'}'
512+
].join('\n');
513+
514+
var expected = [
515+
'{}',
516+
''
517+
].join('\n');
518+
519+
format(content, expected, undefined, true);
520+
});
507521
});

0 commit comments

Comments
 (0)