parent
bf1338ffa0
commit
e0c68bd63f
@ -4,6 +4,7 @@
|
||||
|
||||
## [Unreleased]
|
||||
### Added
|
||||
- Partial support for translation key folding against actual translation
|
||||
- Support for json based arb files (flutter)
|
||||
|
||||
### Changed
|
||||
|
@ -12,12 +12,12 @@ pluginSinceBuild = 203
|
||||
pluginUntilBuild = 213.*
|
||||
|
||||
# IntelliJ Platform Properties -> https://github.com/JetBrains/gradle-intellij-plugin#intellij-platform-properties
|
||||
platformType = IC
|
||||
platformType = IU
|
||||
platformVersion = 2021.3
|
||||
|
||||
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
|
||||
# Example: platformPlugins = com.intellij.java, com.jetbrains.php:203.4449.22
|
||||
platformPlugins = org.jetbrains.kotlin
|
||||
platformPlugins = org.jetbrains.kotlin, JavaScriptLanguage
|
||||
|
||||
# Java language level used to compile sources and to generate the files for - Java 11 is required since 2020.3
|
||||
javaVersion = 11
|
||||
|
@ -0,0 +1,83 @@
|
||||
package de.marhali.easyi18n.editor.generic;
|
||||
|
||||
import com.intellij.lang.ASTNode;
|
||||
import com.intellij.lang.folding.FoldingBuilderEx;
|
||||
import com.intellij.lang.folding.FoldingDescriptor;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.util.TextRange;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiLiteralValue;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
|
||||
import de.marhali.easyi18n.DataStore;
|
||||
import de.marhali.easyi18n.InstanceManager;
|
||||
import de.marhali.easyi18n.model.Translation;
|
||||
import de.marhali.easyi18n.service.SettingsService;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Translation key folding with actual value based on i18n instance.
|
||||
* @author marhali
|
||||
*/
|
||||
public class GenericFoldingBuilder extends FoldingBuilderEx {
|
||||
|
||||
@Override
|
||||
public FoldingDescriptor @NotNull [] buildFoldRegions(@NotNull PsiElement root, @NotNull Document document, boolean quick) {
|
||||
Collection<PsiLiteralValue> literalValues = PsiTreeUtil.findChildrenOfType(root, PsiLiteralValue.class);
|
||||
List<FoldingDescriptor> descriptors = new ArrayList<>();
|
||||
|
||||
if(!SettingsService.getInstance(root.getProject()).getState().isCodeAssistance()) {
|
||||
return FoldingDescriptor.EMPTY;
|
||||
}
|
||||
|
||||
DataStore store = InstanceManager.get(root.getProject()).store();
|
||||
|
||||
for(final PsiLiteralValue literalValue : literalValues) {
|
||||
String value = literalValue.getValue() instanceof String ? (String) literalValue.getValue() : null;
|
||||
|
||||
// Undefined string literal or not a translation
|
||||
if(value == null || store.getData().getTranslation(value) == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
descriptors.add(new FoldingDescriptor(literalValue.getNode(),
|
||||
new TextRange(literalValue.getTextRange().getStartOffset() + 1,
|
||||
literalValue.getTextRange().getEndOffset() - 1)));
|
||||
}
|
||||
|
||||
return descriptors.toArray(new FoldingDescriptor[0]);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
@Override
|
||||
public String getPlaceholderText(@NotNull ASTNode node) {
|
||||
PsiLiteralValue literalValue = node.getPsi(PsiLiteralValue.class);
|
||||
String value = literalValue.getValue() instanceof String ? (String) literalValue.getValue() : null;
|
||||
|
||||
if(value == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
DataStore store = InstanceManager.get(literalValue.getProject()).store();
|
||||
Translation translation = store.getData().getTranslation(value);
|
||||
|
||||
if(translation == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
String previewLocale = SettingsService.getInstance(literalValue.getProject()).getState().getPreviewLocale();
|
||||
|
||||
return translation.get(previewLocale);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCollapsedByDefault(@NotNull ASTNode node) {
|
||||
return true;
|
||||
}
|
||||
}
|
5
src/main/resources/META-INF/de.marhali.easyi18n-java.xml
Normal file
5
src/main/resources/META-INF/de.marhali.easyi18n-java.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<idea-plugin>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<lang.foldingBuilder language="JAVA" implementationClass="de.marhali.easyi18n.editor.generic.GenericFoldingBuilder" />
|
||||
</extensions>
|
||||
</idea-plugin>
|
@ -0,0 +1,6 @@
|
||||
<idea-plugin>
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<lang.foldingBuilder language="JavaScript" implementationClass="de.marhali.easyi18n.editor.generic.GenericFoldingBuilder" />
|
||||
<lang.foldingBuilder language="TypeScript" implementationClass="de.marhali.easyi18n.editor.generic.GenericFoldingBuilder" />
|
||||
</extensions>
|
||||
</idea-plugin>
|
@ -8,17 +8,26 @@
|
||||
<!-- https://plugins.jetbrains.com/docs/intellij/plugin-compatibility.html -->
|
||||
<depends>com.intellij.modules.platform</depends>
|
||||
<depends>com.intellij.modules.lang</depends>
|
||||
|
||||
<depends optional="true" config-file="de.marhali.easyi18n-kotlin.xml">org.jetbrains.kotlin</depends>
|
||||
<depends optional="true" config-file="de.marhali.easyi18n-javascript.xml">JavaScript</depends>
|
||||
<depends optional="true" config-file="de.marhali.easyi18n-java.xml">com.intellij.java</depends>
|
||||
|
||||
<extensions defaultExtensionNs="com.intellij">
|
||||
<toolWindow id="Easy I18n" anchor="bottom" factoryClass="de.marhali.easyi18n.service.TranslatorToolWindowFactory" />
|
||||
|
||||
<projectService serviceImplementation="de.marhali.easyi18n.service.SettingsService" />
|
||||
|
||||
<completion.contributor language="any"
|
||||
implementationClass="de.marhali.easyi18n.editor.generic.GenericKeyCompletionContributor" />
|
||||
|
||||
<annotator language="" implementationClass="de.marhali.easyi18n.editor.generic.GenericKeyAnnotator" />
|
||||
<annotator language=""
|
||||
implementationClass="de.marhali.easyi18n.editor.generic.GenericKeyAnnotator" />
|
||||
|
||||
<psi.referenceContributor implementation="de.marhali.easyi18n.editor.generic.GenericKeyReferenceContributor" />
|
||||
<psi.referenceContributor
|
||||
implementation="de.marhali.easyi18n.editor.generic.GenericKeyReferenceContributor" />
|
||||
|
||||
<lang.foldingBuilder language="HtmlCompatible"
|
||||
implementationClass="de.marhali.easyi18n.editor.generic.GenericFoldingBuilder" />
|
||||
</extensions>
|
||||
</idea-plugin>
|
Loading…
x
Reference in New Issue
Block a user