From 433ce8e8449a9024eb80c59c6478f61518db4d00 Mon Sep 17 00:00:00 2001 From: marhali Date: Thu, 21 Apr 2022 22:17:16 +0200 Subject: [PATCH] add option to force key folding --- CHANGELOG.md | 1 + .../assistance/folding/AbstractFoldingBuilder.java | 8 ++++++-- .../marhali/easyi18n/settings/ProjectSettings.java | 3 +++ .../easyi18n/settings/ProjectSettingsComponent.java | 9 +++++++++ .../settings/ProjectSettingsComponentState.java | 7 +++++++ .../easyi18n/settings/ProjectSettingsState.java | 12 ++++++++++++ .../easyi18n/settings/presets/DefaultPreset.java | 5 +++++ .../settings/presets/ReactI18NextPreset.java | 5 +++++ .../easyi18n/settings/presets/VueI18nPreset.java | 5 +++++ src/main/resources/messages.properties | 4 ++++ 10 files changed, 57 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1b13087..97c8a70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ - Extract translation intention - Full language support for Java, Kotlin, JavaScript / TypeScript, Vue and PHP - Expand already expanded nodes after data update +- Experimental option to force translation key folding - Individual icon for tool-window and lookup items - Dedicated configuration file (easy-i18n.xml) inside .idea folder diff --git a/src/main/java/de/marhali/easyi18n/assistance/folding/AbstractFoldingBuilder.java b/src/main/java/de/marhali/easyi18n/assistance/folding/AbstractFoldingBuilder.java index a4387bf..691e30f 100644 --- a/src/main/java/de/marhali/easyi18n/assistance/folding/AbstractFoldingBuilder.java +++ b/src/main/java/de/marhali/easyi18n/assistance/folding/AbstractFoldingBuilder.java @@ -14,6 +14,7 @@ import de.marhali.easyi18n.InstanceManager; import de.marhali.easyi18n.assistance.OptionalAssistance; import de.marhali.easyi18n.model.TranslationData; import de.marhali.easyi18n.model.TranslationValue; +import de.marhali.easyi18n.settings.ProjectSettings; import de.marhali.easyi18n.settings.ProjectSettingsService; import de.marhali.easyi18n.util.KeyPathConverter; @@ -22,6 +23,7 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Language specific translation key folding with representative locale value. @@ -52,8 +54,9 @@ abstract class AbstractFoldingBuilder extends FoldingBuilderEx implements Option List descriptors = new ArrayList<>(); + ProjectSettings settings = ProjectSettingsService.get(root.getProject()).getState(); TranslationData data = InstanceManager.get(root.getProject()).store().getData(); - KeyPathConverter converter = new KeyPathConverter(root.getProject()); + KeyPathConverter converter = new KeyPathConverter(settings); for(Pair region : extractRegions(root)) { if(data.getTranslation(converter.fromString(region.first)) == null) { @@ -64,7 +67,8 @@ abstract class AbstractFoldingBuilder extends FoldingBuilderEx implements Option region.second.getTextRange().getEndOffset() - 1); // Some language implementations like [Vue Template] does not support FoldingGroup's - FoldingDescriptor descriptor = new FoldingDescriptor(region.second.getNode(), range); + FoldingDescriptor descriptor = new FoldingDescriptor(region.second.getNode(), range, + null, Set.of(), settings.isAlwaysFold()); descriptors.add(descriptor); } diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java index 5b73e9d..e4c94a6 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettings.java @@ -29,4 +29,7 @@ public interface ProjectSettings { boolean isNestedKeys(); boolean isAssistance(); + + // Experimental Configuration + boolean isAlwaysFold(); } diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java index cb84f19..98b1dee 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponent.java @@ -60,6 +60,9 @@ public class ProjectSettingsComponent extends ProjectSettingsComponentState { .addVerticalGap(12) .addComponent(constructNestedKeysField()) .addComponent(constructAssistanceField()) + .addVerticalGap(24) + .addComponent(new TitledSeparator(bundle.getString("settings.experimental.title"))) + .addComponent(constructAlwaysFoldField()) .addComponentFillVertically(new JPanel(), 0) .getPanel(); } @@ -203,6 +206,12 @@ public class ProjectSettingsComponent extends ProjectSettingsComponentState { return assistance; } + private JComponent constructAlwaysFoldField() { + alwaysFold = new JBCheckBox(bundle.getString("settings.experimental.always-fold.title")); + alwaysFold.setToolTipText(bundle.getString("settings.experimental.always-fold.tooltip")); + return alwaysFold; + } + private ItemListener handleParserChange() { return e -> { if(e.getStateChange() == ItemEvent.SELECTED) { diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java index f3dd07e..bf682e8 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsComponentState.java @@ -36,6 +36,9 @@ public class ProjectSettingsComponentState { protected JCheckBox nestedKeys; protected JCheckBox assistance; + // Experimental configuration + protected JCheckBox alwaysFold; + protected ProjectSettingsState getState() { // Every field needs to provide its state ProjectSettingsState state = new ProjectSettingsState(); @@ -57,6 +60,8 @@ public class ProjectSettingsComponentState { state.setNestedKeys(nestedKeys.isSelected()); state.setAssistance(assistance.isSelected()); + state.setAlwaysFold(alwaysFold.isSelected()); + return state; } @@ -78,5 +83,7 @@ public class ProjectSettingsComponentState { nestedKeys.setSelected(state.isNestedKeys()); assistance.setSelected(state.isAssistance()); + + alwaysFold.setSelected(state.isAlwaysFold()); } } diff --git a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java index d4a077d..29bdd44 100644 --- a/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java +++ b/src/main/java/de/marhali/easyi18n/settings/ProjectSettingsState.java @@ -34,6 +34,9 @@ public class ProjectSettingsState implements ProjectSettings { private Boolean nestedKeys; private Boolean assistance; + // Experimental configuration + private Boolean alwaysFold; + public ProjectSettingsState() {} @Override @@ -102,6 +105,11 @@ public class ProjectSettingsState implements ProjectSettings { return assistance != null ? assistance : defaults.isAssistance(); } + @Override + public boolean isAlwaysFold() { + return alwaysFold != null ? alwaysFold : defaults.isAlwaysFold(); + } + public void setLocalesDirectory(String localesDirectory) { this.localesDirectory = localesDirectory; } @@ -153,4 +161,8 @@ public class ProjectSettingsState implements ProjectSettings { public void setAssistance(Boolean assistance) { this.assistance = assistance; } + + public void setAlwaysFold(Boolean alwaysFold) { + this.alwaysFold = alwaysFold; + } } diff --git a/src/main/java/de/marhali/easyi18n/settings/presets/DefaultPreset.java b/src/main/java/de/marhali/easyi18n/settings/presets/DefaultPreset.java index 124f1d9..63b7b4e 100644 --- a/src/main/java/de/marhali/easyi18n/settings/presets/DefaultPreset.java +++ b/src/main/java/de/marhali/easyi18n/settings/presets/DefaultPreset.java @@ -76,4 +76,9 @@ public class DefaultPreset implements ProjectSettings { public boolean isAssistance() { return true; } + + @Override + public boolean isAlwaysFold() { + return false; + } } diff --git a/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java b/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java index 8d5dbeb..cc55f1d 100644 --- a/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java +++ b/src/main/java/de/marhali/easyi18n/settings/presets/ReactI18NextPreset.java @@ -76,4 +76,9 @@ public class ReactI18NextPreset implements ProjectSettings { public boolean isAssistance() { return true; } + + @Override + public boolean isAlwaysFold() { + return false; + } } diff --git a/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java b/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java index ea6d064..01927d8 100644 --- a/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java +++ b/src/main/java/de/marhali/easyi18n/settings/presets/VueI18nPreset.java @@ -75,4 +75,9 @@ public class VueI18nPreset implements ProjectSettings { public boolean isAssistance() { return true; } + + @Override + public boolean isAlwaysFold() { + return false; + } } diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 7986043..3df89be 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -52,6 +52,10 @@ settings.editor.key.nesting.title=Escape section delimiter within a section laye settings.editor.key.nesting.tooltip=Escapes the section delimiter within a section to properly reconstruct nested key sections. Disable this feature if nested key sections are the exception rather than the rule in your translation file. settings.editor.assistance.title=Editor code assistance for translations settings.editor.assistance.tooltip=Activates editor support to reference, auto-complete and folding of existing translations. +# Experimental configuration +settings.experimental.title=Experimental Configuration +settings.experimental.always-fold.title=Always fold translation keys +settings.experimental.always-fold.tooltip=Forces the editor to always display the value behind a translation key. The value cannot be unfolded when this function is active. error.io=An error occurred while processing translation files. \n\ Config: {0} => {1} ({2}) \n\ Path: {3} \n\