Skip to content

Commit bdae2af

Browse files
committed
Fixed Smart Completion
Bumped version to 1.3.5
1 parent f70142d commit bdae2af

4 files changed

Lines changed: 26 additions & 19 deletions

File tree

.idea/modules.xml

Lines changed: 1 addition & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/runConfigurations/Mathematica_Plugin.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

resources/META-INF/plugin.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<id>de.halirutan.mathematica</id>
33
<name>Mathematica Support</name>
44
<category>Custom Language</category>
5-
<version>1.3.4</version>
5+
<version>1.3.5</version>
66
<idea-version since-build="135.1230"/>
77
<vendor email="patrick@halirutan.de" url="http://mathematicaplugin.halirutan.de">Patrick Scheibe</vendor>
88
<depends>com.intellij.modules.lang</depends>
@@ -44,6 +44,7 @@
4444
<i>New features and bugfixes:</i>
4545
<br/>
4646
<ul>
47+
<li>Fixed smart-completion of Options that stopped working (<a href="https://github.com/halirutan/Mathematica-IntelliJ-Plugin/issues/30">GH-30</a>)</li>
4748
<li>Fixed some localization constructs and added unicode of the Eth symbol (<a href="https://github.com/halirutan/Mathematica-IntelliJ-Plugin/issues/26">GH-26</a> and <a href="https://github.com/halirutan/Mathematica-IntelliJ-Plugin/issues/27">GH-27</a>)</li>
4849
<li>Made indentation for Association brackets like the indentation for lists <a href="https://github.com/halirutan/Mathematica-IntelliJ-Plugin/issues/20">(GH-20)</a></li>
4950
<li>Fixed the renaming engine so that renamed variables can now have context back-ticks</li>

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

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,15 @@
2727
import com.intellij.codeInsight.completion.CompletionType;
2828
import com.intellij.codeInsight.lookup.LookupElement;
2929
import com.intellij.codeInsight.lookup.LookupElementBuilder;
30-
import com.intellij.patterns.PsiElementPattern;
30+
import com.intellij.patterns.PsiElementPattern.Capture;
3131
import com.intellij.psi.PsiElement;
3232
import com.intellij.util.ProcessingContext;
3333
import de.halirutan.mathematica.MathematicaIcons;
34+
import de.halirutan.mathematica.codeinsight.completion.SymbolInformationProvider.SymbolInformation;
3435
import de.halirutan.mathematica.parsing.psi.MathematicaRecursiveVisitor;
35-
import de.halirutan.mathematica.parsing.psi.api.*;
36+
import de.halirutan.mathematica.parsing.psi.api.FunctionCall;
37+
import de.halirutan.mathematica.parsing.psi.api.MessageName;
38+
import de.halirutan.mathematica.parsing.psi.api.Symbol;
3639
import org.jetbrains.annotations.NotNull;
3740

3841
import java.util.Arrays;
@@ -47,20 +50,21 @@
4750
* First case is when you are inside a function call like Plot[...], then the smart completion suggests the
4851
* options for the specific symbol. Secondly, we handel Message[...] calls and display a list of all messages
4952
* from within the file.
53+
*
5054
* @author patrick (4/2/13)
5155
*/
52-
public class SmartContextAwareCompletion extends MathematicaCompletionProvider {
56+
class SmartContextAwareCompletion extends MathematicaCompletionProvider {
5357

5458

55-
static final HashMap<String, SymbolInformationProvider.SymbolInformation> ourSymbolInformation = SymbolInformationProvider.getSymbolNames();
56-
static final HashSet<String> ourOptionsWithSetDelayed = new HashSet<String>(Arrays.asList(new String[]{
59+
private static final HashMap<String, SymbolInformation> ourSymbolInformation = SymbolInformationProvider.getSymbolNames();
60+
private static final HashSet<String> ourOptionsWithSetDelayed = new HashSet<String>(Arrays.asList(new String[]{
5761
"EvaluationMonitor", "StepMonitor", "DisplayFunction", "Deinitialization", "DisplayFunction",
5862
"DistributedContexts", "Initialization", "UnsavedVariables", "UntrackedVariables"
5963
}));
6064

6165
@Override
6266
void addTo(CompletionContributor contributor) {
63-
final PsiElementPattern.Capture<PsiElement> funcPattern = psiElement().withSuperParent(2, FunctionCall.class);
67+
final Capture<PsiElement> funcPattern = psiElement().withSuperParent(2, FunctionCall.class);
6468
contributor.extend(CompletionType.SMART, funcPattern, this);
6569
}
6670

@@ -70,9 +74,12 @@ protected void addCompletions(@NotNull CompletionParameters parameters, Processi
7074
final PsiElement position = parameters.getPosition();
7175
final PsiElement function = position.getParent().getParent();
7276
if (function instanceof FunctionCall) {
73-
String functionName = ((Symbol) function.getFirstChild()).getSymbolName();
74-
if (ourSymbolInformation.containsKey(functionName) && ourSymbolInformation.get(functionName).function) {
75-
final SymbolInformationProvider.SymbolInformation functionInformation = ourSymbolInformation.get(functionName);
77+
final Symbol head = (Symbol) ((FunctionCall) function).getHead();
78+
String functionName = head.getSymbolName();
79+
String functionContext = head.getMathematicaContext();
80+
final String key = functionContext + functionName;
81+
if (ourSymbolInformation.containsKey(key) && ourSymbolInformation.get(key).function) {
82+
final SymbolInformation functionInformation = ourSymbolInformation.get(key);
7683
final String[] options = functionInformation.options;
7784
if (options != null) {
7885
for (String opt : options) {
@@ -89,11 +96,11 @@ protected void addCompletions(@NotNull CompletionParameters parameters, Processi
8996

9097
@Override
9198
public void visitMessageName(final MessageName messageName) {
92-
usages.add(
93-
LookupElementBuilder.create(messageName.getText()).
94-
withIcon(MathematicaIcons.MESSAGES_ICON).
95-
withCaseSensitivity(false)); // make it case insensitive so you can type argx in Sym::argx to
96-
// find the correct completion
99+
usages.add(
100+
LookupElementBuilder.create(messageName.getText()).
101+
withIcon(MathematicaIcons.MESSAGES_ICON).
102+
withCaseSensitivity(false)); // make it case insensitive so you can type argx in Sym::argx to
103+
// find the correct completion
97104
}
98105
};
99106
visitor.visitFile(parameters.getOriginalFile());

0 commit comments

Comments
 (0)