From 62a809b5146417d6f0ec426fb76c2c3328a98d9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcel=20Ha=C3=9Flinger?= Date: Sun, 25 Apr 2021 21:16:59 +0200 Subject: [PATCH] Finalize i18n key completion feature --- .../ui/editor/I18nCompletionContributor.java | 4 ++ .../ui/editor/I18nCompletionProvider.java | 43 ++++++++++++++----- 2 files changed, 37 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java index 2f53fd3..fce0ae2 100644 --- a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java +++ b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionContributor.java @@ -5,6 +5,10 @@ import com.intellij.codeInsight.completion.CompletionType; import com.intellij.patterns.*; import com.intellij.psi.PsiLiteralValue; +/** + * Show i18n key completion for literal values. + * @author marhali + */ public class I18nCompletionContributor extends CompletionContributor { public I18nCompletionContributor() { diff --git a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java index 45ef979..b2dcd3c 100644 --- a/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java +++ b/src/main/java/de/marhali/easyi18n/ui/editor/I18nCompletionProvider.java @@ -8,36 +8,59 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.project.Project; import com.intellij.util.ProcessingContext; + import de.marhali.easyi18n.model.LocalizedNode; import de.marhali.easyi18n.service.DataStore; +import de.marhali.easyi18n.service.SettingsService; +import de.marhali.easyi18n.util.TranslationsUtil; + import org.jetbrains.annotations.NotNull; +import java.util.List; + +/** + * I18n translation key completion provider. + * @author marhali + */ public class I18nCompletionProvider extends CompletionProvider { - Project project; + private Project project; + private String previewLocale; public I18nCompletionProvider() { DataManager.getInstance().getDataContextFromFocusAsync().onSuccess(data -> { project = PlatformDataKeys.PROJECT.getData(data); + previewLocale = SettingsService.getInstance(project).getState().getPreviewLocale(); }); } @Override protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { String query = result.getPrefixMatcher().getPrefix(); + List sections = TranslationsUtil.getSections(query); + String lastSection = null; - LocalizedNode node = query.contains(".") ? - DataStore.getInstance(project).getTranslations().getNode(query) - : DataStore.getInstance(project).getTranslations().getNodes(); - - if(node == null) { - return; + if(!sections.isEmpty() && !query.endsWith(".")) { + lastSection = sections.remove(sections.size() - 1); } + String path = TranslationsUtil.sectionsToFullPath(sections); + + LocalizedNode node = sections.isEmpty() ? DataStore.getInstance(project).getTranslations().getNodes() + : DataStore.getInstance(project).getTranslations().getNode(path); + for(LocalizedNode children : node.getChildren()) { - result.addElement(LookupElementBuilder.create(children.getKey()).appendTailText("I18n", true)); - } + if(lastSection == null || children.getKey().startsWith(lastSection)) { + // Construct full key path / Fore nested objects add '.' to indicate deeper level + String fullKey = (path.isEmpty() ? children.getKey() : path + "." + children.getKey()) + (children.isLeaf() ? "" : "."); - System.out.println(result.getPrefixMatcher().getPrefix()); // Debug + result.addElement(LookupElementBuilder.create(fullKey).appendTailText(getTailText(children), true)); + } + } + } + + private String getTailText(LocalizedNode node) { + return !node.isLeaf() ? " I18n([])" + : " I18n(" + previewLocale + ": " + node.getValue().get(previewLocale) + ")"; } }