From f5bd26a7a231737eb3c67432ea72e3b5940a2405 Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Wed, 30 Aug 2023 02:49:08 +0200 Subject: fix(frontend): completion cache invalidation In some cases, especially with an empty editor, trying to map completions over the last changes may result in a RangeError. If unhandled, the error corrupts editor state. --- subprojects/frontend/src/xtext/ContentAssistService.ts | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'subprojects/frontend/src') diff --git a/subprojects/frontend/src/xtext/ContentAssistService.ts b/subprojects/frontend/src/xtext/ContentAssistService.ts index fd30c4f9..ac8ab36a 100644 --- a/subprojects/frontend/src/xtext/ContentAssistService.ts +++ b/subprojects/frontend/src/xtext/ContentAssistService.ts @@ -248,10 +248,20 @@ export default class ContentAssistService { if (lastTo === undefined) { return true; } - const [transformedFrom, transformedTo] = this.mapRangeInclusive( - lastFrom, - lastTo, - ); + let transformedFrom: number; + let transformedTo: number; + try { + [transformedFrom, transformedTo] = this.mapRangeInclusive( + lastFrom, + lastTo, + ); + } catch (error) { + if (error instanceof RangeError) { + log.debug('Invalidating cache due to invalid range', error); + return true; + } + throw error; + } let invalidate = false; transaction.changes.iterChangedRanges((fromA, toA) => { if (fromA < transformedFrom || toA > transformedTo) { -- cgit v1.2.3-54-g00ecf