Skip to content

Commit e9d4591

Browse files
authored
Merge pull request #206 from davidjb/closedocument-fixes
fix: abort callbacks after `LanguageProvider.closeDocument` called
2 parents 31785dd + 2b612bd commit e9d4591

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

packages/ace-linters/src/language-provider.ts

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,9 +322,13 @@ export class LanguageProvider {
322322
if (!$timer)
323323
$timer =
324324
setTimeout(() => {
325-
let cursor = editor.getCursorPosition();
326325
let sessionLanguageProvider = this.$getSessionLanguageProvider(editor.session);
326+
if (!sessionLanguageProvider) {
327+
$timer = undefined;
328+
return;
329+
}
327330

331+
let cursor = editor.getCursorPosition();
328332
this.$messageController.findDocumentHighlights(this.$getFileName(editor.session), fromPoint(cursor), sessionLanguageProvider.$applyDocumentHighlight);
329333
$timer = undefined;
330334
}, 50);
@@ -372,6 +376,11 @@ export class LanguageProvider {
372376
if (!actionTimer)
373377
actionTimer =
374378
setTimeout(() => {
379+
if (!this.$getSessionLanguageProvider(editor.session)) {
380+
actionTimer = undefined;
381+
return;
382+
}
383+
375384
//TODO: no need to send request on empty
376385
let selection = editor.getSelection().getRange();
377386
let cursor = editor.getCursorPosition();
@@ -508,6 +517,8 @@ export class LanguageProvider {
508517
}
509518

510519
provideSignatureHelp(session: Ace.EditSession, position: Ace.Point, callback?: (signatureHelp: Tooltip | undefined) => void) {
520+
if (!this.$getSessionLanguageProvider(session))
521+
return;
511522
this.$messageController.provideSignatureHelp(this.$getFileName(session), fromPoint(position), (signatureHelp) => callback && callback(fromSignatureHelp(signatureHelp)));
512523
}
513524

packages/ace-linters/tests/unit/language-provider.tests.ts

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,9 +80,9 @@ describe('LanguageProvider tests', () => {
8080
},
8181
completionResolve: true,
8282
format: true,
83-
documentHighlights: false,
83+
documentHighlights: true,
8484
signatureHelp: false,
85-
codeActions: false
85+
codeActions: true
8686
}
8787
});
8888
languageProvider.registerEditor(editor);
@@ -460,6 +460,15 @@ describe('LanguageProvider tests', () => {
460460

461461
})
462462

463+
it('should not error from callbacks after closeDocument', (done) => {
464+
languageProvider.closeDocument(editor.session);
465+
expect(() => languageProvider.provideSignatureHelp(editor.session, null, null)).not.to.throw();
466+
467+
// Check for exceptions from changeSelection from documentHighlights and $provideCodeActions
468+
editor.session.setValue("example");
469+
setTimeout(done, 600);
470+
})
471+
463472
after(() => {
464473
client.removeAllListeners();
465474
ctx.removeAllListeners();

0 commit comments

Comments
 (0)