From fb8a429827fb81f277696f226fb00fcac6fddf16 Mon Sep 17 00:00:00 2001 From: Angeart Date: Mon, 28 Aug 2023 06:31:09 +0900 Subject: [PATCH] fix(react-i18next): show sub completion items when using scoped namespace (#941) * fix(react-i18next): show sub completion items when using scoped namespace * Empty commit to trigger CI --------- Co-authored-by: Alex Terehov --- src/core/KeyDetector.ts | 10 ++++++++++ src/editor/completion.ts | 12 +++++++++++- 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/core/KeyDetector.ts b/src/core/KeyDetector.ts index eea634e5..288c188c 100644 --- a/src/core/KeyDetector.ts +++ b/src/core/KeyDetector.ts @@ -55,6 +55,16 @@ export class KeyDetector { return keyRange?.key } + static getScopedKey(document: TextDocument, position: Position) + { + const scopes = Global.enabledFrameworks.flatMap(f => f.getScopeRange(document) || []) + if (scopes.length > 0) + { + const offset = document.offsetAt(position) + return scopes.filter(s => s.start < offset && offset < s.end).map(s => s.namespace).join('.') + } + } + static getKeyAndRange(document: TextDocument, position: Position, dotEnding?: boolean) { const { range, key } = KeyDetector.getKeyRange(document, position, dotEnding) || {} if (!range || !key) diff --git a/src/editor/completion.ts b/src/editor/completion.ts index c9830f9c..96cbf48b 100644 --- a/src/editor/completion.ts +++ b/src/editor/completion.ts @@ -16,11 +16,18 @@ class CompletionProvider implements CompletionItemProvider { if (key === undefined) return + const scopedKey = KeyDetector.getScopedKey(document, position) + if (!key) { return Object .values(CurrentFile.loader.keys) .map((key) => { - const item = new CompletionItem(key, CompletionItemKind.Text) + let resolvedKey = key + if (scopedKey) + { + resolvedKey = key.replace(`${scopedKey}.`, "") + } + const item = new CompletionItem(resolvedKey, CompletionItemKind.Text) item.detail = loader.getValueByKey(key) return item }) @@ -35,6 +42,9 @@ class CompletionProvider implements CompletionItemProvider { let node: LocaleTree | LocaleNode | undefined + if (scopedKey && key) + node = loader.getTreeNodeByKey([scopedKey, key].join('.')) + if (!key) node = loader.root