package com.scss; import com.google.common.base.Joiner; import com.intellij.codeInspection.*; import com.intellij.codeInspection.ex.UnfairLocalInspectionTool; import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.diagnostic.Logger; //import com.intellij.openapi.options.Configurable; //import com.intellij.openapi.options.ex.Settings; //import com.intellij.openapi.options.newEditor.OptionsEditor; //import com.intellij.openapi.options.newEditor.OptionsEditorContext; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiElementVisitor; import com.intellij.psi.PsiFile; import com.intellij.ui.HyperlinkAdapter; import com.intellij.ui.HyperlinkLabel; import com.intellij.ui.IdeBorderFactory; import com.intellij.util.containers.ContainerUtil; import com.scss.settings.ScssLintSettingsPage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; import javax.swing.event.HyperlinkEvent; import java.awt.*; import java.util.List; //import org.jetbrains.plugins.sass.SASSBundle; public class ScssLintInspection extends LocalInspectionTool implements BatchSuppressableTool, UnfairLocalInspectionTool { //extends PropertySuppressableInspectionBase { private static final String INSPECTION_SHORT_NAME = "ScssLintInspection"; public static final Key<ScssLintInspection> KEY = Key.create(INSPECTION_SHORT_NAME); private static final Logger LOG = Logger.getInstance(ScssLintBundle.LOG_ID); @NotNull public String getDisplayName() { return ScssLintBundle.message("scss.property.inspection.display.name"); } @NotNull public String getShortName() { return INSPECTION_SHORT_NAME; } public ProblemDescriptor[] checkFile(@NotNull PsiFile file, @NotNull final InspectionManager manager, final boolean isOnTheFly) { return ExternalAnnotatorInspectionVisitor.checkFileWithExternalAnnotator(file, manager, isOnTheFly, new ScssLintExternalAnnotator()); } @NotNull @Override public PsiElementVisitor buildVisitor(@NotNull ProblemsHolder holder, boolean isOnTheFly, @NotNull LocalInspectionToolSession session) { return new ExternalAnnotatorInspectionVisitor(holder, new ScssLintExternalAnnotator(), isOnTheFly); } public JComponent createOptionsPanel() { JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); HyperlinkLabel settingsLink = createHyperLink(); panel.setBorder(IdeBorderFactory.createTitledBorder(getDisplayName() + " options")); panel.add(settingsLink); return panel; } @NotNull public String getId() { return "Settings.JavaScript.Linters.ScssLint"; } @NotNull private HyperlinkLabel createHyperLink() { // List path = ContainerUtil.newArrayList(JSBundle.message("settings.javascript.root.configurable.name"), JSBundle.message("settings.javascript.linters.configurable.name"), getDisplayName()); List<String> path = ContainerUtil.newArrayList(ScssLintBundle.message("scss.inspections.group.name"), ScssLintBundle.message("scss.inspection.group.name"), getDisplayName()); String title = Joiner.on(" / ").join(path); final HyperlinkLabel settingsLink = new HyperlinkLabel(title); settingsLink.addHyperlinkListener(new HyperlinkAdapter() { public void hyperlinkActivated(HyperlinkEvent e) { DataContext dataContext = DataManager.getInstance().getDataContext(settingsLink); Project project = CommonDataKeys.PROJECT.getData(dataContext); if (project != null) { showSettings(project); // } else { // new ScssLintSettingsPage(null).showSettings(); } // Settings settings = (Settings) Settings.KEY.getData(dataContext); // if (settings == null) { // configurable.showEditDialog(); // } else { // settings.select(settings.find(getId())); // } // // OptionsEditor optionsEditor = OptionsEditor.KEY.getData(dataContext); // if (optionsEditor == null) { // Project project = CommonDataKeys.PROJECT.getData(dataContext); // if (project != null) { // showSettings(project); // } // return; // } // Configurable configurable = optionsEditor.findConfigurableById(ScssLintInspection.this.getId()); // if (configurable != null) { // optionsEditor.clearSearchAndSelect(configurable); // } // // // // Project project = CommonDataKeys.PROJECT.getData(dataContext); // if(project == null) { // LOG.warn("No project found in data context"); // } else { // JSLinterConfigurable configurable = JSLinterInspection.this.getExternalAnnotatorForBatchInspection().createSettingsConfigurable(project); // Settings settings = (Settings)Settings.KEY.getData(dataContext); // if(settings == null) { // configurable.showEditDialog(); // } else { // settings.select(settings.find(configurable.getId())); // } // } } }); return settingsLink; } static void showSettings(Project project) { ScssLintSettingsPage configurable = new ScssLintSettingsPage(project); configurable.showSettings(); // String dimensionKey = ShowSettingsUtilImpl.createDimensionKey(configurable); // SingleConfigurableEditor singleConfigurableEditor = new SingleConfigurableEditor(project, configurable, dimensionKey, false); // singleConfigurableEditor.show(); } @Override public boolean isSuppressedFor(@NotNull PsiElement element) { return false; } @NotNull @Override public SuppressQuickFix[] getBatchSuppressActions(@Nullable PsiElement element) { return new SuppressQuickFix[0]; } }