package com.dmarcotte.handlebars.completion;
import com.dmarcotte.handlebars.parsing.HbTokenTypes;
import com.dmarcotte.handlebars.psi.HbMustacheName;
import com.intellij.codeInsight.completion.*;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.ProcessingContext;
import org.jetbrains.annotations.NotNull;
import static com.intellij.patterns.PlatformPatterns.psiElement;
public class HbKeywordCompletionContributor extends CompletionContributor {
public HbKeywordCompletionContributor() {
extend(CompletionType.BASIC, psiElement(HbTokenTypes.ID).withSuperParent(2, psiElement(HbTokenTypes.PATH)),
new CompletionProvider<CompletionParameters>() {
@Override
protected void addCompletions(@NotNull CompletionParameters parameters,
ProcessingContext context,
@NotNull CompletionResultSet result) {
PsiElement position = PsiTreeUtil.getParentOfType(parameters.getPosition(), HbMustacheName.class);
PsiElement prevSibling = position != null ? position.getPrevSibling() : null;
ASTNode prevSiblingNode = prevSibling != null ? prevSibling.getNode() : null;
if (prevSiblingNode != null && prevSiblingNode.getElementType() == HbTokenTypes.OPEN_BLOCK) {
result.addElement(LookupElementBuilder.create("if"));
result.addElement(LookupElementBuilder.create("each"));
result.addElement(LookupElementBuilder.create("unless"));
result.addElement(LookupElementBuilder.create("with"));
}
}
});
}
}