From 7ee67f850bcbd98b8d0beae2cb2eed35b55ec152 Mon Sep 17 00:00:00 2001 From: Dmitry Sharabin Date: Sun, 25 May 2025 14:13:22 +0200 Subject: [PATCH] Update the `Language` class - If a grammar has a base language, it should always be resolved - Fix `getLanguage()`: `language` can already be a resolved grammar if it is taken from `this.languages` Remove extra line --- src/core/classes/language.ts | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/core/classes/language.ts b/src/core/classes/language.ts index 23f0682c10..007e853af4 100644 --- a/src/core/classes/language.ts +++ b/src/core/classes/language.ts @@ -89,7 +89,16 @@ export default class Language extends EventTarget { return null; } - return this.registry.getLanguage(this.def.base.id) ?? null; + let base = this.def.base; + let language = this.registry.peek(base); + if (language) { + // Already resolved + return language; + } + else { + this.registry.add(base as LanguageProto); + return this.registry.getLanguage(base.id); + } } get extends () { @@ -114,7 +123,7 @@ export default class Language extends EventTarget { languages: this.languages, getLanguage: (id: string) => { let language = this.languages[id] ?? this.registry.getLanguage(id); - return language?.resolvedGrammar as Grammar; + return language?.resolvedGrammar as Grammar ?? language; }, whenDefined: (id: string) => { return this.registry.whenDefined(id) as unknown as Promise;