Skip to content

Commit e8961b2

Browse files
Get more TextEditor specs passing
1 parent aa994e7 commit e8961b2

File tree

2 files changed

+34
-13
lines changed

2 files changed

+34
-13
lines changed

spec/text-editor-spec.js

Lines changed: 27 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,16 @@ const os = require('os');
77
const TextEditor = require('../src/text-editor');
88
const TextBuffer = require('text-buffer');
99
const TextMateLanguageMode = require('../src/text-mate-language-mode');
10-
const TreeSitterLanguageMode = require('../src/tree-sitter-language-mode');
10+
const WASMTreeSitterLanguageMode = require('../src/wasm-tree-sitter-language-mode');
1111

12-
describe('TextEditor', () => {
12+
async function languageModeReady (editor) {
13+
let languageMode = editor.getBuffer().getLanguageMode();
14+
if (languageMode.ready) {
15+
await languageMode.ready;
16+
}
17+
}
18+
19+
fdescribe('TextEditor', () => {
1320
let buffer, editor, lineLengths, languageMode;
1421

1522
beforeEach(async () => {
@@ -8235,17 +8242,23 @@ describe('TextEditor', () => {
82358242
});
82368243

82378244
it('returns the result of syntaxTreeScopeDescriptorForBufferPosition() when tree-sitter language mode is used', async () => {
8245+
jasmine.useRealClock();
82388246
editor = await atom.workspace.open('sample.js', { autoIndent: false });
82398247
await atom.packages.activatePackage('language-javascript');
82408248

82418249
let buffer = editor.getBuffer();
82428250

8243-
buffer.setLanguageMode(
8244-
new TreeSitterLanguageMode({
8245-
buffer,
8246-
grammar: atom.grammars.grammarForScopeName('source.js')
8247-
})
8248-
);
8251+
let languageMode = new WASMTreeSitterLanguageMode({
8252+
buffer,
8253+
grammar: atom.grammars.grammarForScopeName('source.js'),
8254+
grammars: atom.grammars
8255+
});
8256+
8257+
languageMode.useAsyncParsing = false;
8258+
languageMode.useAsyncIndent = false;
8259+
8260+
buffer.setLanguageMode(languageMode);
8261+
await languageMode.ready;
82498262

82508263
const syntaxTreeeScopeDescriptor = editor.syntaxTreeScopeDescriptorForBufferPosition(
82518264
[4, 17]
@@ -8771,6 +8784,7 @@ describe('TextEditor', () => {
87718784
describe('.unfoldAll()', () => {
87728785
it('unfolds every folded line', async () => {
87738786
editor = await atom.workspace.open('sample.js', { autoIndent: false });
8787+
await languageModeReady(editor);
87748788

87758789
const initialScreenLineCount = editor.getScreenLineCount();
87768790
editor.foldBufferRow(0);
@@ -8786,6 +8800,7 @@ describe('TextEditor', () => {
87868800
editor = await atom.workspace.open('sample-with-comments.js', {
87878801
autoIndent: false
87888802
});
8803+
await languageModeReady(editor);
87898804

87908805
const initialScreenLineCount = editor.getScreenLineCount();
87918806
editor.foldBufferRow(0);
@@ -8801,6 +8816,7 @@ describe('TextEditor', () => {
88018816
describe('.foldAll()', () => {
88028817
it('folds every foldable line', async () => {
88038818
editor = await atom.workspace.open('sample.js', { autoIndent: false });
8819+
await languageModeReady(editor);
88048820

88058821
editor.foldAll();
88068822
const [fold1, fold2, fold3] = editor.unfoldAll();
@@ -8813,6 +8829,7 @@ describe('TextEditor', () => {
88138829
describe('.foldBufferRow(bufferRow)', () => {
88148830
beforeEach(async () => {
88158831
editor = await atom.workspace.open('sample.js');
8832+
await languageModeReady(editor);
88168833
});
88178834

88188835
describe('when bufferRow can be folded', () => {
@@ -8875,6 +8892,7 @@ describe('TextEditor', () => {
88758892
describe('.foldAllAtIndentLevel(indentLevel)', () => {
88768893
it('folds blocks of text at the given indentation level', async () => {
88778894
editor = await atom.workspace.open('sample.js', { autoIndent: false });
8895+
await languageModeReady(editor);
88788896

88798897
editor.foldAllAtIndentLevel(0);
88808898
expect(editor.lineTextForScreenRow(0)).toBe(
@@ -8908,6 +8926,7 @@ describe('TextEditor', () => {
89088926
editor = await atom.workspace.open('sample-with-comments.js', {
89098927
autoIndent: false
89108928
});
8929+
await languageModeReady(editor);
89118930

89128931
editor.foldAllAtIndentLevel(0);
89138932
const folds = editor.unfoldAll();

src/wasm-tree-sitter-language-mode.js

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -934,8 +934,10 @@ class WASMTreeSitterLanguageMode {
934934
*/
935935
getFoldableRangeContainingPoint(point) {
936936
point = this.buffer.clipPosition(point);
937-
let fold = this.getFoldRangeForRow(point.row);
938-
if (fold) { return fold; }
937+
if (point.column >= this.buffer.lineLengthForRow(point.row)) {
938+
let fold = this.getFoldRangeForRow(point.row);
939+
if (fold) { return fold; }
940+
}
939941

940942
// Move backwards until we find a fold range containing this row.
941943
for (let row = point.row - 1; row >= 0; row--) {
@@ -950,12 +952,12 @@ class WASMTreeSitterLanguageMode {
950952
if (!this.tokenized) { return []; }
951953

952954
let layers = this.getAllLanguageLayers();
953-
let folds = [];
955+
let allFolds = [];
954956
for (let layer of layers) {
955957
let folds = layer.foldResolver.getAllFoldRanges();
956-
folds.push(...folds);
958+
allFolds.push(...folds);
957959
}
958-
return folds;
960+
return allFolds;
959961
}
960962

961963
// This method is improperly named, and is based on an assumption that every

0 commit comments

Comments
 (0)