feat: update zon grammar to support the new paths entry

This commit is contained in:
FalsePattern 2023-12-02 23:25:11 +01:00
parent 2645e2646a
commit 01e60f4f4e
Signed by: falsepattern
GPG key ID: E930CDEC50C50E23
3 changed files with 16 additions and 7 deletions

View file

@ -50,7 +50,11 @@
zonFile ::= struct zonFile ::= struct
struct ::= DOT LBRACE (property COMMA | property_placeholder COMMA?)* property? RBRACE struct ::= DOT LBRACE (struct_string_list | struct_map | ()) RBRACE
struct_map ::= (property | property_placeholder) (COMMA (property | property_placeholder))* COMMA?
struct_string_list ::= STRING_LITERAL (COMMA STRING_LITERAL)* COMMA?
property ::= DOT identifier EQ value property ::= DOT identifier EQ value

View file

@ -37,14 +37,14 @@ import java.util.Set;
import static com.falsepattern.zigbrains.common.util.PsiElementUtil.parent; import static com.falsepattern.zigbrains.common.util.PsiElementUtil.parent;
public class ZonCompletionContributor extends CompletionContributor { public class ZonCompletionContributor extends CompletionContributor {
private static final List<String> ZON_ROOT_KEYS = List.of("name", "version", "dependencies"); private static final List<String> ZON_ROOT_KEYS = List.of("name", "version", "dependencies", "path");
private static final List<String> ZON_DEP_KEYS = List.of("url", "hash"); private static final List<String> ZON_DEP_KEYS = List.of("url", "hash");
public ZonCompletionContributor() { public ZonCompletionContributor() {
extend(CompletionType.BASIC, extend(CompletionType.BASIC,
PlatformPatterns.psiElement() PlatformPatterns.psiElement()
.withParent(PlatformPatterns.psiElement(ZonTypes.PROPERTY_PLACEHOLDER)) .withParent(PlatformPatterns.psiElement(ZonTypes.PROPERTY_PLACEHOLDER))
.withSuperParent(3, PlatformPatterns.psiElement(ZonFile.class)), .withSuperParent(4, PlatformPatterns.psiElement(ZonFile.class)),
new CompletionProvider<>() { new CompletionProvider<>() {
@Override @Override
protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) {
@ -57,9 +57,9 @@ public class ZonCompletionContributor extends CompletionContributor {
extend(CompletionType.BASIC, extend(CompletionType.BASIC,
PlatformPatterns.psiElement() PlatformPatterns.psiElement()
.withParent(PlatformPatterns.psiElement(ZonTypes.PROPERTY_PLACEHOLDER)) .withParent(PlatformPatterns.psiElement(ZonTypes.PROPERTY_PLACEHOLDER))
.withSuperParent(3, PlatformPatterns.psiElement(ZonTypes.PROPERTY)) .withSuperParent(4, PlatformPatterns.psiElement(ZonTypes.PROPERTY))
.withSuperParent(5, PlatformPatterns.psiElement(ZonTypes.PROPERTY)) .withSuperParent(7, PlatformPatterns.psiElement(ZonTypes.PROPERTY))
.withSuperParent(7, PlatformPatterns.psiElement(ZonFile.class)), .withSuperParent(10, PlatformPatterns.psiElement(ZonFile.class)),
new CompletionProvider<>() { new CompletionProvider<>() {
@Override @Override
protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) { protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull ProcessingContext context, @NotNull CompletionResultSet result) {

View file

@ -19,8 +19,10 @@ package com.falsepattern.zigbrains.zon.psi.impl.mixins;
import com.falsepattern.zigbrains.zon.psi.ZonStruct; import com.falsepattern.zigbrains.zon.psi.ZonStruct;
import com.intellij.extapi.psi.ASTWrapperPsiElement; import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import lombok.val;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
@ -31,8 +33,11 @@ public abstract class ZonStructMixinImpl extends ASTWrapperPsiElement implements
@Override @Override
public Set<String> getKeys() { public Set<String> getKeys() {
val structMap = getStructMap();
if (structMap == null)
return Collections.emptySet();
var result = new HashSet<String>(); var result = new HashSet<String>();
for (var property : getPropertyList()) { for (var property : structMap.getPropertyList()) {
result.add(property.getIdentifier().getName()); result.add(property.getIdentifier().getName());
} }
return result; return result;