Skip to content

Commit

Permalink
Merge pull request #412 from Adeptius/feature/html-reference-completi…
Browse files Browse the repository at this point in the history
…tion

feat: html reference and completition support
  • Loading branch information
marhali authored Nov 23, 2024
2 parents 539ccd7 + 20675c3 commit 5fa8c19
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package de.marhali.easyi18n.assistance.completion;

import com.intellij.codeInsight.completion.CompletionContributor;
import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.impl.source.xml.XmlAttributeValueImpl;

/**
* Xml specific completion contributor.
* @author adeptius
*/
public class XmlCompletionContributor extends CompletionContributor {
public XmlCompletionContributor() {
extend(CompletionType.BASIC, PlatformPatterns.psiElement().inside(XmlAttributeValueImpl.class),
new KeyCompletionProvider());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package de.marhali.easyi18n.assistance.intention;

import com.intellij.openapi.util.TextRange;
import com.intellij.psi.PsiElement;
import com.intellij.psi.xml.XmlAttributeValue;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

/**
* Xml specific translation key intention.
* @author adeptius
*/
public class XmlTranslationIntention extends AbstractTranslationIntention {
@Override
protected @Nullable String extractText(@NotNull PsiElement element) {
if(!(element.getParent() instanceof XmlAttributeValue)) {
return null;
}

return ((XmlAttributeValue) element.getParent()).getValue();
}

@Override
@NotNull TextRange convertRange(@NotNull TextRange input) {
return new TextRange(input.getStartOffset() + 1, input.getEndOffset() - 1);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package de.marhali.easyi18n.assistance.reference;

import com.intellij.openapi.project.Project;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.PsiReferenceProvider;
import com.intellij.psi.PsiReferenceRegistrar;
import com.intellij.psi.impl.source.xml.XmlAttributeValueImpl;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;

/**
* Xml specific key reference binding
* @author adeptius
*/
public class XmlKeyReferenceContributor extends AbstractKeyReferenceContributor {
@Override
public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
registrar.registerReferenceProvider(
PlatformPatterns.psiElement(XmlAttributeValueImpl.class),
getProvider());
}

private PsiReferenceProvider getProvider() {
return new PsiReferenceProvider() {
@Override
public PsiReference @NotNull [] getReferencesByElement(
@NotNull PsiElement element, @NotNull ProcessingContext context) {

Project project = element.getProject();
XmlAttributeValueImpl literalExpression = (XmlAttributeValueImpl) element;
String value = literalExpression.getValue();
return getReferences(project, element, value);
}
};
}
}
15 changes: 15 additions & 0 deletions src/main/resources/META-INF/de.marhali.easyi18n-xml.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
<idea-plugin>
<extensions defaultExtensionNs="com.intellij">

<psi.referenceContributor
language="HTML"
implementation="de.marhali.easyi18n.assistance.reference.XmlKeyReferenceContributor"
/>

<lang.foldingBuilder
language="HTML"
implementationClass="de.marhali.easyi18n.assistance.folding.XmlFoldingBuilder"
Expand All @@ -9,5 +15,14 @@
language="HTML"
implementationClass="de.marhali.easyi18n.assistance.documentation.CommonDocumentationProvider"
/>

<completion.contributor
language="HTML"
implementationClass="de.marhali.easyi18n.assistance.completion.XmlCompletionContributor"
/>

<intentionAction>
<className>de.marhali.easyi18n.assistance.intention.XmlTranslationIntention</className>
</intentionAction>
</extensions>
</idea-plugin>

0 comments on commit 5fa8c19

Please sign in to comment.