package com.eslint.config.schema; import com.eslint.ESLintProjectComponent; import com.google.common.io.Files; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.wix.utils.FileUtils; import java.io.File; import java.io.FilenameFilter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Set; // TODO refresh when config change public final class RuleCache { public List<String> rules = new ArrayList<String>(); public Set<String> rulesMap = ContainerUtil.newLinkedHashSet(); public static RuleCache instance; public void read(String path) { FilenameFilter filter = new FilenameFilter() { @Override public boolean accept(File file, String name) { return name.endsWith(".js"); } }; String[] rules1 = new File(path).list(filter); rules.addAll(Arrays.asList(rules1)); List<String> names = ContainerUtil.map(rules1, new Function<String, String>() { public String fun(String file) { return Files.getNameWithoutExtension(file); } }); rulesMap.addAll(names); } public void readRules() { SchemaJsonObject schemaRules = ESLintSchema.ROOT.findOfType(ESLintSchema.RULES); if (schemaRules != null) { List<BaseType.SchemaAny> tempRules = ContainerUtil.map(rulesMap, new Function<String, BaseType.SchemaAny>() { @Override public BaseType.SchemaAny fun(String ruleName) { return new BaseType.SchemaAny(ruleName, ruleName); } }); schemaRules.properties = tempRules.toArray(new BaseType[tempRules.size()]); } } // private static void initialize(Project project, String builtinRulesPath) { // instance = new RuleCache(); // ESLintSchema.load(); // SchemaJsonObject rules = ESLintSchema.ROOT.findOfType(ESLintSchema.RULES); // if (rules != null) { // for (BaseType b : rules.properties) { // RuleCache.instance.rulesMap.add(b.title); // } // } // String absRulesPath = FileUtils.resolvePath(project, builtinRulesPath); // if (StringUtil.isNotEmpty(absRulesPath)) { // instance.read(absRulesPath); // } //// instance.read(RuleCache.defaultPath); // } // public static void initializeFromPath(Project project, String builtinRulesPath) { // instance = new RuleCache(); // String absRulesPath = FileUtils.resolvePath(project, builtinRulesPath); // if (StringUtil.isNotEmpty(absRulesPath)) { // instance.read(absRulesPath); // } // instance.read(RuleCache.defaultPath); // } // public static void initializeFromPath(Project project) { // ESLintProjectComponent component = project.getComponent(ESLintProjectComponent.class); // instance = new RuleCache(); // ESLintSchema.load(); // String absRulesPath = FileUtils.resolvePath(project, component.rulesPath); // if (StringUtil.isNotEmpty(absRulesPath)) { // instance.read(absRulesPath); // } // instance.read(component.builtinRulesPath); // } public static void initializeFromPath(Project project, ESLintProjectComponent component) { // ESLintProjectComponent component = project.getComponent(ESLintProjectComponent.class); String absRulesPath = FileUtils.resolvePath(project, component.customRulesPath); initializeFromPaths(component.rulesPath, absRulesPath); } private static void initializeFromPaths(String... paths) { instance = new RuleCache(); ESLintSchema.load(); for (String path : paths) { if (StringUtil.isNotEmpty(path)) { instance.read(path); } } instance.readRules(); } }