package com.eslint.config; import com.intellij.lang.ASTNode; import com.intellij.lang.javascript.JSTokenTypes; import com.intellij.lang.javascript.psi.JSFile; import com.intellij.lang.javascript.psi.JSObjectLiteralExpression; import com.intellij.lang.javascript.psi.JSProperty; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.util.PsiTreeUtil; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.HashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.Set; /** * @author idok */ public final class ESLintConfigFileUtil { private ESLintConfigFileUtil() { } private static final Set<String> FILES = createSet(); public static boolean isESLintConfigFile(JSFile file) { return file != null && (isESLintConfigFile(file.getVirtualFile()) || file.getFileType().equals(ESLintConfigFileType.INSTANCE)); } private static Set<String> createSet() { Set<String> s = new HashSet<String>(); Collections.addAll(s, ESLintConfigFileType.ESLINTRC_FILES); return s; } public static boolean isRC(String fileName) { return FILES.contains(fileName); } public static boolean isESLintConfigFile(PsiElement position) { return isESLintConfigFile(position.getContainingFile().getOriginalFile().getVirtualFile()); } public static boolean isESLintConfigFile(VirtualFile file) { // return file != null && file.getName().equals(ESLintConfigFileType.ESLINTRC); return file != null && isRC(file.getName()); } @Nullable public static JSProperty getProperty(@NotNull PsiElement position) { JSProperty property = PsiTreeUtil.getParentOfType(position, JSProperty.class, false); if (property != null) { JSObjectLiteralExpression objectLiteralExpression = ObjectUtils.tryCast(property.getParent(), JSObjectLiteralExpression.class); if (objectLiteralExpression != null) { return property; } } return null; } @Nullable public static PsiElement getStringLiteral(@NotNull JSProperty property) { PsiElement firstElement = property.getFirstChild(); if (firstElement != null && isStringLiteral(firstElement)) { return firstElement; } return null; } public static boolean isStringLiteral(@NotNull PsiElement element) { if (element instanceof ASTNode) { ASTNode node = (ASTNode) element; return node.getElementType().equals(JSTokenTypes.STRING_LITERAL); } return false; } }