Skip to content

Commit ace3261

Browse files
harpocratesJason3S
andauthored
fix: TextDocument.lineAt properties (#565)
Co-authored-by: Jason Dent <Jason3S@users.noreply.github.com>
1 parent ac36aee commit ace3261

File tree

2 files changed

+29
-2
lines changed

2 files changed

+29
-2
lines changed

src/vscode/TextDocument.test.ts

+22
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,28 @@ describe('Validate TextDocument', () => {
7171
MockTextDocument.setContents(doc, content());
7272
expect(() => doc.save()).toThrow('Method not implemented.');
7373
});
74+
75+
test('lineAt', async () => {
76+
const doc = createDoc();
77+
78+
const line1 = doc.lineAt(1)
79+
expect(line1.lineNumber).toEqual(1)
80+
expect(line1.text).toEqual('Line 1')
81+
expect(line1.firstNonWhitespaceCharacterIndex).toEqual(0)
82+
expect(line1.isEmptyOrWhitespace).toEqual(false)
83+
84+
const line3 = doc.lineAt(3)
85+
expect(line3.lineNumber).toEqual(3)
86+
expect(line3.text).toEqual('')
87+
expect(line3.firstNonWhitespaceCharacterIndex).toEqual(0)
88+
expect(line3.isEmptyOrWhitespace).toEqual(true)
89+
90+
const line4 = doc.lineAt(4)
91+
expect(line4.lineNumber).toEqual(4)
92+
expect(line4.text).toEqual(' Line 4')
93+
expect(line4.firstNonWhitespaceCharacterIndex).toEqual(2)
94+
expect(line4.isEmptyOrWhitespace).toEqual(false)
95+
});
7496
});
7597

7698
function r(lineA: number, rowA: number, lineB: number, rowB: number): vscode.Range {

src/vscode/TextDocument.ts

+7-2
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,18 @@ export class MockTextDocument implements vscode.TextDocument {
4646
const lineNumber = typeof line === 'number' ? line : line.line;
4747
const fullLineText = this._lines[lineNumber];
4848
const text = fullLineText.replace(/\r?\n/, '');
49+
/**
50+
* See: https://github.com/microsoft/vscode/blob/56222f3441914d033791e7e7a09b99423864751b/src/vs/workbench/api/common/extHostDocumentData.ts#L284-L291
51+
*/
52+
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
53+
const firstNonWhitespaceCharacterIndex = /^(\s*)/.exec(text)![1].length
4954
return {
5055
lineNumber,
5156
text,
5257
range: new mocked.Range(lineNumber, 0, lineNumber, text.length),
53-
firstNonWhitespaceCharacterIndex: 0,
58+
firstNonWhitespaceCharacterIndex,
5459
rangeIncludingLineBreak: new mocked.Range(lineNumber, 0, lineNumber, fullLineText.length),
55-
isEmptyOrWhitespace: !!text.replace(/\s+/, ''),
60+
isEmptyOrWhitespace: firstNonWhitespaceCharacterIndex === text.length,
5661
};
5762
}
5863

0 commit comments

Comments
 (0)