Skip to content

Commit e952241

Browse files
committed
Made the sorting of built-in function completion selectable.
1 parent 2a4405c commit e952241

3 files changed

Lines changed: 49 additions & 9 deletions

File tree

src/de/halirutan/mathematica/codeinsight/completion/BuiltinFunctionCompletionProvider.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,14 @@
2121

2222
package de.halirutan.mathematica.codeinsight.completion;
2323

24-
import com.intellij.codeInsight.completion.CompletionContributor;
25-
import com.intellij.codeInsight.completion.CompletionParameters;
26-
import com.intellij.codeInsight.completion.CompletionResultSet;
27-
import com.intellij.codeInsight.completion.CompletionType;
24+
import com.intellij.codeInsight.completion.*;
2825
import com.intellij.codeInsight.completion.impl.CamelHumpMatcher;
2926
import com.intellij.patterns.PsiElementPattern.Capture;
3027
import com.intellij.psi.PsiElement;
3128
import com.intellij.util.ProcessingContext;
3229
import de.halirutan.mathematica.codeinsight.completion.SymbolInformationProvider.SymbolInformation;
3330
import de.halirutan.mathematica.parsing.MathematicaElementTypes;
31+
import de.halirutan.mathematica.settings.MathematicaSettings;
3432
import org.jetbrains.annotations.NotNull;
3533

3634
import java.util.HashMap;
@@ -59,13 +57,18 @@ protected void addCompletions(@NotNull CompletionParameters parameters, Processi
5957
}
6058

6159
String prefix = findCurrentText(parameters, parameters.getPosition());
62-
// BetterPrefixMatcher matcher = new BetterPrefixMatcher(new CamelHumpMatcher(prefix, true), -1);
63-
CamelHumpMatcher matcher = new CamelHumpMatcher(prefix, true);
60+
final CamelHumpMatcher matcher = new CamelHumpMatcher(prefix, true);
6461
CompletionResultSet result2 = result.withPrefixMatcher(matcher);
6562

63+
final boolean sortByImportance = !MathematicaSettings.getInstance().isSortCompletionEntriesLexicographically();
64+
6665
for (SymbolInformation info : symbols.values()) {
6766
BuiltinSymbolLookupElement lookup = new BuiltinSymbolLookupElement(info);
68-
result2.addElement(lookup);
67+
if (sortByImportance) {
68+
result2.addElement(PrioritizedLookupElement.withPriority(lookup, info.importance));
69+
} else {
70+
result2.addElement(lookup);
71+
}
6972
}
7073
}
7174
}

src/de/halirutan/mathematica/settings/MathematicaSettings.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ public enum SmartEnterResult {
6161
}
6262

6363
public SmartEnterResult smartEnterResult = SmartEnterResult.INSERT_BRACES;
64+
public boolean sortCompletionEntriesLexicographically = false;
6465

6566
public static MathematicaSettings getInstance() {
6667
return ServiceManager.getService(MathematicaSettings.class);
@@ -87,12 +88,15 @@ public boolean equals(Object obj) {
8788
}
8889

8990
final MathematicaSettings settings = (MathematicaSettings) obj;
90-
return smartEnterResult == settings.smartEnterResult;
91+
if (smartEnterResult != settings.smartEnterResult) return false;
92+
return sortCompletionEntriesLexicographically == settings.sortCompletionEntriesLexicographically;
9193
}
9294

9395
@Override
9496
public int hashCode() {
95-
return (smartEnterResult.ordinal());
97+
int result = (smartEnterResult.ordinal());
98+
result = 29 * result + (sortCompletionEntriesLexicographically ? 1 : 0);
99+
return result;
96100
}
97101

98102
public SmartEnterResult getSmartEnterResult() {
@@ -103,4 +107,11 @@ public void setSmartEnterResult(SmartEnterResult result) {
103107
this.smartEnterResult = result;
104108
}
105109

110+
public boolean isSortCompletionEntriesLexicographically() {
111+
return sortCompletionEntriesLexicographically;
112+
}
113+
114+
public void setSortCompletionEntriesLexicographically(boolean shouldSort) {
115+
this.sortCompletionEntriesLexicographically = shouldSort;
116+
}
106117
}

src/de/halirutan/mathematica/settings/SettingsUI.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ public class SettingsUI extends JPanel {
3636
private JCheckBox insertTemplate;
3737
private JCheckBox insertAsCode;
3838
private JCheckBox insertBraces;
39+
private JCheckBox sortByImportance;
40+
private JCheckBox sortByName;
3941

4042
SettingsUI() {
4143
init();
@@ -78,6 +80,23 @@ private void init() {
7880
insertPanel.add(insertAsCode, BorderLayout.NORTH);
7981
insertPanel.add(insertPanel = new JPanel(new BorderLayout()), BorderLayout.SOUTH);
8082
insertPanel.add(insertBraces);
83+
84+
sortByImportance = new JCheckBox("Sort by importance");
85+
sortByImportance.setMnemonic('I');
86+
sortByName = new JCheckBox("Sort by name");
87+
sortByName.setMnemonic('N');
88+
89+
ButtonGroup g2 = new ButtonGroup();
90+
g2.add(sortByImportance);
91+
g2.add(sortByName);
92+
93+
JPanel sortPanel = new JPanel(new BorderLayout());
94+
sortPanel.setBorder(IdeBorderFactory.createTitledBorder("Sorting of completion entries"));
95+
panel.add(panel = new JPanel(new BorderLayout()), BorderLayout.SOUTH);
96+
panel.add(sortPanel, BorderLayout.SOUTH);
97+
98+
sortPanel.add(sortByImportance, BorderLayout.NORTH);
99+
sortPanel.add(sortByName, BorderLayout.SOUTH);
81100
}
82101

83102
public MathematicaSettings getSettings() {
@@ -89,6 +108,7 @@ public MathematicaSettings getSettings() {
89108
} else if (insertTemplate.isSelected()) {
90109
settings.setSmartEnterResult(SmartEnterResult.INSERT_TEMPLATE);
91110
}
111+
settings.setSortCompletionEntriesLexicographically(sortByName.isSelected());
92112
return settings;
93113
}
94114

@@ -101,5 +121,11 @@ public void setSettings(MathematicaSettings settings) {
101121
insertTemplate.setSelected(
102122
settings.getSmartEnterResult().equals(SmartEnterResult.INSERT_TEMPLATE)
103123
);
124+
sortByName.setSelected(
125+
settings.isSortCompletionEntriesLexicographically()
126+
);
127+
sortByImportance.setSelected(
128+
!settings.isSortCompletionEntriesLexicographically()
129+
);
104130
}
105131
}

0 commit comments

Comments
 (0)