package com.jscs.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataConstants; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.jscs.JscsExternalAnnotator; import com.jscs.JscsProjectComponent; import com.jscs.cli.JscsRunner; import com.jscs.cli.data.LintResult; import org.jetbrains.annotations.NotNull; public class JscsFixAction extends AnAction { public static boolean isJscsEnabled(Project project) { if (project != null) { JscsProjectComponent conf = project.getComponent(JscsProjectComponent.class); return conf.isEnabled(); } return false; } public static boolean isJSFile(VirtualFile file) { return file != null && file.getExtension() != null && file.getExtension().equals("js"); } @Override public void update(@NotNull AnActionEvent e) { boolean enabled = false; Project project = CommonDataKeys.PROJECT.getData(e.getDataContext()); boolean pluginEnabled = isJscsEnabled(project); if (project != null) { final VirtualFile file = (VirtualFile) e.getDataContext().getData(DataConstants.VIRTUAL_FILE); enabled = pluginEnabled && isJSFile(file); // || isRtFileContext(e.getDataContext())); if (file != null) { e.getPresentation().setText("JSCS Fix '" + file.getName() + '\''); } } e.getPresentation().setVisible(enabled); } public void actionPerformed(AnActionEvent e) { final Project project = e.getProject(); if (project == null) return; final VirtualFile file = (VirtualFile) e.getDataContext().getData(DataConstants.VIRTUAL_FILE); JscsProjectComponent component = project.getComponent(JscsProjectComponent.class); // JscsConfigFileListener.start(collectedInfo.project); // actualFile = ActualFile2.getOrCreateActualFile(JSCS_TEMP_FILE_KEY, file, collectedInfo.fileContent); // if (actualFile == null || actualFile.getActualFile() == null) { // return null; // } // File cwd = new File(project.getBasePath()); // if (actualFile instanceof ActualFile2.TempActualFile) { // cwd = ((ActualFile2.TempActualFile) actualFile).getTempFile().file.getParentFile(); // } // String relativeFile = actualFile.getActualFile().getName(); // File cwd = actualFile.getActualFile().getParentFile(); // String relativeFile = FileUtils.makeRelative(cwd, actualFile.getActualFile()); String rc = JscsExternalAnnotator.getRC(project, component.jscsRcFile); LintResult result = JscsRunner.fix(project.getBasePath(), file.getPath(), component.nodeInterpreter, component.jscsExecutable, rc, component.preset, component.settings.esnext, component.settings.esprima); file.refresh(true, false); } }