diff --git a/.gitignore b/.gitignore
index 9f1d5d0ea..7f28d25b7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,6 @@
/tmp
-/.idea/shelf
# user-specific project metadata
+/.idea/dictionaries/
/.idea/workspace.xml
/.idea/shelf/
# ignore idea.xml output
diff --git a/.idea/runConfigurations/org_elixir_lang.xml b/.idea/runConfigurations/org_elixir_lang.xml
index 5d666c1c5..b7efe1aa9 100644
--- a/.idea/runConfigurations/org_elixir_lang.xml
+++ b/.idea/runConfigurations/org_elixir_lang.xml
@@ -17,7 +17,7 @@
-
+
@@ -28,8 +28,6 @@
-
-
-
+
\ No newline at end of file
diff --git a/gen/org/elixir_lang/psi/ElixirCharListLine.java b/gen/org/elixir_lang/psi/ElixirCharListLine.java
index e4e84e93d..1f0d78c96 100644
--- a/gen/org/elixir_lang/psi/ElixirCharListLine.java
+++ b/gen/org/elixir_lang/psi/ElixirCharListLine.java
@@ -9,7 +9,7 @@
import java.util.List;
-public interface ElixirCharListLine extends Atomable, InterpolatedCharList, Quotable {
+public interface ElixirCharListLine extends Atomable, InterpolatedCharList, Line, Quotable {
@NotNull
ElixirQuoteCharListBody getQuoteCharListBody();
@@ -23,6 +23,9 @@ public interface ElixirCharListLine extends Atomable, InterpolatedCharList, Quot
@NotNull
List addHexadecimalEscapeSequenceCodePoints(List codePointList, ASTNode child);
+ @NotNull
+ Body getBody();
+
IElementType getFragmentType();
@NotNull
diff --git a/gen/org/elixir_lang/psi/ElixirContainerAssociationOperation.java b/gen/org/elixir_lang/psi/ElixirContainerAssociationOperation.java
index 405d9b371..293393fe8 100644
--- a/gen/org/elixir_lang/psi/ElixirContainerAssociationOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirContainerAssociationOperation.java
@@ -14,7 +14,16 @@ public interface ElixirContainerAssociationOperation extends AssociationOperatio
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMapConstructionArguments.java b/gen/org/elixir_lang/psi/ElixirMapConstructionArguments.java
index 9a264f9ad..c597c263c 100644
--- a/gen/org/elixir_lang/psi/ElixirMapConstructionArguments.java
+++ b/gen/org/elixir_lang/psi/ElixirMapConstructionArguments.java
@@ -2,6 +2,7 @@
package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangObject;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -16,6 +17,9 @@ public interface ElixirMapConstructionArguments extends QuotableArguments {
@Nullable
ElixirKeywords getKeywords();
+ @NotNull
+ PsiElement[] arguments();
+
@NotNull
OtpErlangObject[] quoteArguments();
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedAdditionOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedAdditionOperation.java
index 15ad8e191..b68718e46 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedAdditionOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedAdditionOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedAdditionOperation extends ElixirMatchedExpression,
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedAndOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedAndOperation.java
index 6860df1ec..6d5fa4d85 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedAndOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedAndOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedAndOperation extends ElixirMatchedExpression, Infi
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedArrowOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedArrowOperation.java
index 5beaf4fc6..352f4e4b3 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedArrowOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedArrowOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedArrowOperation extends ElixirMatchedExpression, In
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedAtUnqualifiedNoParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirMatchedAtUnqualifiedNoParenthesesCall.java
index 5026ed050..df9354722 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedAtUnqualifiedNoParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedAtUnqualifiedNoParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -26,6 +27,9 @@ public interface ElixirMatchedAtUnqualifiedNoParenthesesCall extends ElixirMatch
@Nullable
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -35,4 +39,7 @@ public interface ElixirMatchedAtUnqualifiedNoParenthesesCall extends ElixirMatch
@Nullable
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedComparisonOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedComparisonOperation.java
index f2d0ec541..d6ae3c915 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedComparisonOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedComparisonOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedComparisonOperation extends ElixirMatchedExpressio
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedDotCall.java b/gen/org/elixir_lang/psi/ElixirMatchedDotCall.java
index cfec7fae6..e181c0050 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedDotCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedDotCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,6 +32,9 @@ public interface ElixirMatchedDotCall extends ElixirMatchedExpression, DotCall,
@Nullable
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -40,4 +44,7 @@ public interface ElixirMatchedDotCall extends ElixirMatchedExpression, DotCall,
@Nullable
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedInMatchOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedInMatchOperation.java
index 26f089e25..a529c519f 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedInMatchOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedInMatchOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedInMatchOperation extends ElixirMatchedExpression,
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedInOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedInOperation.java
index f24b102d3..ad7510cbb 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedInOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedInOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedInOperation extends ElixirMatchedExpression, InOpe
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedMatchOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedMatchOperation.java
index dbbdb3228..4a19365b3 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedMatchOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedMatchOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedMatchOperation extends ElixirMatchedExpression, In
@NotNull
List getMatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedMultiplicationOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedMultiplicationOperation.java
index d24a15640..c5213d342 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedMultiplicationOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedMultiplicationOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedMultiplicationOperation extends ElixirMatchedExpre
@NotNull
ElixirMultiplicationInfixOperator getMultiplicationInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedOrOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedOrOperation.java
index e9634b05d..dbfa9ec30 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedOrOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedOrOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedOrOperation extends ElixirMatchedExpression, Infix
@NotNull
ElixirOrInfixOperator getOrInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedPipeOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedPipeOperation.java
index ed251283b..b038f58df 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedPipeOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedPipeOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedPipeOperation extends ElixirMatchedExpression, Inf
@NotNull
ElixirPipeInfixOperator getPipeInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoArgumentsCall.java b/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoArgumentsCall.java
index 774d652ed..36fd40b5b 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoArgumentsCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoArgumentsCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,6 +29,9 @@ public interface ElixirMatchedQualifiedNoArgumentsCall extends ElixirMatchedExpr
@Nullable
ElixirDoBlock getDoBlock();
+ @Nullable
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -37,4 +41,7 @@ public interface ElixirMatchedQualifiedNoArgumentsCall extends ElixirMatchedExpr
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoParenthesesCall.java
index fc9c150be..8a3126ecc 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedQualifiedNoParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -20,6 +21,9 @@ public interface ElixirMatchedQualifiedNoParenthesesCall extends ElixirMatchedEx
@NotNull
ElixirRelativeIdentifier getRelativeIdentifier();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@Nullable
String functionName();
@@ -40,4 +44,7 @@ public interface ElixirMatchedQualifiedNoParenthesesCall extends ElixirMatchedEx
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedQualifiedParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirMatchedQualifiedParenthesesCall.java
index 964953280..099a0824d 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedQualifiedParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedQualifiedParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,6 +32,9 @@ public interface ElixirMatchedQualifiedParenthesesCall extends ElixirMatchedExpr
@NotNull
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -40,4 +44,7 @@ public interface ElixirMatchedQualifiedParenthesesCall extends ElixirMatchedExpr
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedRelationalOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedRelationalOperation.java
index acb843d78..90a4c9575 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedRelationalOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedRelationalOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedRelationalOperation extends ElixirMatchedExpressio
@NotNull
ElixirRelationalInfixOperator getRelationalInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedTwoOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedTwoOperation.java
index 32aa2ba3a..b8cc77f70 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedTwoOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedTwoOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedTwoOperation extends ElixirMatchedExpression, Infi
@NotNull
ElixirTwoInfixOperator getTwoInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedTypeOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedTypeOperation.java
index d364aaa03..fed1ff691 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedTypeOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedTypeOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedTypeOperation extends ElixirMatchedExpression, Inf
@NotNull
ElixirTypeInfixOperator getTypeInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoArgumentsCall.java b/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoArgumentsCall.java
index c80593a13..0044a3888 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoArgumentsCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoArgumentsCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -20,6 +21,9 @@ public interface ElixirMatchedUnqualifiedNoArgumentsCall extends ElixirMatchedEx
@Nullable
ElixirDoBlock getDoBlock();
+ @Nullable
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -29,4 +33,7 @@ public interface ElixirMatchedUnqualifiedNoArgumentsCall extends ElixirMatchedEx
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoParenthesesCall.java
index 139459a5f..2ebb82920 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedNoParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -23,6 +24,9 @@ public interface ElixirMatchedUnqualifiedNoParenthesesCall extends ElixirMatched
@Nullable
ElixirDoBlock getDoBlock();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -32,4 +36,7 @@ public interface ElixirMatchedUnqualifiedNoParenthesesCall extends ElixirMatched
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedParenthesesCall.java
index 50a1884ad..018c2f2f9 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedUnqualifiedParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -23,6 +24,9 @@ public interface ElixirMatchedUnqualifiedParenthesesCall extends ElixirMatchedEx
@Nullable
ElixirDoBlock getDoBlock();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -32,4 +36,7 @@ public interface ElixirMatchedUnqualifiedParenthesesCall extends ElixirMatchedEx
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirMatchedWhenOperation.java b/gen/org/elixir_lang/psi/ElixirMatchedWhenOperation.java
index 0bcddd659..477956943 100644
--- a/gen/org/elixir_lang/psi/ElixirMatchedWhenOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirMatchedWhenOperation.java
@@ -14,7 +14,16 @@ public interface ElixirMatchedWhenOperation extends ElixirMatchedExpression, Inf
@NotNull
ElixirWhenInfixOperator getWhenInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirNoParenthesesManyArguments.java b/gen/org/elixir_lang/psi/ElixirNoParenthesesManyArguments.java
index c432fa73e..0664c5c84 100644
--- a/gen/org/elixir_lang/psi/ElixirNoParenthesesManyArguments.java
+++ b/gen/org/elixir_lang/psi/ElixirNoParenthesesManyArguments.java
@@ -2,10 +2,11 @@
package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangObject;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public interface ElixirNoParenthesesManyArguments extends QuotableArguments {
+public interface ElixirNoParenthesesManyArguments extends Arguments, QuotableArguments {
@Nullable
ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments getNoParenthesesManyPositionalAndMaybeKeywordsArguments();
@@ -13,6 +14,9 @@ public interface ElixirNoParenthesesManyArguments extends QuotableArguments {
@Nullable
ElixirNoParenthesesOnePositionalAndKeywordsArguments getNoParenthesesOnePositionalAndKeywordsArguments();
+ @NotNull
+ PsiElement[] arguments();
+
@NotNull
OtpErlangObject[] quoteArguments();
diff --git a/gen/org/elixir_lang/psi/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments.java b/gen/org/elixir_lang/psi/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments.java
index 2569911e0..36577134c 100644
--- a/gen/org/elixir_lang/psi/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments.java
+++ b/gen/org/elixir_lang/psi/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments.java
@@ -2,12 +2,13 @@
package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangObject;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
-public interface ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments extends QuotableArguments {
+public interface ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments extends Arguments, QuotableArguments {
@NotNull
ElixirMatchedExpression getMatchedExpression();
@@ -18,6 +19,9 @@ public interface ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments exte
@Nullable
ElixirNoParenthesesKeywords getNoParenthesesKeywords();
+ @NotNull
+ PsiElement[] arguments();
+
@NotNull
OtpErlangObject[] quoteArguments();
diff --git a/gen/org/elixir_lang/psi/ElixirNoParenthesesOneArgument.java b/gen/org/elixir_lang/psi/ElixirNoParenthesesOneArgument.java
index 583926185..315d3fe3e 100644
--- a/gen/org/elixir_lang/psi/ElixirNoParenthesesOneArgument.java
+++ b/gen/org/elixir_lang/psi/ElixirNoParenthesesOneArgument.java
@@ -8,7 +8,7 @@
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public interface ElixirNoParenthesesOneArgument extends MaybeModuleName, QuotableArguments {
+public interface ElixirNoParenthesesOneArgument extends Arguments, MaybeModuleName, QuotableArguments {
@Nullable
ElixirMatchedExpression getMatchedExpression();
@@ -25,6 +25,9 @@ public interface ElixirNoParenthesesOneArgument extends MaybeModuleName, Quotabl
@Nullable
ElixirUnqualifiedNoParenthesesManyArgumentsCall getUnqualifiedNoParenthesesManyArgumentsCall();
+ @NotNull
+ PsiElement[] arguments();
+
boolean isModuleName();
boolean processDeclarations(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent, PsiElement place);
diff --git a/gen/org/elixir_lang/psi/ElixirNoParenthesesOnePositionalAndKeywordsArguments.java b/gen/org/elixir_lang/psi/ElixirNoParenthesesOnePositionalAndKeywordsArguments.java
index a224d7570..a779a3995 100644
--- a/gen/org/elixir_lang/psi/ElixirNoParenthesesOnePositionalAndKeywordsArguments.java
+++ b/gen/org/elixir_lang/psi/ElixirNoParenthesesOnePositionalAndKeywordsArguments.java
@@ -2,9 +2,10 @@
package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangObject;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
-public interface ElixirNoParenthesesOnePositionalAndKeywordsArguments extends QuotableArguments {
+public interface ElixirNoParenthesesOnePositionalAndKeywordsArguments extends Arguments, QuotableArguments {
@NotNull
ElixirNoParenthesesFirstPositional getNoParenthesesFirstPositional();
@@ -12,6 +13,9 @@ public interface ElixirNoParenthesesOnePositionalAndKeywordsArguments extends Qu
@NotNull
ElixirNoParenthesesKeywords getNoParenthesesKeywords();
+ @NotNull
+ PsiElement[] arguments();
+
@NotNull
OtpErlangObject[] quoteArguments();
diff --git a/gen/org/elixir_lang/psi/ElixirNoParenthesesStrict.java b/gen/org/elixir_lang/psi/ElixirNoParenthesesStrict.java
index 859c4f132..d924401e1 100644
--- a/gen/org/elixir_lang/psi/ElixirNoParenthesesStrict.java
+++ b/gen/org/elixir_lang/psi/ElixirNoParenthesesStrict.java
@@ -2,10 +2,11 @@
package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangObject;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public interface ElixirNoParenthesesStrict extends QuotableArguments {
+public interface ElixirNoParenthesesStrict extends Arguments, QuotableArguments {
@Nullable
ElixirEmptyParentheses getEmptyParentheses();
@@ -16,6 +17,9 @@ public interface ElixirNoParenthesesStrict extends QuotableArguments {
@Nullable
ElixirNoParenthesesManyArguments getNoParenthesesManyArguments();
+ @NotNull
+ PsiElement[] arguments();
+
@NotNull
OtpErlangObject[] quoteArguments();
diff --git a/gen/org/elixir_lang/psi/ElixirParenthesesArguments.java b/gen/org/elixir_lang/psi/ElixirParenthesesArguments.java
index 817f40e36..865544864 100644
--- a/gen/org/elixir_lang/psi/ElixirParenthesesArguments.java
+++ b/gen/org/elixir_lang/psi/ElixirParenthesesArguments.java
@@ -2,12 +2,13 @@
package org.elixir_lang.psi;
import com.ericsson.otp.erlang.OtpErlangObject;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
-public interface ElixirParenthesesArguments extends QuotableArguments {
+public interface ElixirParenthesesArguments extends Arguments, QuotableArguments {
@NotNull
List getEmptyParenthesesList();
@@ -21,6 +22,9 @@ public interface ElixirParenthesesArguments extends QuotableArguments {
@Nullable
ElixirUnqualifiedNoParenthesesManyArgumentsCall getUnqualifiedNoParenthesesManyArgumentsCall();
+ @NotNull
+ PsiElement[] arguments();
+
@NotNull
OtpErlangObject[] quoteArguments();
diff --git a/gen/org/elixir_lang/psi/ElixirStringLine.java b/gen/org/elixir_lang/psi/ElixirStringLine.java
index eb3d4dca9..9628a00a2 100644
--- a/gen/org/elixir_lang/psi/ElixirStringLine.java
+++ b/gen/org/elixir_lang/psi/ElixirStringLine.java
@@ -9,7 +9,7 @@
import java.util.List;
-public interface ElixirStringLine extends Atomable, InterpolatedString, Quotable {
+public interface ElixirStringLine extends Atomable, InterpolatedString, Line, Quotable {
@NotNull
ElixirQuoteStringBody getQuoteStringBody();
@@ -23,6 +23,8 @@ public interface ElixirStringLine extends Atomable, InterpolatedString, Quotable
@NotNull
List addHexadecimalEscapeSequenceCodePoints(List codePointList, ASTNode child);
+ Body getBody();
+
IElementType getFragmentType();
@NotNull
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedAdditionOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedAdditionOperation.java
index dc6431d6a..7c191cddc 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedAdditionOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedAdditionOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedAdditionOperation extends ElixirUnmatchedExpress
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedAndOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedAndOperation.java
index 43765ab0c..262fef662 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedAndOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedAndOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedAndOperation extends ElixirUnmatchedExpression,
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedArrowOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedArrowOperation.java
index ad7d4f42d..5d87802f8 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedArrowOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedArrowOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedArrowOperation extends ElixirUnmatchedExpression
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedAtUnqualifiedNoParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedAtUnqualifiedNoParenthesesCall.java
index 431c7efd4..3cf8b7d45 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedAtUnqualifiedNoParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedAtUnqualifiedNoParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -26,6 +27,9 @@ public interface ElixirUnmatchedAtUnqualifiedNoParenthesesCall extends ElixirUnm
@Nullable
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -35,4 +39,7 @@ public interface ElixirUnmatchedAtUnqualifiedNoParenthesesCall extends ElixirUnm
@Nullable
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedComparisonOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedComparisonOperation.java
index 7d040054f..8f7acc553 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedComparisonOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedComparisonOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedComparisonOperation extends ElixirUnmatchedExpre
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedDotCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedDotCall.java
index 337739024..88fd61605 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedDotCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedDotCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,6 +32,9 @@ public interface ElixirUnmatchedDotCall extends ElixirUnmatchedExpression, DotCa
@Nullable
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -40,4 +44,7 @@ public interface ElixirUnmatchedDotCall extends ElixirUnmatchedExpression, DotCa
@Nullable
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedInMatchOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedInMatchOperation.java
index 609fbc441..a2db93515 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedInMatchOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedInMatchOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedInMatchOperation extends ElixirUnmatchedExpressi
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedInOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedInOperation.java
index d11a328b8..91677f271 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedInOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedInOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedInOperation extends ElixirUnmatchedExpression, I
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedMatchOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedMatchOperation.java
index 939ccdbaa..0d0de733e 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedMatchOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedMatchOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedMatchOperation extends ElixirUnmatchedExpression
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedMultiplicationOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedMultiplicationOperation.java
index de0502e17..dd08a1df0 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedMultiplicationOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedMultiplicationOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedMultiplicationOperation extends ElixirUnmatchedE
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedOrOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedOrOperation.java
index 15a6ae133..984ff8af5 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedOrOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedOrOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedOrOperation extends ElixirUnmatchedExpression, I
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedPipeOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedPipeOperation.java
index eb1b417cf..b2d339c50 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedPipeOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedPipeOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedPipeOperation extends ElixirUnmatchedExpression,
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoArgumentsCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoArgumentsCall.java
index 1c117a579..3238367f8 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoArgumentsCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoArgumentsCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -28,6 +29,9 @@ public interface ElixirUnmatchedQualifiedNoArgumentsCall extends ElixirUnmatched
@NotNull
String moduleName();
+ @Nullable
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -37,4 +41,7 @@ public interface ElixirUnmatchedQualifiedNoArgumentsCall extends ElixirUnmatched
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoParenthesesCall.java
index d22b7690c..311bd7209 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedNoParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,6 +32,9 @@ public interface ElixirUnmatchedQualifiedNoParenthesesCall extends ElixirUnmatch
@NotNull
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -40,4 +44,7 @@ public interface ElixirUnmatchedQualifiedNoParenthesesCall extends ElixirUnmatch
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedParenthesesCall.java
index 40b3adbe2..6c1a7ed8a 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedQualifiedParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -31,6 +32,9 @@ public interface ElixirUnmatchedQualifiedParenthesesCall extends ElixirUnmatched
@NotNull
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -40,4 +44,7 @@ public interface ElixirUnmatchedQualifiedParenthesesCall extends ElixirUnmatched
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedRelationalOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedRelationalOperation.java
index 0e47dc753..daf4bade7 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedRelationalOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedRelationalOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedRelationalOperation extends ElixirUnmatchedExpre
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedTwoOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedTwoOperation.java
index a86772772..43f980c00 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedTwoOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedTwoOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedTwoOperation extends ElixirUnmatchedExpression,
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedTypeOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedTypeOperation.java
index 325786a13..c7446cb24 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedTypeOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedTypeOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedTypeOperation extends ElixirUnmatchedExpression,
@NotNull
List getUnmatchedExpressionList();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoArgumentsCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoArgumentsCall.java
index a95d2562d..4de3fe3ba 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoArgumentsCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoArgumentsCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -20,6 +21,9 @@ public interface ElixirUnmatchedUnqualifiedNoArgumentsCall extends ElixirUnmatch
@Nullable
String moduleName();
+ @Nullable
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -29,4 +33,7 @@ public interface ElixirUnmatchedUnqualifiedNoArgumentsCall extends ElixirUnmatch
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoParenthesesCall.java
index 8ed39ebba..9f8e5bbf5 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedNoParenthesesCall.java
@@ -28,6 +28,9 @@ public interface ElixirUnmatchedUnqualifiedNoParenthesesCall extends ElixirUnmat
boolean isDefmodule();
+ @NotNull
+ PsiElement[] primaryArguments();
+
boolean processDeclarations(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent, PsiElement place);
@NotNull
@@ -39,4 +42,7 @@ public interface ElixirUnmatchedUnqualifiedNoParenthesesCall extends ElixirUnmat
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedParenthesesCall.java b/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedParenthesesCall.java
index d925fdb92..b467e0a17 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedParenthesesCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedUnqualifiedParenthesesCall.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -23,6 +24,9 @@ public interface ElixirUnmatchedUnqualifiedParenthesesCall extends ElixirUnmatch
@Nullable
String moduleName();
+ @NotNull
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -32,4 +36,7 @@ public interface ElixirUnmatchedUnqualifiedParenthesesCall extends ElixirUnmatch
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnmatchedWhenOperation.java b/gen/org/elixir_lang/psi/ElixirUnmatchedWhenOperation.java
index f3eae3e34..1e8412e18 100644
--- a/gen/org/elixir_lang/psi/ElixirUnmatchedWhenOperation.java
+++ b/gen/org/elixir_lang/psi/ElixirUnmatchedWhenOperation.java
@@ -14,7 +14,16 @@ public interface ElixirUnmatchedWhenOperation extends ElixirUnmatchedExpression,
@NotNull
ElixirWhenInfixOperator getWhenInfixOperator();
+ @NotNull
+ Quotable leftOperand();
+
+ @NotNull
+ Operator operator();
+
@NotNull
OtpErlangObject quote();
+ @NotNull
+ Quotable rightOperand();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirUnqualifiedNoParenthesesManyArgumentsCall.java b/gen/org/elixir_lang/psi/ElixirUnqualifiedNoParenthesesManyArgumentsCall.java
index 2f7bf2790..7d7f27623 100644
--- a/gen/org/elixir_lang/psi/ElixirUnqualifiedNoParenthesesManyArgumentsCall.java
+++ b/gen/org/elixir_lang/psi/ElixirUnqualifiedNoParenthesesManyArgumentsCall.java
@@ -5,11 +5,12 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.NoParentheses;
import org.elixir_lang.psi.qualification.Unqualified;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
-public interface ElixirUnqualifiedNoParenthesesManyArgumentsCall extends PsiElement, Call, Unqualified, Quotable, QuotableArguments {
+public interface ElixirUnqualifiedNoParenthesesManyArgumentsCall extends PsiElement, Call, NoParentheses, Unqualified, Quotable, QuotableArguments {
@Nullable
ElixirNoParenthesesManyArguments getNoParenthesesManyArguments();
@@ -38,6 +39,9 @@ public interface ElixirUnqualifiedNoParenthesesManyArgumentsCall extends PsiElem
@NotNull
Quotable getIdentifier();
+ @Nullable
+ PsiElement[] primaryArguments();
+
@NotNull
OtpErlangObject quote();
@@ -52,4 +56,7 @@ public interface ElixirUnqualifiedNoParenthesesManyArgumentsCall extends PsiElem
@NotNull
String resolvedModuleName();
+ @Nullable
+ PsiElement[] secondaryArguments();
+
}
diff --git a/gen/org/elixir_lang/psi/ElixirVisitor.java b/gen/org/elixir_lang/psi/ElixirVisitor.java
index 5d05a2683..bdfac26b5 100644
--- a/gen/org/elixir_lang/psi/ElixirVisitor.java
+++ b/gen/org/elixir_lang/psi/ElixirVisitor.java
@@ -111,6 +111,7 @@ public void visitCharListHeredocLine(@NotNull ElixirCharListHeredocLine o) {
public void visitCharListLine(@NotNull ElixirCharListLine o) {
visitAtomable(o);
// visitInterpolatedCharList(o);
+ // visitLine(o);
// visitQuotable(o);
}
@@ -628,7 +629,8 @@ public void visitNoParenthesesKeywords(@NotNull ElixirNoParenthesesKeywords o) {
}
public void visitNoParenthesesManyArguments(@NotNull ElixirNoParenthesesManyArguments o) {
- visitQuotableArguments(o);
+ visitArguments(o);
+ // visitQuotableArguments(o);
}
public void visitNoParenthesesManyArgumentsUnqualifiedIdentifier(@NotNull ElixirNoParenthesesManyArgumentsUnqualifiedIdentifier o) {
@@ -636,7 +638,8 @@ public void visitNoParenthesesManyArgumentsUnqualifiedIdentifier(@NotNull Elixir
}
public void visitNoParenthesesManyPositionalAndMaybeKeywordsArguments(@NotNull ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments o) {
- visitQuotableArguments(o);
+ visitArguments(o);
+ // visitQuotableArguments(o);
}
public void visitNoParenthesesManyStrictNoParenthesesExpression(@NotNull ElixirNoParenthesesManyStrictNoParenthesesExpression o) {
@@ -644,16 +647,19 @@ public void visitNoParenthesesManyStrictNoParenthesesExpression(@NotNull ElixirN
}
public void visitNoParenthesesOneArgument(@NotNull ElixirNoParenthesesOneArgument o) {
- visitMaybeModuleName(o);
+ visitArguments(o);
+ // visitMaybeModuleName(o);
// visitQuotableArguments(o);
}
public void visitNoParenthesesOnePositionalAndKeywordsArguments(@NotNull ElixirNoParenthesesOnePositionalAndKeywordsArguments o) {
- visitQuotableArguments(o);
+ visitArguments(o);
+ // visitQuotableArguments(o);
}
public void visitNoParenthesesStrict(@NotNull ElixirNoParenthesesStrict o) {
- visitQuotableArguments(o);
+ visitArguments(o);
+ // visitQuotableArguments(o);
}
public void visitOctalDigits(@NotNull ElixirOctalDigits o) {
@@ -673,7 +679,8 @@ public void visitOrInfixOperator(@NotNull ElixirOrInfixOperator o) {
}
public void visitParenthesesArguments(@NotNull ElixirParenthesesArguments o) {
- visitQuotableArguments(o);
+ visitArguments(o);
+ // visitQuotableArguments(o);
}
public void visitParentheticalStab(@NotNull ElixirParentheticalStab o) {
@@ -748,6 +755,7 @@ public void visitStringHeredocLine(@NotNull ElixirStringHeredocLine o) {
public void visitStringLine(@NotNull ElixirStringLine o) {
visitAtomable(o);
// visitInterpolatedString(o);
+ // visitLine(o);
// visitQuotable(o);
}
@@ -940,6 +948,7 @@ public void visitUnmatchedWhenOperation(@NotNull ElixirUnmatchedWhenOperation o)
public void visitUnqualifiedNoParenthesesManyArgumentsCall(@NotNull ElixirUnqualifiedNoParenthesesManyArgumentsCall o) {
visitPsiElement(o);
// visitCall(o);
+ // visitNoParentheses(o);
// visitUnqualified(o);
// visitQuotable(o);
// visitQuotableArguments(o);
@@ -953,6 +962,10 @@ public void visitWhenInfixOperator(@NotNull ElixirWhenInfixOperator o) {
visitOperator(o);
}
+ public void visitArguments(@NotNull Arguments o) {
+ visitElement(o);
+ }
+
public void visitAssociationOperation(@NotNull AssociationOperation o) {
visitElement(o);
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirCharListLineImpl.java b/gen/org/elixir_lang/psi/impl/ElixirCharListLineImpl.java
index 9992a0ca4..035032063 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirCharListLineImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirCharListLineImpl.java
@@ -7,6 +7,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.tree.IElementType;
+import org.elixir_lang.psi.Body;
import org.elixir_lang.psi.ElixirCharListLine;
import org.elixir_lang.psi.ElixirQuoteCharListBody;
import org.elixir_lang.psi.ElixirVisitor;
@@ -46,6 +47,11 @@ public List addHexadecimalEscapeSequenceCodePoints(List codePo
return ElixirPsiImplUtil.addHexadecimalEscapeSequenceCodePoints(this, codePointList, child);
}
+ @NotNull
+ public Body getBody() {
+ return ElixirPsiImplUtil.getBody(this);
+ }
+
public IElementType getFragmentType() {
return ElixirPsiImplUtil.getFragmentType(this);
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirContainerAssociationOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirContainerAssociationOperationImpl.java
index 882e7aeba..617f1e8d7 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirContainerAssociationOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirContainerAssociationOperationImpl.java
@@ -6,10 +6,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirContainerAssociationOperation;
-import org.elixir_lang.psi.ElixirEmptyParentheses;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -37,9 +34,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMapConstructionArgumentsImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMapConstructionArgumentsImpl.java
index e46adb7df..d43b43e6b 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMapConstructionArgumentsImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMapConstructionArgumentsImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -38,6 +39,11 @@ public ElixirKeywords getKeywords() {
return findChildByClass(ElixirKeywords.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
@NotNull
public OtpErlangObject[] quoteArguments() {
return ElixirPsiImplUtil.quoteArguments(this);
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedAdditionOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedAdditionOperationImpl.java
index 60124e4ba..de8ec39d3 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedAdditionOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedAdditionOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirAdditionInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedAdditionOperation;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedAndOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedAndOperationImpl.java
index 2945e3266..709499c99 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedAndOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedAndOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirAndInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedAndOperation;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedArrowOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedArrowOperationImpl.java
index 37e39ba0e..8e7149042 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedArrowOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedArrowOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirArrowInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedArrowOperation;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedAtUnqualifiedNoParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedAtUnqualifiedNoParenthesesCallImpl.java
index a59e67dd3..c542684b3 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedAtUnqualifiedNoParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedAtUnqualifiedNoParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -51,6 +52,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -66,4 +72,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedComparisonOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedComparisonOperationImpl.java
index 8106fb41d..18c49744d 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedComparisonOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedComparisonOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirComparisonInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedComparisonOperation;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedDotCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedDotCallImpl.java
index 1051f4cb4..9dfd614ea 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedDotCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedDotCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import org.elixir_lang.psi.*;
@@ -60,6 +61,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -75,4 +81,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedInMatchOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedInMatchOperationImpl.java
index e517524fc..dc2accf6f 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedInMatchOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedInMatchOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirInMatchInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedInMatchOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedInOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedInOperationImpl.java
index dc4f67ff9..705c8658a 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedInOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedInOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirInInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedInOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedMatchOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedMatchOperationImpl.java
index fad8daa96..c7d4257f7 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedMatchOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedMatchOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchInfixOperator;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedMatchOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getMatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirMatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedMultiplicationOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedMultiplicationOperationImpl.java
index 5aa0e7706..00b3aa80f 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedMultiplicationOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedMultiplicationOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedMultiplicationOperation;
-import org.elixir_lang.psi.ElixirMultiplicationInfixOperator;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirMultiplicationInfixOperator getMultiplicationInfixOperator() {
return findNotNullChildByClass(ElixirMultiplicationInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedOrOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedOrOperationImpl.java
index b51757529..c0ef9bbd2 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedOrOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedOrOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedOrOperation;
-import org.elixir_lang.psi.ElixirOrInfixOperator;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirOrInfixOperator getOrInfixOperator() {
return findNotNullChildByClass(ElixirOrInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedPipeOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedPipeOperationImpl.java
index 65989c8a1..385f7ce62 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedPipeOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedPipeOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedPipeOperation;
-import org.elixir_lang.psi.ElixirPipeInfixOperator;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirPipeInfixOperator getPipeInfixOperator() {
return findNotNullChildByClass(ElixirPipeInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoArgumentsCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoArgumentsCallImpl.java
index c37662969..d1a1a402c 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoArgumentsCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoArgumentsCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -56,6 +57,11 @@ public ElixirDoBlock getDoBlock() {
return ElixirPsiImplUtil.getDoBlock(this);
}
+ @Nullable
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -71,4 +77,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoParenthesesCallImpl.java
index 3479131ae..2384305b5 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedNoParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -43,6 +44,11 @@ public ElixirRelativeIdentifier getRelativeIdentifier() {
return findNotNullChildByClass(ElixirRelativeIdentifier.class);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@Nullable
public String functionName() {
return ElixirPsiImplUtil.functionName(this);
@@ -77,4 +83,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedParenthesesCallImpl.java
index df47139ea..2406f7636 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedQualifiedParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -62,6 +63,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -77,4 +83,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedRelationalOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedRelationalOperationImpl.java
index a4c5afa2a..66c4f6fd2 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedRelationalOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedRelationalOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedRelationalOperation;
-import org.elixir_lang.psi.ElixirRelationalInfixOperator;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirRelationalInfixOperator getRelationalInfixOperator() {
return findNotNullChildByClass(ElixirRelationalInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedTwoOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedTwoOperationImpl.java
index a2994c02d..1f4c9ca24 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedTwoOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedTwoOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedTwoOperation;
-import org.elixir_lang.psi.ElixirTwoInfixOperator;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirTwoInfixOperator getTwoInfixOperator() {
return findNotNullChildByClass(ElixirTwoInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedTypeOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedTypeOperationImpl.java
index 8e31277f1..8bbf172cd 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedTypeOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedTypeOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedTypeOperation;
-import org.elixir_lang.psi.ElixirTypeInfixOperator;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirTypeInfixOperator getTypeInfixOperator() {
return findNotNullChildByClass(ElixirTypeInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoArgumentsCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoArgumentsCallImpl.java
index 83c9bfbeb..8469ab1a2 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoArgumentsCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoArgumentsCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirDoBlock;
import org.elixir_lang.psi.ElixirMatchedUnqualifiedNoArgumentsCall;
@@ -41,6 +42,11 @@ public ElixirDoBlock getDoBlock() {
return ElixirPsiImplUtil.getDoBlock(this);
}
+ @Nullable
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -56,4 +62,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoParenthesesCallImpl.java
index 4775ab7e4..a8262d158 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedNoParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirDoBlock;
import org.elixir_lang.psi.ElixirMatchedUnqualifiedNoParenthesesCall;
@@ -48,6 +49,11 @@ public ElixirDoBlock getDoBlock() {
return ElixirPsiImplUtil.getDoBlock(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -63,4 +69,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedParenthesesCallImpl.java
index e6f21d82a..1b4db1f50 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedUnqualifiedParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirDoBlock;
import org.elixir_lang.psi.ElixirMatchedParenthesesArguments;
@@ -48,6 +49,11 @@ public ElixirDoBlock getDoBlock() {
return ElixirPsiImplUtil.getDoBlock(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -63,4 +69,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirMatchedWhenOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirMatchedWhenOperationImpl.java
index e2b6b9748..56707ab55 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirMatchedWhenOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirMatchedWhenOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchedExpression;
-import org.elixir_lang.psi.ElixirMatchedWhenOperation;
-import org.elixir_lang.psi.ElixirVisitor;
-import org.elixir_lang.psi.ElixirWhenInfixOperator;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirWhenInfixOperator getWhenInfixOperator() {
return findNotNullChildByClass(ElixirWhenInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyArgumentsImpl.java b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyArgumentsImpl.java
index 8c42c50a1..680857519 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyArgumentsImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyArgumentsImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirNoParenthesesManyArguments;
import org.elixir_lang.psi.ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments;
@@ -35,6 +36,11 @@ public ElixirNoParenthesesOnePositionalAndKeywordsArguments getNoParenthesesOneP
return findChildByClass(ElixirNoParenthesesOnePositionalAndKeywordsArguments.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
@NotNull
public OtpErlangObject[] quoteArguments() {
return ElixirPsiImplUtil.quoteArguments(this);
diff --git a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArgumentsImpl.java b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArgumentsImpl.java
index 3e74800ff..6f057dd01 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArgumentsImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesManyPositionalAndMaybeKeywordsArgumentsImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import org.elixir_lang.psi.*;
@@ -41,6 +42,11 @@ public ElixirNoParenthesesKeywords getNoParenthesesKeywords() {
return findChildByClass(ElixirNoParenthesesKeywords.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
@NotNull
public OtpErlangObject[] quoteArguments() {
return ElixirPsiImplUtil.quoteArguments(this);
diff --git a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOneArgumentImpl.java b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOneArgumentImpl.java
index 3930739a7..142bb1828 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOneArgumentImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOneArgumentImpl.java
@@ -53,6 +53,11 @@ public ElixirUnqualifiedNoParenthesesManyArgumentsCall getUnqualifiedNoParenthes
return findChildByClass(ElixirUnqualifiedNoParenthesesManyArgumentsCall.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
public boolean isModuleName() {
return ElixirPsiImplUtil.isModuleName(this);
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOnePositionalAndKeywordsArgumentsImpl.java b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOnePositionalAndKeywordsArgumentsImpl.java
index 604586f7c..8f230c6ca 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOnePositionalAndKeywordsArgumentsImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesOnePositionalAndKeywordsArgumentsImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirNoParenthesesFirstPositional;
import org.elixir_lang.psi.ElixirNoParenthesesKeywords;
@@ -34,6 +35,11 @@ public ElixirNoParenthesesKeywords getNoParenthesesKeywords() {
return findNotNullChildByClass(ElixirNoParenthesesKeywords.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
@NotNull
public OtpErlangObject[] quoteArguments() {
return ElixirPsiImplUtil.quoteArguments(this);
diff --git a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesStrictImpl.java b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesStrictImpl.java
index dc9a60366..3ec0c0048 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesStrictImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirNoParenthesesStrictImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -38,6 +39,11 @@ public ElixirNoParenthesesManyArguments getNoParenthesesManyArguments() {
return findChildByClass(ElixirNoParenthesesManyArguments.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
@NotNull
public OtpErlangObject[] quoteArguments() {
return ElixirPsiImplUtil.quoteArguments(this);
diff --git a/gen/org/elixir_lang/psi/impl/ElixirParenthesesArgumentsImpl.java b/gen/org/elixir_lang/psi/impl/ElixirParenthesesArgumentsImpl.java
index 0973a72a5..6b5ad16fb 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirParenthesesArgumentsImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirParenthesesArgumentsImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import org.elixir_lang.psi.*;
@@ -47,6 +48,11 @@ public ElixirUnqualifiedNoParenthesesManyArgumentsCall getUnqualifiedNoParenthes
return findChildByClass(ElixirUnqualifiedNoParenthesesManyArgumentsCall.class);
}
+ @NotNull
+ public PsiElement[] arguments() {
+ return ElixirPsiImplUtil.arguments(this);
+ }
+
@NotNull
public OtpErlangObject[] quoteArguments() {
return ElixirPsiImplUtil.quoteArguments(this);
diff --git a/gen/org/elixir_lang/psi/impl/ElixirStringLineImpl.java b/gen/org/elixir_lang/psi/impl/ElixirStringLineImpl.java
index 2061fcbd7..625db8ca6 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirStringLineImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirStringLineImpl.java
@@ -7,6 +7,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.tree.IElementType;
+import org.elixir_lang.psi.Body;
import org.elixir_lang.psi.ElixirQuoteStringBody;
import org.elixir_lang.psi.ElixirStringLine;
import org.elixir_lang.psi.ElixirVisitor;
@@ -46,6 +47,10 @@ public List addHexadecimalEscapeSequenceCodePoints(List codePo
return ElixirPsiImplUtil.addHexadecimalEscapeSequenceCodePoints(this, codePointList, child);
}
+ public Body getBody() {
+ return ElixirPsiImplUtil.getBody(this);
+ }
+
public IElementType getFragmentType() {
return ElixirPsiImplUtil.getFragmentType(this);
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAdditionOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAdditionOperationImpl.java
index 24751f0d8..ac3cabf60 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAdditionOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAdditionOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirAdditionInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedAdditionOperation;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAndOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAndOperationImpl.java
index 18230cd17..2f956f05d 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAndOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAndOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirAndInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedAndOperation;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedArrowOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedArrowOperationImpl.java
index c872ba27b..0c7b0b405 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedArrowOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedArrowOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirArrowInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedArrowOperation;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAtUnqualifiedNoParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAtUnqualifiedNoParenthesesCallImpl.java
index bd00ced48..f642e126c 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAtUnqualifiedNoParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedAtUnqualifiedNoParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -52,6 +53,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -67,4 +73,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedComparisonOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedComparisonOperationImpl.java
index 0629f442b..e9f9fe62f 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedComparisonOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedComparisonOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirComparisonInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedComparisonOperation;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedDotCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedDotCallImpl.java
index 8325bb954..6f237a54e 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedDotCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedDotCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
import org.elixir_lang.psi.*;
@@ -61,6 +62,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -76,4 +82,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInMatchOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInMatchOperationImpl.java
index 85728d560..62d1f61e1 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInMatchOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInMatchOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirInMatchInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedInMatchOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInOperationImpl.java
index 6c02ee701..ed85c4054 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedInOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirInInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedInOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMatchOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMatchOperationImpl.java
index 8e363cafe..6a7d38f89 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMatchOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMatchOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMatchInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedMatchOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMultiplicationOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMultiplicationOperationImpl.java
index dc089705b..7554d0d7c 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMultiplicationOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedMultiplicationOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirMultiplicationInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedMultiplicationOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedOrOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedOrOperationImpl.java
index 267e6d363..20fd94025 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedOrOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedOrOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirOrInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedOrOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedPipeOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedPipeOperationImpl.java
index 9b4e0e78c..a19ca68bd 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedPipeOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedPipeOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirPipeInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedPipeOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoArgumentsCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoArgumentsCallImpl.java
index 26ca26845..c5c29c412 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoArgumentsCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoArgumentsCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -57,6 +58,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @Nullable
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -72,4 +78,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoParenthesesCallImpl.java
index cdcc995e4..585e22348 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedNoParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -63,6 +64,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -78,4 +84,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedParenthesesCallImpl.java
index 35bf9bb0a..279185034 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedQualifiedParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -63,6 +64,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -78,4 +84,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedRelationalOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedRelationalOperationImpl.java
index 51820aacb..578b9799c 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedRelationalOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedRelationalOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirRelationalInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedRelationalOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTwoOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTwoOperationImpl.java
index 27fa21f54..fe650c44c 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTwoOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTwoOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirTwoInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedTwoOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTypeOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTypeOperationImpl.java
index 3104646d0..dc06367f5 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTypeOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedTypeOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirTypeInfixOperator;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedTypeOperation;
-import org.elixir_lang.psi.ElixirVisitor;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public List getUnmatchedExpressionList() {
return PsiTreeUtil.getChildrenOfTypeAsList(this, ElixirUnmatchedExpression.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoArgumentsCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoArgumentsCallImpl.java
index b9f84bb14..830b87ceb 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoArgumentsCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoArgumentsCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirDoBlock;
import org.elixir_lang.psi.ElixirUnmatchedUnqualifiedNoArgumentsCall;
@@ -42,6 +43,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @Nullable
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -57,4 +63,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoParenthesesCallImpl.java
index ca1d961db..3c269d109 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedNoParenthesesCallImpl.java
@@ -56,6 +56,11 @@ public boolean isDefmodule() {
return ElixirPsiImplUtil.isDefmodule(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
public boolean processDeclarations(PsiScopeProcessor processor, ResolveState state, PsiElement lastParent, PsiElement place) {
return ElixirPsiImplUtil.processDeclarations(this, processor, state, lastParent, place);
}
@@ -75,4 +80,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedParenthesesCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedParenthesesCallImpl.java
index a711fbe50..5f8af4dcb 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedParenthesesCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedUnqualifiedParenthesesCallImpl.java
@@ -3,6 +3,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.ElixirDoBlock;
import org.elixir_lang.psi.ElixirMatchedParenthesesArguments;
@@ -49,6 +50,11 @@ public String moduleName() {
return ElixirPsiImplUtil.moduleName(this);
}
+ @NotNull
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -64,4 +70,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedWhenOperationImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedWhenOperationImpl.java
index f17e734b4..b12dd881e 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnmatchedWhenOperationImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnmatchedWhenOperationImpl.java
@@ -5,10 +5,7 @@
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElementVisitor;
import com.intellij.psi.util.PsiTreeUtil;
-import org.elixir_lang.psi.ElixirUnmatchedExpression;
-import org.elixir_lang.psi.ElixirUnmatchedWhenOperation;
-import org.elixir_lang.psi.ElixirVisitor;
-import org.elixir_lang.psi.ElixirWhenInfixOperator;
+import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -36,9 +33,24 @@ public ElixirWhenInfixOperator getWhenInfixOperator() {
return findNotNullChildByClass(ElixirWhenInfixOperator.class);
}
+ @NotNull
+ public Quotable leftOperand() {
+ return ElixirPsiImplUtil.leftOperand(this);
+ }
+
+ @NotNull
+ public Operator operator() {
+ return ElixirPsiImplUtil.operator(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
}
+ @NotNull
+ public Quotable rightOperand() {
+ return ElixirPsiImplUtil.rightOperand(this);
+ }
+
}
diff --git a/gen/org/elixir_lang/psi/impl/ElixirUnqualifiedNoParenthesesManyArgumentsCallImpl.java b/gen/org/elixir_lang/psi/impl/ElixirUnqualifiedNoParenthesesManyArgumentsCallImpl.java
index 390f916fe..05ca55f9c 100644
--- a/gen/org/elixir_lang/psi/impl/ElixirUnqualifiedNoParenthesesManyArgumentsCallImpl.java
+++ b/gen/org/elixir_lang/psi/impl/ElixirUnqualifiedNoParenthesesManyArgumentsCallImpl.java
@@ -4,6 +4,7 @@
import com.ericsson.otp.erlang.OtpErlangObject;
import com.intellij.extapi.psi.ASTWrapperPsiElement;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiElementVisitor;
import org.elixir_lang.psi.*;
import org.jetbrains.annotations.NotNull;
@@ -68,6 +69,11 @@ public Quotable getIdentifier() {
return ElixirPsiImplUtil.getIdentifier(this);
}
+ @Nullable
+ public PsiElement[] primaryArguments() {
+ return ElixirPsiImplUtil.primaryArguments(this);
+ }
+
@NotNull
public OtpErlangObject quote() {
return ElixirPsiImplUtil.quote(this);
@@ -92,4 +98,9 @@ public String resolvedModuleName() {
return ElixirPsiImplUtil.resolvedModuleName(this);
}
+ @Nullable
+ public PsiElement[] secondaryArguments() {
+ return ElixirPsiImplUtil.secondaryArguments(this);
+ }
+
}
diff --git a/screenshots/annotator/Module Attribute.png b/screenshots/annotator/Module Attribute.png
new file mode 100644
index 000000000..7600bafab
Binary files /dev/null and b/screenshots/annotator/Module Attribute.png differ
diff --git a/src/META-INF/plugin.xml b/src/META-INF/plugin.xml
index e06a565e6..ce25cdb5e 100644
--- a/src/META-INF/plugin.xml
+++ b/src/META-INF/plugin.xml
@@ -498,6 +498,7 @@
+
diff --git a/src/org/elixir_lang/Elixir.bnf b/src/org/elixir_lang/Elixir.bnf
index 24461e092..c290ec3e4 100644
--- a/src/org/elixir_lang/Elixir.bnf
+++ b/src/org/elixir_lang/Elixir.bnf
@@ -222,21 +222,57 @@ noParenthesesStrict ::= emptyParentheses |
noParenthesesKeywords |
noParenthesesManyArguments
) CLOSING_PARENTHESIS
- { implements = "org.elixir_lang.psi.QuotableArguments" methods = [quoteArguments] }
+ {
+ implements = [
+ "org.elixir_lang.psi.Arguments"
+ "org.elixir_lang.psi.QuotableArguments"
+ ]
+ methods = [
+ arguments
+ quoteArguments
+ ]
+ }
noParenthesesFirstPositional ::= matchedExpression
{ implements = "org.elixir_lang.psi.Quotable" methods = [quote] }
noParenthesesOnePositionalAndKeywordsArguments ::= noParenthesesFirstPositional infixComma noParenthesesKeywords
- { implements = "org.elixir_lang.psi.QuotableArguments" methods = [quoteArguments] }
+ {
+ implements = [
+ "org.elixir_lang.psi.Arguments"
+ "org.elixir_lang.psi.QuotableArguments"
+ ]
+ methods = [
+ arguments
+ quoteArguments
+ ]
+ }
noParenthesesManyPositionalAndMaybeKeywordsArguments ::= noParenthesesCommaExpression (infixComma noParenthesesKeywords)?
- { implements = "org.elixir_lang.psi.QuotableArguments" methods = [quoteArguments] }
+ {
+ implements = [
+ "org.elixir_lang.psi.Arguments"
+ "org.elixir_lang.psi.QuotableArguments"
+ ]
+ methods = [
+ arguments
+ quoteArguments
+ ]
+ }
/* 1. (positional, keywords)
2. (positional, positional)
3. (positional, positional, keywords) */
noParenthesesManyArguments ::= noParenthesesOnePositionalAndKeywordsArguments |
noParenthesesManyPositionalAndMaybeKeywordsArguments
- { implements = "org.elixir_lang.psi.QuotableArguments" methods = [quoteArguments] }
+ {
+ implements = [
+ "org.elixir_lang.psi.Arguments"
+ "org.elixir_lang.psi.QuotableArguments"
+ ]
+ methods = [
+ arguments
+ quoteArguments
+ ]
+ }
private noParenthesesManyArgumentsStrict ::= noParenthesesManyArguments |
noParenthesesStrict
@@ -251,6 +287,7 @@ unqualifiedNoParenthesesManyArgumentsCall ::= noParenthesesManyArgumentsUnqualif
// MUST be first so visitElement is used in ElixirVisitor
"com.intellij.psi.PsiElement"
"org.elixir_lang.psi.call.Call"
+ "org.elixir_lang.psi.call.arguments.NoParentheses"
"org.elixir_lang.psi.qualification.Unqualified"
"org.elixir_lang.psi.Quotable"
"org.elixir_lang.psi.QuotableArguments"
@@ -262,11 +299,13 @@ unqualifiedNoParenthesesManyArgumentsCall ::= noParenthesesManyArgumentsUnqualif
getArguments
getDoBlock
getIdentifier
+ primaryArguments
quote
quoteArguments
quoteIdentifier
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -685,7 +724,7 @@ literalSigilHeredocLine ::= heredocLinePrefix literalSigilBody EOL
// literals can have escape sequences for escaped terminator
literalSigilBody ::= (SIGIL_FRAGMENT | sigilEscapeSequence)*
{ implements = "org.elixir_lang.psi.Body" }
-
+
literalStringSigilHeredoc ::= TILDE LITERAL_STRING_SIGIL_NAME STRING_SIGIL_HEREDOC_PROMOTER EOL
literalStringHeredocLine*
heredocPrefix STRING_SIGIL_HEREDOC_TERMINATOR sigilModifiers
@@ -721,7 +760,7 @@ literalStringHeredocLine ::= heredocLinePrefix literalStringBody EOL
// literals can have escape sequences for escaped terminator
literalStringBody ::= (STRING_FRAGMENT | sigilEscapeSequence)*
{ implements = "org.elixir_lang.psi.Body" }
-
+
literalWordsHeredoc ::= TILDE LITERAL_WORDS_SIGIL_NAME WORDS_HEREDOC_PROMOTER EOL
literalWordsHeredocLine*
heredocPrefix WORDS_HEREDOC_TERMINATOR sigilModifiers
@@ -780,12 +819,14 @@ charListLine ::= CHAR_LIST_PROMOTER quoteCharListBody CHAR_LIST_TERMINATOR
implements = [
"org.elixir_lang.psi.Atomable"
"org.elixir_lang.psi.InterpolatedCharList"
+ "org.elixir_lang.psi.Line"
"org.elixir_lang.psi.Quotable"
]
methods = [
addEscapedCharacterCodePoints
addFragmentCodePoints
addHexadecimalEscapeSequenceCodePoints
+ getBody
getFragmentType
quote
quoteAsAtom
@@ -802,12 +843,14 @@ stringLine ::= STRING_PROMOTER quoteStringBody STRING_TERMINATOR
implements = [
"org.elixir_lang.psi.Atomable"
"org.elixir_lang.psi.InterpolatedString"
+ "org.elixir_lang.psi.Line"
"org.elixir_lang.psi.Quotable"
]
methods = [
addEscapedCharacterCodePoints
addFragmentCodePoints
addHexadecimalEscapeSequenceCodePoints
+ getBody
getFragmentType
quote
quoteAsAtom
@@ -1120,7 +1163,15 @@ inMatchInfixOperator ::= EOL* IN_MATCH_OPERATOR EOL*
name = "<-, \\\\"
}
matchedInMatchOperation ::= matchedExpression inMatchInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* When Operation - right-associative
@@ -1146,7 +1197,16 @@ whenInfixOperator ::= EOL* WHEN_OPERATOR EOL*
matchedWhenNoParenthesesKeywordsOperation ::= matchedExpression whenInfixOperator noParenthesesKeywords
{ elementType = matchedWhenOperation rightAssociative = true }
matchedWhenOperation ::= matchedExpression whenInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Type Operation - right-associative
@@ -1164,7 +1224,16 @@ typeInfixOperator ::= EOL* TYPE_OPERATOR EOL*
name = "::"
}
matchedTypeOperation ::= matchedExpression typeInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Pipe Operation - right-associative
@@ -1182,7 +1251,16 @@ pipeInfixOperator ::= EOL* PIPE_OPERATOR EOL*
name = "|"
}
matchedPipeOperation ::= matchedExpression pipeInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Match Operation - right-associative
@@ -1200,7 +1278,16 @@ matchInfixOperator ::= EOL* MATCH_OPERATOR EOL*
name = "="
}
matchedMatchOperation ::= matchedExpression matchInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Or Operation - left-associative
@@ -1218,7 +1305,15 @@ orInfixOperator ::= EOL* OR_OPERATOR EOL*
name = "||, |||, or"
}
matchedOrOperation ::= matchedExpression orInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* And Operation - left-associative
@@ -1235,7 +1330,15 @@ andInfixOperator ::= EOL* AND_OPERATOR EOL*
name = "&&, &&&, and"
}
matchedAndOperation ::= matchedExpression andInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Comparison Operation - left-associative
@@ -1253,7 +1356,15 @@ comparisonInfixOperator ::= EOL* COMPARISON_OPERATOR EOL*
name = "!=, ==, =~, !==, ==="
}
matchedComparisonOperation ::= matchedExpression comparisonInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Relational Operation - left-associative
@@ -1271,7 +1382,15 @@ relationalInfixOperator ::= EOL* RELATIONAL_OPERATOR EOL*
name = "<, >, <=, >="
}
matchedRelationalOperation ::= matchedExpression relationalInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Arrow Operation - left-associative
@@ -1289,7 +1408,15 @@ arrowInfixOperator ::= EOL* ARROW_OPERATOR EOL*
name = "<~, |>, ~>, <<<, <<~, <|>, <~>, >>>, ~>>, ^^^"
}
matchedArrowOperation ::= matchedExpression arrowInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* In Operation - left-associative
@@ -1307,7 +1434,15 @@ inInfixOperator ::= EOL* IN_OPERATOR EOL*
name = "in"
}
matchedInOperation ::= matchedExpression inInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Two Operation - right-associative
@@ -1325,7 +1460,16 @@ twoInfixOperator ::= EOL* TWO_OPERATOR EOL*
name = "++, --, .., <>"
}
matchedTwoOperation ::= matchedExpression twoInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Addition Operation - left-associative
@@ -1350,7 +1494,15 @@ additionInfixOperator ::= (SIGNIFICANT_WHITE_SPACE DUAL_OPERATOR (SIGNIFICANT_WH
name = "+, -"
}
matchedAdditionOperation ::= matchedExpression additionInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
@@ -1370,7 +1522,15 @@ multiplicationInfixOperator ::= EOL* MULTIPLICATION_OPERATOR EOL*
name = "*, /"
}
matchedMultiplicationOperation ::= matchedExpression multiplicationInfixOperator matchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Unary Non-Numeric Operation - non-associative
@@ -1456,7 +1616,16 @@ parenthesesArguments ::= OPENING_PARENTHESIS EOL*
keywords | // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L486
parenthesesPositionalArguments (infixComma keywords)?)? EOL* // @see https://github.com/elixir-lang/elixir/blob/39b6789a8625071e149f0a7347ca7a2111f7c8f2/lib/elixir/src/elixir_parser.yrl#L487-L488
CLOSING_PARENTHESIS
- { implements = "org.elixir_lang.psi.QuotableArguments" methods = [quoteArguments] }
+ {
+ implements = [
+ "org.elixir_lang.psi.Arguments"
+ "org.elixir_lang.psi.QuotableArguments"
+ ]
+ methods = [
+ arguments
+ quoteArguments
+ ]
+ }
// call_args_no_parens_one
noParenthesesOneArgument ::= noParenthesesKeywords | // @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L417
@@ -1478,10 +1647,12 @@ noParenthesesOneArgument ::= noParenthesesKeywords | // @see https://github.com/
!additionTail matchedExpression
{
implements = [
+ "org.elixir_lang.psi.Arguments"
"org.elixir_lang.psi.MaybeModuleName"
"org.elixir_lang.psi.QuotableArguments"
]
methods = [
+ arguments
isModuleName
processDeclarations
quoteArguments
@@ -1520,9 +1691,11 @@ matchedDotCall ::= matchedExpression dotInfixOperator parenthesesArguments paren
functionNameNode
getDoBlock
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1539,6 +1712,7 @@ matchedQualifiedNoParenthesesCall ::= matchedExpression dotInfixOperator relativ
"org.elixir_lang.psi.QualifiedNoParenthesesCall"
]
methods = [
+ primaryArguments
functionName
functionNameNode
getDoBlock
@@ -1546,6 +1720,7 @@ matchedQualifiedNoParenthesesCall ::= matchedExpression dotInfixOperator relativ
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1568,9 +1743,11 @@ matchedAtUnqualifiedNoParenthesesCall ::= atPrefixOperator IDENTIFIER noParenthe
functionNameNode
getDoBlock
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1591,9 +1768,11 @@ matchedUnqualifiedNoParenthesesCall ::= IDENTIFIER noParenthesesOneArgument
functionNameNode
moduleName
getDoBlock
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1665,9 +1844,11 @@ matchedQualifiedParenthesesCall ::= matchedExpression dotInfixOperator relativeI
functionNameNode
getDoBlock
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1686,9 +1867,11 @@ matchedQualifiedNoArgumentsCall ::= matchedExpression dotInfixOperator relativeI
functionNameNode
moduleName
getDoBlock
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1718,9 +1901,11 @@ matchedUnqualifiedParenthesesCall ::= IDENTIFIER matchedParenthesesArguments
functionNameNode
moduleName
getDoBlock
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
/*
@@ -1769,9 +1954,11 @@ matchedUnqualifiedNoArgumentsCall ::= IDENTIFIER !KEYWORD_PAIR_COLON
functionNameNode
moduleName
getDoBlock
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -1820,7 +2007,15 @@ private associationInfixOperator ::= EOL* ASSOCIATION_OPERATOR EOL*
// @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L505
containerAssociationOperation ::= containerExpression associationInfixOperator containerExpression
- { implements = "org.elixir_lang.psi.AssociationOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.AssociationOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
left maxDotCall ::= dotInfixOperator parenthesesArguments parenthesesArguments?
{ elementType = matchedDotCall }
@@ -1901,7 +2096,13 @@ mapUpdateArguments ::= matchedMatchOperation pipeInfixOperator mapTailArguments
{ implements = "org.elixir_lang.psi.Quotable" methods = [quote] }
mapConstructionArguments ::= mapTailArguments
- { implements = "org.elixir_lang.psi.QuotableArguments" methods = [quoteArguments] }
+ {
+ implements = "org.elixir_lang.psi.QuotableArguments"
+ methods = [
+ arguments
+ quoteArguments
+ ]
+ }
mapArguments ::= OPENING_CURLY EOL*
(
@@ -1942,7 +2143,13 @@ stabNoParenthesesSignature ::= noParenthesesArguments
* @see https://github.com/elixir-lang/elixir/blob/de39bbaca277002797e52ffbde617ace06233a2b/lib/elixir/src/elixir_parser.yrl#L430-L432
*/
stabParenthesesSignature ::= parenthesesArguments (whenInfixOperator expression)?
- { implements = "org.elixir_lang.psi.Quotable" methods = [quote] }
+ {
+ implements = [
+ "org.elixir_lang.psi.Quotable"
+ "org.elixir_lang.psi.WhenOperation"
+ ]
+ methods = [quote]
+ }
stabInfixOperator ::= EOL* STAB_OPERATOR EOL*
{
@@ -2107,7 +2314,15 @@ unmatchedCaptureNonNumericOperation ::= capturePrefixOperator !numeric unmatched
*/
unmatchedInMatchOperation ::= unmatchedExpression inMatchInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* When Operation - right-associative
@@ -2124,7 +2339,16 @@ unmatchedInMatchOperation ::= unmatchedExpression inMatchInfixOperator unmatched
unmatchedWhenNoParenthesesKeywordsOperation ::= unmatchedExpression whenInfixOperator noParenthesesKeywords
{ elementType = unmatchedWhenOperation rightAssociative = true }
unmatchedWhenOperation ::= unmatchedExpression whenInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Type Operation - right-associative
@@ -2133,7 +2357,16 @@ unmatchedWhenOperation ::= unmatchedExpression whenInfixOperator unmatchedExpres
*/
unmatchedTypeOperation ::= unmatchedExpression typeInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Pipe Operation - right-associative
@@ -2142,7 +2375,16 @@ unmatchedTypeOperation ::= unmatchedExpression typeInfixOperator unmatchedExpres
*/
unmatchedPipeOperation ::= unmatchedExpression pipeInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Match Operation - right-associative
@@ -2152,7 +2394,16 @@ unmatchedPipeOperation ::= unmatchedExpression pipeInfixOperator unmatchedExpres
unmatchedMatchOperation ::= unmatchedExpression matchInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Or Operation - left-associative
@@ -2161,7 +2412,15 @@ unmatchedMatchOperation ::= unmatchedExpression matchInfixOperator unmatchedExpr
*/
unmatchedOrOperation ::= unmatchedExpression orInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* And Operation - left-associative
@@ -2170,7 +2429,15 @@ unmatchedOrOperation ::= unmatchedExpression orInfixOperator unmatchedExpression
*/
unmatchedAndOperation ::= unmatchedExpression andInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Comparison Operation - left-associative
@@ -2179,7 +2446,15 @@ unmatchedAndOperation ::= unmatchedExpression andInfixOperator unmatchedExpressi
*/
unmatchedComparisonOperation ::= unmatchedExpression comparisonInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Relational Operation - left-associative
@@ -2188,7 +2463,15 @@ unmatchedComparisonOperation ::= unmatchedExpression comparisonInfixOperator unm
*/
unmatchedRelationalOperation ::= unmatchedExpression relationalInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Arrow Operation - left-associative
@@ -2197,7 +2480,15 @@ unmatchedRelationalOperation ::= unmatchedExpression relationalInfixOperator unm
*/
unmatchedArrowOperation ::= unmatchedExpression arrowInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* In Operation - left-associative
@@ -2206,7 +2497,15 @@ unmatchedArrowOperation ::= unmatchedExpression arrowInfixOperator unmatchedExpr
*/
unmatchedInOperation ::= unmatchedExpression inInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Two Operation - right-associative
@@ -2215,7 +2514,16 @@ unmatchedInOperation ::= unmatchedExpression inInfixOperator unmatchedExpression
*/
unmatchedTwoOperation ::= unmatchedExpression twoInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] rightAssociative = true }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ rightAssociative = true
+ }
/*
* Addition Operation - left-associative
@@ -2225,7 +2533,15 @@ unmatchedTwoOperation ::= unmatchedExpression twoInfixOperator unmatchedExpressi
*/
unmatchedAdditionOperation ::= unmatchedExpression additionInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Multiplication Operation - left-associative
@@ -2235,7 +2551,15 @@ unmatchedAdditionOperation ::= unmatchedExpression additionInfixOperator unmatch
*/
unmatchedMultiplicationOperation ::= unmatchedExpression multiplicationInfixOperator unmatchedExpression
- { implements = "org.elixir_lang.psi.InfixOperation" methods = [quote] }
+ {
+ implements = "org.elixir_lang.psi.InfixOperation"
+ methods = [
+ leftOperand
+ operator
+ quote
+ rightOperand
+ ]
+ }
/*
* Unary Non-Numeric Operation - non-associative
@@ -2268,9 +2592,11 @@ unmatchedDotCall ::= unmatchedExpression dotInfixOperator parenthesesArguments p
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2287,9 +2613,11 @@ unmatchedQualifiedNoParenthesesCall ::= unmatchedExpression dotInfixOperator rel
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2308,9 +2636,11 @@ unmatchedAtUnqualifiedNoParenthesesCall ::= atPrefixOperator IDENTIFIER noParent
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2328,10 +2658,12 @@ unmatchedUnqualifiedNoParenthesesCall ::= IDENTIFIER noParenthesesOneArgument do
functionNameNode
moduleName
isDefmodule
+ primaryArguments
processDeclarations
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2384,9 +2716,11 @@ unmatchedQualifiedParenthesesCall ::= unmatchedExpression dotInfixOperator relat
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2401,9 +2735,11 @@ unmatchedQualifiedNoArgumentsCall ::= unmatchedExpression dotInfixOperator relat
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2429,9 +2765,11 @@ unmatchedUnqualifiedParenthesesCall ::= IDENTIFIER matchedParenthesesArguments d
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
@@ -2467,9 +2805,11 @@ unmatchedUnqualifiedNoArgumentsCall ::= IDENTIFIER !KEYWORD_PAIR_COLON doBlock?
functionName
functionNameNode
moduleName
+ primaryArguments
quote
resolvedFunctionName
resolvedModuleName
+ secondaryArguments
]
}
diff --git a/src/org/elixir_lang/ElixirColorSettingsPage.java b/src/org/elixir_lang/ElixirColorSettingsPage.java
index d90a2de80..7f7b0aa2f 100644
--- a/src/org/elixir_lang/ElixirColorSettingsPage.java
+++ b/src/org/elixir_lang/ElixirColorSettingsPage.java
@@ -24,10 +24,13 @@ public class ElixirColorSettingsPage implements ColorSettingsPage {
new AttributesDescriptor("Alias", ElixirSyntaxHighlighter.ALIAS),
new AttributesDescriptor("Atom", ElixirSyntaxHighlighter.ATOM),
new AttributesDescriptor("Binary, Decimal, Hexadecimal, and Octal Digits", ElixirSyntaxHighlighter.VALID_DIGIT),
+ new AttributesDescriptor("Callback", ElixirSyntaxHighlighter.CALLBACK),
new AttributesDescriptor("Character List", ElixirSyntaxHighlighter.CHAR_LIST),
new AttributesDescriptor("Character Token", ElixirSyntaxHighlighter.CHAR_TOKEN_TOKEN),
new AttributesDescriptor("Comment", ElixirSyntaxHighlighter.COMMENT),
new AttributesDescriptor("Decimal Exponent, Mark, and Separator", ElixirSyntaxHighlighter.DECIMAL),
+ new AttributesDescriptor("Documentation Module Attributes", ElixirSyntaxHighlighter.DOCUMENTATION_MODULE_ATTRIBUTE),
+ new AttributesDescriptor("Documentation Text", ElixirSyntaxHighlighter.DOCUMENTATION_TEXT),
new AttributesDescriptor("Escape Sequence", ElixirSyntaxHighlighter.VALID_ESCAPE_SEQUENCE),
new AttributesDescriptor("Expression Substitution Mark", ElixirSyntaxHighlighter.EXPRESSION_SUBSTITUTION_MARK),
new AttributesDescriptor("Identifier", ElixirSyntaxHighlighter.IDENTIFIER),
@@ -35,11 +38,15 @@ public class ElixirColorSettingsPage implements ColorSettingsPage {
new AttributesDescriptor("Kernel Functions", ElixirSyntaxHighlighter.KERNEL_FUNCTION),
new AttributesDescriptor("Kernel Macros", ElixirSyntaxHighlighter.KERNEL_MACRO),
new AttributesDescriptor("Kernel.SpecialForms Macros", ElixirSyntaxHighlighter.KERNEL_SPECIAL_FORMS_MACRO),
+ new AttributesDescriptor("Module Attributes", ElixirSyntaxHighlighter.MODULE_ATTRIBUTE),
new AttributesDescriptor("Non-Decimal Base Prefix", ElixirSyntaxHighlighter.WHOLE_NUMBER_BASE),
new AttributesDescriptor("Obsolete Non-Decimal Base Prefix", ElixirSyntaxHighlighter.OBSOLETE_WHOLE_NUMBER_BASE),
new AttributesDescriptor("Operation Sign", ElixirSyntaxHighlighter.OPERATION_SIGN),
new AttributesDescriptor("Sigil", ElixirSyntaxHighlighter.SIGIL),
- new AttributesDescriptor("String", ElixirSyntaxHighlighter.STRING)
+ new AttributesDescriptor("Specification", ElixirSyntaxHighlighter.SPECIFICATION),
+ new AttributesDescriptor("String", ElixirSyntaxHighlighter.STRING),
+ new AttributesDescriptor("Type", ElixirSyntaxHighlighter.TYPE),
+ new AttributesDescriptor("Type Parameter", ElixirSyntaxHighlighter.TYPE_PARAMETER)
};
@Nullable
diff --git a/src/org/elixir_lang/ElixirSyntaxHighlighter.java b/src/org/elixir_lang/ElixirSyntaxHighlighter.java
index ce55b1241..45e0376fc 100644
--- a/src/org/elixir_lang/ElixirSyntaxHighlighter.java
+++ b/src/org/elixir_lang/ElixirSyntaxHighlighter.java
@@ -3,11 +3,15 @@
import com.intellij.lexer.Lexer;
import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
import com.intellij.openapi.editor.HighlighterColors;
+import com.intellij.openapi.editor.colors.CodeInsightColors;
import com.intellij.openapi.editor.colors.TextAttributesKey;
import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
import com.intellij.psi.TokenType;
import com.intellij.psi.tree.IElementType;
import com.intellij.psi.tree.TokenSet;
+import com.intellij.util.xmlb.annotations.Text;
+import com.thaiopensource.xml.dtd.om.Def;
+import org.apache.xmlbeans.impl.xb.ltgfmt.Code;
import org.elixir_lang.psi.ElixirTypes;
import org.jetbrains.annotations.NotNull;
@@ -52,6 +56,16 @@ public class ElixirSyntaxHighlighter extends SyntaxHighlighterBase {
DefaultLanguageHighlighterColors.NUMBER
);
+ public static final TextAttributesKey DOCUMENTATION_MODULE_ATTRIBUTE = createTextAttributesKey(
+ "ELIXIR_DOCUMENTATION_MODULE_ATTRIBUTE",
+ DefaultLanguageHighlighterColors.DOC_COMMENT_TAG
+ );
+
+ public static final TextAttributesKey DOCUMENTATION_TEXT = createTextAttributesKey(
+ "ELIXIR_DOCUMENTATION_TEXT",
+ DefaultLanguageHighlighterColors.DOC_COMMENT_TAG_VALUE
+ );
+
public static final TextAttributesKey EXPRESSION_SUBSTITUTION_MARK = createTextAttributesKey(
"ELIXIR_EXPRESSION_SUBSTITUTION_MARK",
DefaultLanguageHighlighterColors.PARENTHESES
@@ -87,6 +101,12 @@ public class ElixirSyntaxHighlighter extends SyntaxHighlighterBase {
DefaultLanguageHighlighterColors.KEYWORD
);
+ public static final TextAttributesKey MODULE_ATTRIBUTE = createTextAttributesKey(
+ "ELIXIR_MODULE_ATTRIBUTE",
+ // Color used for "ERL_ATTRIBUTE" in intellij-erlang
+ CodeInsightColors.ANNOTATION_NAME_ATTRIBUTES
+ );
+
public static final TextAttributesKey OBSOLETE_WHOLE_NUMBER_BASE = createTextAttributesKey(
"ELIXIR_OBSOLETE_WHOLE_NUMBER_BASE",
HighlighterColors.BAD_CHARACTER
@@ -103,11 +123,32 @@ public class ElixirSyntaxHighlighter extends SyntaxHighlighterBase {
DefaultLanguageHighlighterColors.TEMPLATE_LANGUAGE_COLOR
);
+ public static final TextAttributesKey SPECIFICATION = createTextAttributesKey(
+ "ELIXIR_SPECIFICATION",
+ CodeInsightColors.METHOD_DECLARATION_ATTRIBUTES
+ );
+
+ public static final TextAttributesKey CALLBACK = createTextAttributesKey(
+ "ELIXIR_CALLBACK",
+ SPECIFICATION
+ );
+
public static final TextAttributesKey STRING = createTextAttributesKey(
"ELIXIR_STRING",
DefaultLanguageHighlighterColors.STRING
);
+ public static final TextAttributesKey TYPE = createTextAttributesKey(
+ "ELIXIR_TYPE",
+ // matches ERL_TYPE
+ CodeInsightColors.ANNOTATION_ATTRIBUTE_NAME_ATTRIBUTES
+ );
+
+ public static final TextAttributesKey TYPE_PARAMETER = createTextAttributesKey(
+ "ELIXIR_TYPE_PARAMETER",
+ CodeInsightColors.TYPE_PARAMETER_NAME_ATTRIBUTES
+ );
+
public static final TextAttributesKey VALID_DIGIT = createTextAttributesKey(
"ELIXIR_VALID_DIGIT",
DefaultLanguageHighlighterColors.NUMBER
diff --git a/src/org/elixir_lang/annonator/ModuleAttribute.java b/src/org/elixir_lang/annonator/ModuleAttribute.java
new file mode 100644
index 000000000..6867296f2
--- /dev/null
+++ b/src/org/elixir_lang/annonator/ModuleAttribute.java
@@ -0,0 +1,1126 @@
+package org.elixir_lang.annonator;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.lang.annotation.AnnotationHolder;
+import com.intellij.lang.annotation.Annotator;
+import com.intellij.openapi.editor.colors.EditorColorsManager;
+import com.intellij.openapi.editor.colors.TextAttributesKey;
+import com.intellij.openapi.editor.markup.TextAttributes;
+import com.intellij.openapi.project.DumbAware;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiRecursiveElementVisitor;
+import com.intellij.psi.tree.TokenSet;
+import org.apache.commons.lang.NotImplementedException;
+import org.elixir_lang.ElixirSyntaxHighlighter;
+import org.elixir_lang.psi.*;
+import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.impl.ElixirPsiImplUtil;
+import org.jetbrains.annotations.NotNull;
+
+import java.awt.font.TextAttribute;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Annotates module attributes.
+ */
+public class ModuleAttribute implements Annotator, DumbAware {
+ /*
+ * Public Instance Methods
+ */
+
+ /**
+ * Annotates the specified PSI element.
+ * It is guaranteed to be executed in non-reentrant fashion.
+ * I.e there will be no call of this method for this instance before previous call get completed.
+ * Multiple instances of the annotator might exist simultaneously, though.
+ *
+ * @param element to annotate.
+ * @param holder the container which receives annotations created by the plugin.
+ */
+ @Override
+ public void annotate(@NotNull final PsiElement element, @NotNull final AnnotationHolder holder) {
+ element.accept(
+ new PsiRecursiveElementVisitor() {
+ public void visitAtUnqualifiedNoParenthesesCall(@NotNull final AtUnqualifiedNoParenthesesCall atUnqualifiedNoParenthesesCall) {
+ ASTNode node = atUnqualifiedNoParenthesesCall.getNode();
+ ASTNode[] identifierNodes = node.getChildren(ElixirPsiImplUtil.IDENTIFIER_TOKEN_SET);
+
+ assert identifierNodes.length == 1;
+
+ Quotable atPrefixOperator = atUnqualifiedNoParenthesesCall.getAtPrefixOperator();
+ ASTNode identifierNode = identifierNodes[0];
+
+ TextRange textRange = new TextRange(
+ atPrefixOperator.getTextRange().getStartOffset(),
+ identifierNode.getTextRange().getEndOffset()
+ );
+
+ String identifier = identifierNode.getText();
+
+ if (identifier.equals("callback") || identifier.equals("macrocallback")) {
+ highlight(textRange, holder, ElixirSyntaxHighlighter.MODULE_ATTRIBUTE);
+
+ highlightCallback(atUnqualifiedNoParenthesesCall, holder);
+ } else if (identifier.equals("doc") ||
+ identifier.equals("moduledoc") ||
+ identifier.equals("typedoc")) {
+ highlight(textRange, holder, ElixirSyntaxHighlighter.DOCUMENTATION_MODULE_ATTRIBUTE);
+
+ highlightDocumentationText(atUnqualifiedNoParenthesesCall, holder);
+ } else if (identifier.equals("opaque") ||
+ identifier.equals("type") ||
+ identifier.equals("typep")) {
+ highlight(textRange, holder, ElixirSyntaxHighlighter.MODULE_ATTRIBUTE);
+
+ highlightType(atUnqualifiedNoParenthesesCall, holder);
+ } else if (identifier.equals("spec")) {
+ highlight(textRange, holder, ElixirSyntaxHighlighter.MODULE_ATTRIBUTE);
+
+ highlightSpecification(atUnqualifiedNoParenthesesCall, holder);
+ } else {
+ highlight(textRange, holder, ElixirSyntaxHighlighter.MODULE_ATTRIBUTE);
+ }
+ }
+
+ @Override
+ public void visitElement(@NotNull final PsiElement element) {
+ if (element instanceof AtUnqualifiedNoParenthesesCall) {
+ visitAtUnqualifiedNoParenthesesCall((AtUnqualifiedNoParenthesesCall) element);
+ }
+ }
+ }
+ );
+ }
+
+ /*
+ * Private Instance Methods
+ */
+
+ /**
+ * Highlights `textRange` with the given `textAttributesKey`.
+ *
+ * @param textRange textRange in the document to highlight
+ * @param annotationHolder the container which receives annotations created by the plugin.
+ * @param textAttributesKey text attributes to apply to the `node`.
+ */
+ private void highlight(@NotNull final TextRange textRange, @NotNull AnnotationHolder annotationHolder, @NotNull final TextAttributesKey textAttributesKey) {
+ annotationHolder.createInfoAnnotation(textRange, null).setEnforcedTextAttributes(TextAttributes.ERASE_MARKER);
+ annotationHolder.createInfoAnnotation(textRange, null).setEnforcedTextAttributes(EditorColorsManager.getInstance().getGlobalScheme().getAttributes(textAttributesKey));
+ }
+
+ private void highlightCallback(@NotNull final AtUnqualifiedNoParenthesesCall atUnqualifiedNoParenthesesCall,
+ @NotNull final AnnotationHolder annotationHolder) {
+ highlightSpecification(
+ atUnqualifiedNoParenthesesCall,
+ annotationHolder,
+ ElixirSyntaxHighlighter.CALLBACK,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ }
+
+ private void highlightDocumentationText(
+ @NotNull final AtUnqualifiedNoParenthesesCall atUnqualifiedNoParenthesesCall,
+ @NotNull final AnnotationHolder holder
+ ) {
+ PsiElement noParenthesesOneArgument = atUnqualifiedNoParenthesesCall.getNoParenthesesOneArgument();
+ PsiElement[] grandChildren = noParenthesesOneArgument.getChildren();
+
+ if (grandChildren.length == 1) {
+ PsiElement grandChild = grandChildren[0];
+
+ PsiElement[] greatGrandChildren = grandChild.getChildren();
+
+ if (greatGrandChildren.length == 1) {
+ PsiElement greatGrandChild = greatGrandChildren[0];
+
+ if (greatGrandChild instanceof ElixirAtomKeyword) {
+ ElixirAtomKeyword atomKeyword = (ElixirAtomKeyword) greatGrandChild;
+ String text = atomKeyword.getText();
+
+ if (text.equals("false")) {
+ holder.createWeakWarningAnnotation(
+ atomKeyword,
+ "Will make documented invisible to the documentation extraction tools like ExDoc.");
+ }
+ } else if (greatGrandChild instanceof Heredoc) {
+ Heredoc heredoc = (Heredoc) greatGrandChild;
+ List heredocLineList = heredoc.getHeredocLineList();
+
+ for (Bodied bodied : heredocLineList) {
+ Body body = bodied.getBody();
+
+ highlightFragments(
+ heredoc,
+ body,
+ holder,
+ ElixirSyntaxHighlighter.DOCUMENTATION_TEXT
+ );
+ }
+ } else if (greatGrandChild instanceof Line) {
+ Line line = (Line) greatGrandChild;
+ Body body = line.getBody();
+
+ highlightFragments(
+ line,
+ body,
+ holder,
+ ElixirSyntaxHighlighter.DOCUMENTATION_TEXT
+ );
+ }
+ }
+ }
+ }
+
+ /**
+ * Highlights fragment ASTNodes under `body` that have fragment type from `fragmented.getFragmentType()`.
+ *
+ * @param fragmented supplies fragment type
+ * @param body contains fragments
+ * @param annotationHolder the container which receives annotations created by the plugin.
+ * @param textAttributesKey text attributes to apply to the fragments.
+ */
+ private void highlightFragments(@NotNull final Fragmented fragmented,
+ @NotNull final Body body,
+ @NotNull AnnotationHolder annotationHolder,
+ @NotNull final TextAttributesKey textAttributesKey) {
+ ASTNode bodyNode = body.getNode();
+ ASTNode[] fragmentNodes = bodyNode.getChildren(
+ TokenSet.create(fragmented.getFragmentType())
+ );
+
+ for (ASTNode fragmentNode : fragmentNodes) {
+ highlight(
+ fragmentNode.getTextRange(),
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+ }
+
+ /**
+ * Highlights the function call name as a `ElixirSyntaxHighlighter.SPECIFICATION
+ *
+ * @param atUnqualifiedNoParenthesesCall
+ * @param annotationHolder
+ */
+ private void highlightSpecification(@NotNull final AtUnqualifiedNoParenthesesCall atUnqualifiedNoParenthesesCall,
+ @NotNull final AnnotationHolder annotationHolder) {
+ highlightSpecification(
+ atUnqualifiedNoParenthesesCall,
+ annotationHolder,
+ ElixirSyntaxHighlighter.SPECIFICATION,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ }
+
+ /**
+ * Highlights the function name of the declared @type, @typep, or @opaque as an {@link ElixirSyntaxHighlighter.TYPE}
+ * and the its parameters as {@link ElixirSyntaxHighlighter.TYPE_PARAMETER}.
+ */
+ private void highlightType(@NotNull final AtUnqualifiedNoParenthesesCall atUnqualifiedNoParenthesesCall,
+ @NotNull final AnnotationHolder annotationHolder) {
+ PsiElement noParenthesesOneArgument = atUnqualifiedNoParenthesesCall.getNoParenthesesOneArgument();
+ PsiElement[] grandChildren = noParenthesesOneArgument.getChildren();
+
+ if (grandChildren.length == 1) {
+ PsiElement grandChild = grandChildren[0];
+
+ if (grandChild instanceof ElixirMatchedMatchOperation) {
+ // TODO LocalInspectionTool with quick fix to "Use `::`, not `=`, to separate types declarations from their definitions"
+ } else if (grandChild instanceof ElixirMatchedTypeOperation) {
+ InfixOperation infixOperation = (InfixOperation) grandChild;
+ PsiElement leftOperand = infixOperation.leftOperand();
+ Set typeParameterNameSet = Collections.EMPTY_SET;
+
+ if (leftOperand instanceof Call) {
+ Call call = (Call) leftOperand;
+ ASTNode functionNameNode = call.functionNameNode();
+
+ if (functionNameNode != null) {
+ highlight(
+ functionNameNode.getTextRange(),
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ }
+
+ if (call instanceof ElixirMatchedUnqualifiedNoArgumentsCall) {
+ // no arguments, so nothing else to do
+ } else if (call instanceof ElixirMatchedUnqualifiedParenthesesCall) {
+ PsiElement[] primaryArguments = call.primaryArguments();
+ PsiElement[] secondaryArguments = call.secondaryArguments();
+
+ /* if there are secondaryArguments, then it is the type parameters as in
+ `@type quote(type_name)(param1, param2) :: {param1, param2}` */
+ if (secondaryArguments != null) {
+ typeParameterNameSet = typeTypeParameterNameSet(secondaryArguments);
+
+ highlightTypesAndTypeParameterUsages(
+ primaryArguments,
+ /* as stated above, if there are secondary arguments, then the primary arguments are
+ to quote or some equivalent metaprogramming. */
+ Collections.EMPTY_SET,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+
+ highlightTypesAndTypeTypeParameterDeclarations(
+ secondaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ } else if (primaryArguments != null) {
+ typeParameterNameSet = typeTypeParameterNameSet(primaryArguments);
+
+ highlightTypesAndTypeTypeParameterDeclarations(
+ primaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ }
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " + call.getClass().getCanonicalName() + " PsiElements is " +
+ "not implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class " +
+ "name of the sample text:\n" + ((PsiElement) call).getText()
+ );
+ }
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " + leftOperand.getClass().getCanonicalName() + " PsiElements is " +
+ "not implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name of " +
+ "the sample text:\n" + leftOperand.getText()
+ );
+ }
+
+ PsiElement rightOperand = infixOperation.rightOperand();
+
+ highlightTypesAndTypeParameterUsages(
+ rightOperand,
+ typeParameterNameSet,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ } else if (grandChild instanceof ElixirMatchedUnqualifiedParenthesesCall) {
+ // seen as `unquote(ast)`, but could also be just the beginning of typing
+ ElixirMatchedUnqualifiedParenthesesCall matchedUnqualifiedParenthesesCall = (ElixirMatchedUnqualifiedParenthesesCall) grandChild;
+
+ if (matchedUnqualifiedParenthesesCall.functionName().equals("unquote")) {
+ PsiElement[] secondaryArguments = matchedUnqualifiedParenthesesCall.secondaryArguments();
+
+ if (secondaryArguments != null) {
+ Set typeParameterNameSet = typeTypeParameterNameSet(secondaryArguments);
+
+ highlightTypesAndTypeTypeParameterDeclarations(
+ secondaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ }
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " +
+ matchedUnqualifiedParenthesesCall.getClass().getCanonicalName() + " PsiElements " +
+ "is not implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name " +
+ "of the sample text:\n" + grandChild.getText()
+ );
+ }
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " + grandChild.getClass().getCanonicalName() + " PsiElements is not " +
+ "implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name of " +
+ "the sample text:\n" + grandChild.getText()
+ );
+ }
+ }
+ }
+
+ private void highlightTypesAndTypeTypeParameterDeclarations(ElixirUnmatchedUnqualifiedNoArgumentsCall psiElement,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ String name = psiElement.getText();
+ TextAttributesKey textAttributesKey;
+
+ if (typeParameterNameSet.contains(name)) {
+ textAttributesKey = ElixirSyntaxHighlighter.TYPE_PARAMETER;
+ } else {
+ textAttributesKey = typeTextAttributesKey;
+ }
+
+ highlight(psiElement.getTextRange(), annotationHolder, textAttributesKey);
+ }
+
+ private void highlightTypesAndTypeTypeParameterDeclarations(PsiElement psiElement,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ if (psiElement instanceof ElixirUnmatchedUnqualifiedNoArgumentsCall) {
+ highlightTypesAndTypeTypeParameterDeclarations(
+ (ElixirUnmatchedUnqualifiedNoArgumentsCall) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types and type type parameter declarations for " +
+ psiElement.getClass().getCanonicalName() + " PsiElements is not implemented yet. Please " +
+ "open an issue (https://github.com/KronicDeth/intellij-elixir/issues/new) with the class " +
+ "name of the sample text:\n" + psiElement.getText()
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeTypeParameterDeclarations(
+ PsiElement[] psiElements,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ for (PsiElement psiElement : psiElements) {
+ highlightTypesAndTypeTypeParameterDeclarations(
+ psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+ }
+
+ /**
+ * Recursively highlights the types under `atUnqualifiedNoParenthesesCall`.
+ *
+ * @param atUnqualifiedNoParenthesesCall
+ * @param annotationHolder
+ * @param leftMostFunctionNameTextAttributesKey the {@link ElixirSyntaxHighlighter} {@link TextAttributesKey} for the
+ * name of the callback, type, or function being declared
+ * @param leftMostFunctionArgumentsTextAttributesKey the {@link ElixirSyntaxHighlighter} {@link TextAttributesKey} for the
+ * arguments of the callback, type, or function being declared
+ */
+ private void highlightSpecification(AtUnqualifiedNoParenthesesCall atUnqualifiedNoParenthesesCall,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey leftMostFunctionNameTextAttributesKey,
+ TextAttributesKey leftMostFunctionArgumentsTextAttributesKey) {
+ PsiElement noParenthesesOneArgument = atUnqualifiedNoParenthesesCall.getNoParenthesesOneArgument();
+ PsiElement[] grandChildren = noParenthesesOneArgument.getChildren();
+
+ if (grandChildren.length == 1) {
+ PsiElement grandChild = grandChildren[0];
+
+ if (grandChild instanceof ElixirMatchedTypeOperation) {
+ InfixOperation infixOperation = (InfixOperation) grandChild;
+ PsiElement leftOperand = infixOperation.leftOperand();
+
+ if (leftOperand instanceof Call) {
+ Call call = (Call) leftOperand;
+ ASTNode functionNameNode = call.functionNameNode();
+
+ if (functionNameNode != null) {
+ highlight(
+ functionNameNode.getTextRange(),
+ annotationHolder,
+ leftMostFunctionNameTextAttributesKey
+ );
+ }
+
+ PsiElement[] primaryArguments = call.primaryArguments();
+
+ if (primaryArguments != null) {
+ highlightTypesAndTypeParameterUsages(
+ primaryArguments,
+ Collections.EMPTY_SET,
+ annotationHolder,
+ leftMostFunctionArgumentsTextAttributesKey
+ );
+ }
+
+ PsiElement[] secondaryArguments = call.secondaryArguments();
+
+ if (secondaryArguments != null) {
+ highlightTypesAndTypeParameterUsages(
+ secondaryArguments,
+ Collections.EMPTY_SET,
+ annotationHolder,
+ leftMostFunctionArgumentsTextAttributesKey
+ );
+ }
+ }
+
+ PsiElement rightOperand = infixOperation.rightOperand();
+
+ highlightTypesAndTypeParameterUsages(
+ rightOperand,
+ Collections.EMPTY_SET,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ } else if (grandChild instanceof ElixirMatchedWhenOperation) {
+ ElixirMatchedWhenOperation matchedWhenOperation = (ElixirMatchedWhenOperation) grandChild;
+ Set typeParameterNameSet = specificationTypeParameterNameSet(matchedWhenOperation.rightOperand());
+
+ PsiElement leftOperand = matchedWhenOperation.leftOperand();
+
+ if (leftOperand instanceof ElixirMatchedTypeOperation) {
+ ElixirMatchedTypeOperation matchedTypeOperation = (ElixirMatchedTypeOperation) leftOperand;
+ PsiElement matchedTypeOperationLeftOperand = matchedTypeOperation.leftOperand();
+
+ if (matchedTypeOperationLeftOperand instanceof Call) {
+ Call call = (Call) matchedTypeOperationLeftOperand;
+ ASTNode functionNameNode = call.functionNameNode();
+
+ if (functionNameNode != null) {
+ highlight(
+ functionNameNode.getTextRange(),
+ annotationHolder,
+ leftMostFunctionNameTextAttributesKey
+ );
+ }
+
+ PsiElement[] primaryArguments = call.primaryArguments();
+
+ if (primaryArguments != null) {
+ highlightTypesAndTypeParameterUsages(
+ primaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ leftMostFunctionArgumentsTextAttributesKey
+ );
+ }
+
+ PsiElement[] secondaryArguments = call.secondaryArguments();
+
+ if (secondaryArguments != null) {
+ highlightTypesAndTypeParameterUsages(
+ secondaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ leftMostFunctionArgumentsTextAttributesKey
+ );
+ }
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " +
+ matchedTypeOperationLeftOperand.getClass().getCanonicalName() +
+ " PsiElements that are the left operand of " +
+ matchedTypeOperation.getClass().getCanonicalName() + " is not implemented " +
+ "yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class " +
+ "name of the sample text:\n" + matchedWhenOperation.getText()
+ );
+ }
+
+ PsiElement matchedTypeOperationRightOperand = matchedTypeOperation.rightOperand();
+
+ highlightTypesAndTypeParameterUsages(
+ matchedTypeOperationRightOperand,
+ typeParameterNameSet,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " + leftOperand.getClass().getCanonicalName() + " PsiElements " +
+ "that are the left operand of " +
+ matchedWhenOperation.getClass().getCanonicalName() + " is not implemented yet. " +
+ "Please open an issue (https://github.com/KronicDeth/intellij-elixir/issues/new) " +
+ "with the class name of the sample text:\n" + matchedWhenOperation.getText()
+ );
+ }
+
+ highlightTypesAndSpecificationTypeParameterDeclarations(
+ matchedWhenOperation.rightOperand(),
+ typeParameterNameSet,
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE
+ );
+ }
+ }
+ }
+
+ private void highlightTypesAndSpecificationTypeParameterDeclarations(QuotableKeywordPair quotableKeywordPair,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ PsiElement keywordKey = quotableKeywordPair.getKeywordKey();
+
+ if (typeParameterNameSet.contains(keywordKey.getText())) {
+ highlight(keywordKey.getTextRange(), annotationHolder, ElixirSyntaxHighlighter.TYPE_PARAMETER);
+ } else {
+ highlightTypesAndTypeParameterUsages(
+ keywordKey,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+
+ highlightTypesAndTypeParameterUsages(
+ quotableKeywordPair.getKeywordValue(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+
+ private void highlightTypesAndSpecificationTypeParameterDeclarations(PsiElement psiElement,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ if (psiElement instanceof ElixirAccessExpression ||
+ psiElement instanceof ElixirKeywords ||
+ psiElement instanceof ElixirList ||
+ psiElement instanceof ElixirNoParenthesesKeywords) {
+ highlightTypesAndSpecificationTypeParameterDeclarations(
+ psiElement.getChildren(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof QuotableKeywordPair) {
+ highlightTypesAndSpecificationTypeParameterDeclarations(
+ (QuotableKeywordPair) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types and type parameter declarations for " +
+ psiElement.getClass().getCanonicalName() + " PsiElements is not implemented yet. Please " +
+ "open an issue " + "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the " +
+ "class name of the sample text:\n" + psiElement.getText()
+ );
+ }
+ }
+
+ private void highlightTypesAndSpecificationTypeParameterDeclarations(PsiElement[] psiElements,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ for (PsiElement psiElement : psiElements) {
+ highlightTypesAndSpecificationTypeParameterDeclarations(
+ psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(Arguments arguments,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey textAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ arguments.arguments(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(ElixirMapOperation mapOperation,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ mapOperation.getMapArguments(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ ElixirStabOperation stabOperation,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ ElixirStabParenthesesSignature stabParenthesesSignature = stabOperation.getStabParenthesesSignature();
+
+ if (stabParenthesesSignature != null) {
+ highlightTypesAndTypeParameterUsages(
+ stabParenthesesSignature,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else {
+ ElixirStabNoParenthesesSignature stabNoParenthesesSignatures = stabOperation.getStabNoParenthesesSignature();
+
+ if (stabNoParenthesesSignatures != null) {
+ highlightTypesAndTypeParameterUsages(
+ stabNoParenthesesSignatures,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+ }
+
+ ElixirStabBody stabBody = stabOperation.getStabBody();
+
+ if (stabBody != null) {
+ highlightTypesAndTypeParameterUsages(
+ stabBody,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ ElixirStabParenthesesSignature stabParenthesesSignature,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ PsiElement[] children = stabParenthesesSignature.getChildren();
+
+ if (children.length == 1) {
+ highlightTypesAndTypeParameterUsages(
+ children[0],
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (children.length == 3) {
+ highlightTypesAndTypeParameterUsages(
+ (WhenOperation) stabParenthesesSignature,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " + stabParenthesesSignature.getClass().getCanonicalName() +
+ " PsiElements with neither 1 nor 3 children is not implemented yet. Please open an " +
+ "issue (https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name " +
+ "of the sample text:\n" + stabParenthesesSignature.getText()
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ ElixirStructOperation structOperation,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ structOperation.getMapArguments(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ InfixOperation infixOperation,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ infixOperation.leftOperand(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ highlightTypesAndTypeParameterUsages(
+ infixOperation.rightOperand(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(PsiElement psiElement,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ if (psiElement instanceof Arguments) {
+ highlightTypesAndTypeParameterUsages(
+ (Arguments) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof ElixirAccessExpression ||
+ psiElement instanceof ElixirKeywordPair ||
+ psiElement instanceof ElixirKeywords ||
+ psiElement instanceof ElixirList ||
+ psiElement instanceof ElixirMapArguments ||
+ psiElement instanceof ElixirMapConstructionArguments ||
+ psiElement instanceof ElixirNoParenthesesArguments ||
+ psiElement instanceof ElixirNoParenthesesExpression ||
+ psiElement instanceof ElixirParentheticalStab ||
+ psiElement instanceof ElixirStab ||
+ psiElement instanceof ElixirStabBody ||
+ psiElement instanceof ElixirStabNoParenthesesSignature ||
+ psiElement instanceof ElixirTuple) {
+ highlightTypesAndTypeParameterUsages(
+ psiElement.getChildren(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof ElixirAlias ||
+ psiElement instanceof ElixirAtom ||
+ psiElement instanceof ElixirAtomKeyword ||
+ psiElement instanceof ElixirBitString ||
+ psiElement instanceof ElixirDecimalWholeNumber ||
+ psiElement instanceof ElixirKeywordKey ||
+ psiElement instanceof ElixirStringLine ||
+ psiElement instanceof ElixirUnaryNumericOperation) {
+ // leave normal highlighting
+ } else if (psiElement instanceof ElixirMapOperation) {
+ highlightTypesAndTypeParameterUsages(
+ (ElixirMapOperation) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof ElixirRelativeIdentifier ||
+ psiElement instanceof UnqualifiedNoArgumentsCall) {
+ // highlight entire element
+ String name = psiElement.getText();
+ TextAttributesKey textAttributesKey;
+
+ if (typeParameterNameSet.contains(name)) {
+ textAttributesKey = ElixirSyntaxHighlighter.TYPE_PARAMETER;
+ } else {
+ textAttributesKey = typeTextAttributesKey;
+ }
+
+ highlight(psiElement.getTextRange(), annotationHolder, textAttributesKey);
+ } else if (psiElement instanceof ElixirStabParenthesesSignature) {
+ highlightTypesAndTypeParameterUsages(
+ (ElixirStabParenthesesSignature) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof ElixirStabOperation) {
+ highlightTypesAndTypeParameterUsages(
+ (ElixirStabOperation) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof ElixirStructOperation) {
+ highlightTypesAndTypeParameterUsages(
+ (ElixirStructOperation) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof WhenOperation) {
+ /* NOTE: MUST be before `InfixOperation` as `WhenOperation` is a subinterface of
+ `InfixOperation` */
+ highlightTypesAndTypeParameterUsages(
+ (WhenOperation) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof InfixOperation) {
+ highlightTypesAndTypeParameterUsages(
+ (InfixOperation) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof QualifiedParenthesesCall) {
+ highlightTypesAndTypeParameterUsages(
+ (QualifiedParenthesesCall) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof QualifiedAlias) {
+ highlightTypesAndTypeParameterUsages(
+ (QualifiedAlias) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof QualifiedNoArgumentsCall) {
+ highlightTypesAndTypeParameterUsages(
+ (QualifiedNoArgumentsCall) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof UnqualifiedNoParenthesesCall) {
+ highlightTypesAndTypeParameterUsages(
+ (UnqualifiedNoParenthesesCall) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else if (psiElement instanceof UnqualifiedParenthesesCall) {
+ highlightTypesAndTypeParameterUsages(
+ (UnqualifiedParenthesesCall) psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ } else {
+ throw new NotImplementedException(
+ "Highlighting types for " + psiElement.getClass().getCanonicalName() +
+ " PsiElements is not implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name of the " +
+ "sample text:\n" + psiElement.getText()
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ PsiElement[] psiElements,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey textAttributesKey) {
+ for (PsiElement psiElement : psiElements) {
+ highlightTypesAndTypeParameterUsages(
+ psiElement,
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(QualifiedAlias qualifiedAlias,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey textAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ qualifiedAlias.getFirstChild(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ highlightTypesAndTypeParameterUsages(
+ qualifiedAlias.getLastChild(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ QualifiedNoArgumentsCall qualifiedNoArgumentsCall,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey textAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ qualifiedNoArgumentsCall.getFirstChild(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ highlightTypesAndTypeParameterUsages(
+ qualifiedNoArgumentsCall.getRelativeIdentifier(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ QualifiedParenthesesCall qualifiedParenthesesCall,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey textAttributesKey) {
+ highlightTypesAndTypeParameterUsages(
+ qualifiedParenthesesCall.getFirstChild(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ highlightTypesAndTypeParameterUsages(
+ qualifiedParenthesesCall.getRelativeIdentifier(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ highlightTypesAndTypeParameterUsages(
+ qualifiedParenthesesCall.primaryArguments(),
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+
+ PsiElement[] secondaryArguments = qualifiedParenthesesCall.secondaryArguments();
+
+ if (secondaryArguments != null) {
+ highlightTypesAndTypeParameterUsages(
+ secondaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ UnqualifiedNoParenthesesCall unqualifiedNoParenthesesCall,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ ASTNode functionNameNode = unqualifiedNoParenthesesCall.functionNameNode();
+ assert functionNameNode != null;
+ highlight(functionNameNode.getTextRange(), annotationHolder, typeTextAttributesKey);
+
+ highlightTypesAndTypeParameterUsages(
+ unqualifiedNoParenthesesCall.primaryArguments(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ UnqualifiedParenthesesCall unqualifiedParenthesesCall,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ ASTNode functionNameNode = unqualifiedParenthesesCall.functionNameNode();
+ assert functionNameNode != null;
+ highlight(functionNameNode.getTextRange(), annotationHolder, typeTextAttributesKey);
+
+ highlightTypesAndTypeParameterUsages(
+ unqualifiedParenthesesCall.primaryArguments(),
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+
+ PsiElement[] secondaryArguments = unqualifiedParenthesesCall.secondaryArguments();
+
+ if (secondaryArguments != null) {
+ highlightTypesAndTypeParameterUsages(
+ secondaryArguments,
+ typeParameterNameSet,
+ annotationHolder,
+ typeTextAttributesKey
+ );
+ }
+ }
+
+ private void highlightTypesAndTypeParameterUsages(
+ WhenOperation whenOperation,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey typeTextAttributesKey) {
+ return;
+ }
+
+ private void highlightTypesAndSpecificationTypeParameterDeclarations(
+ ElixirUnmatchedUnqualifiedNoArgumentsCall unmatchedUnqualifiedNoArgumentsCall,
+ Set typeParameterNameSet,
+ AnnotationHolder annotationHolder,
+ TextAttributesKey textAttributesKey
+ ) {
+ String variable = unmatchedUnqualifiedNoArgumentsCall.getText();
+
+ if (typeParameterNameSet.contains(variable)) {
+ highlight(
+ unmatchedUnqualifiedNoArgumentsCall.getTextRange(),
+ annotationHolder,
+ ElixirSyntaxHighlighter.TYPE_PARAMETER
+ );
+ } else {
+ highlightTypesAndTypeParameterUsages(
+ unmatchedUnqualifiedNoArgumentsCall,
+ typeParameterNameSet,
+ annotationHolder,
+ textAttributesKey
+ );
+ }
+ }
+
+ @NotNull
+ private Set specificationTypeParameterNameSet(ElixirKeywordPair keywordPair) {
+ return Collections.singleton(keywordPair.getKeywordKey().getText());
+ }
+
+ @NotNull
+ private Set specificationTypeParameterNameSet(ElixirNoParenthesesKeywordPair noParenthesesKeywordPair) {
+ return Collections.singleton(noParenthesesKeywordPair.getKeywordKey().getText());
+ }
+
+ private Set specificationTypeParameterNameSet(PsiElement psiElement) {
+ if (psiElement instanceof ElixirAccessExpression ||
+ psiElement instanceof ElixirKeywords ||
+ psiElement instanceof ElixirList ||
+ psiElement instanceof ElixirNoParenthesesKeywords) {
+ return specificationTypeParameterNameSet(psiElement.getChildren());
+ } else if (psiElement instanceof ElixirKeywordPair) {
+ return specificationTypeParameterNameSet((ElixirKeywordPair) psiElement);
+ } else if (psiElement instanceof ElixirNoParenthesesKeywordPair) {
+ return specificationTypeParameterNameSet((ElixirNoParenthesesKeywordPair) psiElement);
+ } else {
+ throw new NotImplementedException(
+ "Extracting specification type parameter name set for " + psiElement.getClass().getCanonicalName() +
+ " PsiElements is not implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name of the " +
+ "sample text:\n" + psiElement.getText()
+ );
+ }
+ }
+
+ private Set specificationTypeParameterNameSet(PsiElement[] psiElements) {
+ Set accumulatedTypeParameterNameSet = new HashSet();
+
+ for (PsiElement psiElement : psiElements) {
+ accumulatedTypeParameterNameSet.addAll(specificationTypeParameterNameSet(psiElement));
+ }
+
+ return accumulatedTypeParameterNameSet;
+ }
+
+ private Set typeTypeParameterNameSet(
+ ElixirMatchedUnqualifiedParenthesesCall matchedUnqualifiedParenthesesCall
+ ) {
+ Set typeParameterNameSet = new HashSet();
+
+ typeParameterNameSet.addAll(typeTypeParameterNameSet(matchedUnqualifiedParenthesesCall.primaryArguments()));
+ typeParameterNameSet.addAll(typeTypeParameterNameSet(matchedUnqualifiedParenthesesCall.secondaryArguments()));
+
+ return typeParameterNameSet;
+ }
+
+ private Set typeTypeParameterNameSet(PsiElement psiElement) {
+ if (psiElement instanceof ElixirUnmatchedUnqualifiedNoArgumentsCall) {
+ return Collections.singleton(psiElement.getText());
+ } else {
+ throw new NotImplementedException(
+ "Extracting type type parameter name set for " + psiElement.getClass().getCanonicalName() +
+ " PsiElements is not implemented yet. Please open an issue " +
+ "(https://github.com/KronicDeth/intellij-elixir/issues/new) with the class name of the " +
+ "sample text:\n" + psiElement.getText()
+ );
+ }
+ }
+
+ private Set typeTypeParameterNameSet(PsiElement[] psiElements) {
+ Set typeParameerNameSet = new HashSet();
+
+ for (PsiElement psiElement : psiElements) {
+ typeParameerNameSet.addAll(typeTypeParameterNameSet(psiElement));
+ }
+
+ return typeParameerNameSet;
+ }
+}
diff --git a/src/org/elixir_lang/psi/Arguments.java b/src/org/elixir_lang/psi/Arguments.java
new file mode 100644
index 000000000..a9039960d
--- /dev/null
+++ b/src/org/elixir_lang/psi/Arguments.java
@@ -0,0 +1,13 @@
+package org.elixir_lang.psi;
+
+import com.intellij.psi.PsiElement;
+
+/**
+ * A {@code PsiElement} that has arguments for a {@link org.elixir_lang.psi.call.Call}
+ */
+public interface Arguments extends PsiElement {
+ /**
+ * The actual argument elements for the {@link org.elixir_lang.psi.call.Call}. Used for annotating the arguments.
+ */
+ PsiElement[] arguments();
+}
diff --git a/src/org/elixir_lang/psi/AtUnqualifiedNoParenthesesCall.java b/src/org/elixir_lang/psi/AtUnqualifiedNoParenthesesCall.java
index e96743ef0..e9b8a9ad1 100644
--- a/src/org/elixir_lang/psi/AtUnqualifiedNoParenthesesCall.java
+++ b/src/org/elixir_lang/psi/AtUnqualifiedNoParenthesesCall.java
@@ -1,12 +1,12 @@
package org.elixir_lang.psi;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.NoParentheses;
+import org.elixir_lang.psi.call.arguments.NoParenthesesOneArgument;
/**
* atPrefixOperator IDENTIFIER CALL bracketArguments
*/
-public interface AtUnqualifiedNoParenthesesCall extends Call, Quotable {
+public interface AtUnqualifiedNoParenthesesCall extends Call, NoParenthesesOneArgument, Quotable {
Quotable getAtPrefixOperator();
-
- QuotableArguments getNoParenthesesOneArgument();
}
diff --git a/src/org/elixir_lang/psi/DotCall.java b/src/org/elixir_lang/psi/DotCall.java
index f09596aaa..bae88d77d 100644
--- a/src/org/elixir_lang/psi/DotCall.java
+++ b/src/org/elixir_lang/psi/DotCall.java
@@ -1,6 +1,10 @@
package org.elixir_lang.psi;
+import com.intellij.psi.PsiElement;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.Parentheses;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
import java.util.List;
@@ -11,4 +15,13 @@ public interface DotCall extends Call, Quotable {
Quotable getDotInfixOperator();
List getParenthesesArgumentsList();
+
+ /**
+ * Unlike with a base {@link Call}, {@link Parentheses#primaryArguments} are {@code @NotNull} because the first set
+ * of parentheses has to be there or it wouldn't be a {@link Parentheses}
+ */
+ @Contract(pure = true)
+ @Override
+ @NotNull
+ PsiElement[] primaryArguments();
}
diff --git a/src/org/elixir_lang/psi/InfixOperation.java b/src/org/elixir_lang/psi/InfixOperation.java
index 085ff25a8..25fea4206 100644
--- a/src/org/elixir_lang/psi/InfixOperation.java
+++ b/src/org/elixir_lang/psi/InfixOperation.java
@@ -6,5 +6,7 @@
* Created by luke.imhoff on 3/18/15.
*/
public interface InfixOperation extends Quotable {
-
+ Operator operator();
+ Quotable leftOperand();
+ Quotable rightOperand();
}
diff --git a/src/org/elixir_lang/psi/Line.java b/src/org/elixir_lang/psi/Line.java
index 5932749cc..b7bd873cd 100644
--- a/src/org/elixir_lang/psi/Line.java
+++ b/src/org/elixir_lang/psi/Line.java
@@ -5,5 +5,5 @@
*
* Created by luke.imhoff on 2/27/15.
*/
-public interface Line {
+public interface Line extends Bodied, Fragmented {
}
diff --git a/src/org/elixir_lang/psi/QualifiedNoArgumentsCall.java b/src/org/elixir_lang/psi/QualifiedNoArgumentsCall.java
index ceb6aaeac..5e946d523 100644
--- a/src/org/elixir_lang/psi/QualifiedNoArgumentsCall.java
+++ b/src/org/elixir_lang/psi/QualifiedNoArgumentsCall.java
@@ -1,9 +1,10 @@
package org.elixir_lang.psi;
+import org.elixir_lang.psi.call.arguments.None;
import org.elixir_lang.psi.call.qualification.Qualified;
/**
* dotInfixOperator relativeIdentifier !CALL
*/
-public interface QualifiedNoArgumentsCall extends Qualified, Quotable {
+public interface QualifiedNoArgumentsCall extends None, Qualified, Quotable {
}
diff --git a/src/org/elixir_lang/psi/QualifiedNoParenthesesCall.java b/src/org/elixir_lang/psi/QualifiedNoParenthesesCall.java
index fbdb450fc..a32b8d2b1 100644
--- a/src/org/elixir_lang/psi/QualifiedNoParenthesesCall.java
+++ b/src/org/elixir_lang/psi/QualifiedNoParenthesesCall.java
@@ -1,10 +1,10 @@
package org.elixir_lang.psi;
+import org.elixir_lang.psi.call.arguments.NoParenthesesOneArgument;
import org.elixir_lang.psi.call.qualification.Qualified;
/**
* dotInfixOperator relativeIdentifier noParenthesesOneArgument
*/
-public interface QualifiedNoParenthesesCall extends Qualified, Quotable {
- ElixirNoParenthesesOneArgument getNoParenthesesOneArgument();
+public interface QualifiedNoParenthesesCall extends NoParenthesesOneArgument, Qualified, Quotable {
}
diff --git a/src/org/elixir_lang/psi/QualifiedParenthesesCall.java b/src/org/elixir_lang/psi/QualifiedParenthesesCall.java
index 8066bc946..86d7008f6 100644
--- a/src/org/elixir_lang/psi/QualifiedParenthesesCall.java
+++ b/src/org/elixir_lang/psi/QualifiedParenthesesCall.java
@@ -1,10 +1,10 @@
package org.elixir_lang.psi;
+import org.elixir_lang.psi.call.arguments.Parentheses;
import org.elixir_lang.psi.call.qualification.Qualified;
/**
* dotInfixOperator relativeIdentifier matchedParenthesesArguments
*/
-public interface QualifiedParenthesesCall extends Qualified, Quotable {
- ElixirMatchedParenthesesArguments getMatchedParenthesesArguments();
+public interface QualifiedParenthesesCall extends Parentheses, Qualified, Quotable {
}
diff --git a/src/org/elixir_lang/psi/SigilLine.java b/src/org/elixir_lang/psi/SigilLine.java
index 73103c433..c33dcb74a 100644
--- a/src/org/elixir_lang/psi/SigilLine.java
+++ b/src/org/elixir_lang/psi/SigilLine.java
@@ -3,6 +3,6 @@
/**
* Created by luke.imhoff on 2/27/15.
*/
-public interface SigilLine extends Bodied, Line, Sigil {
+public interface SigilLine extends Line, Sigil {
char terminator();
}
diff --git a/src/org/elixir_lang/psi/UnqualifiedNoArgumentsCall.java b/src/org/elixir_lang/psi/UnqualifiedNoArgumentsCall.java
index 00e5574be..314aa01b2 100644
--- a/src/org/elixir_lang/psi/UnqualifiedNoArgumentsCall.java
+++ b/src/org/elixir_lang/psi/UnqualifiedNoArgumentsCall.java
@@ -1,10 +1,11 @@
package org.elixir_lang.psi;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.None;
import org.elixir_lang.psi.qualification.Unqualified;
/**
* IDENTIFIER !KEYWORD_PAIR_COLON doBlock?
*/
-public interface UnqualifiedNoArgumentsCall extends Call, Quotable, Unqualified {
+public interface UnqualifiedNoArgumentsCall extends None, Call, Quotable, Unqualified {
}
diff --git a/src/org/elixir_lang/psi/UnqualifiedNoParenthesesCall.java b/src/org/elixir_lang/psi/UnqualifiedNoParenthesesCall.java
index 5b87f4c53..cdd029fbe 100644
--- a/src/org/elixir_lang/psi/UnqualifiedNoParenthesesCall.java
+++ b/src/org/elixir_lang/psi/UnqualifiedNoParenthesesCall.java
@@ -1,15 +1,18 @@
package org.elixir_lang.psi;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.NoParentheses;
+import org.elixir_lang.psi.call.arguments.NoParenthesesOneArgument;
import org.elixir_lang.psi.qualification.Unqualified;
+import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
/**
* IDENTIFIER noParenthesesOneArgument
*/
-public interface UnqualifiedNoParenthesesCall extends Call, Quotable, Unqualified {
+public interface UnqualifiedNoParenthesesCall extends Call, NoParenthesesOneArgument, Quotable, Unqualified {
+ @Contract(pure = true)
@NotNull
+ @Override
String functionName();
-
- ElixirNoParenthesesOneArgument getNoParenthesesOneArgument();
}
diff --git a/src/org/elixir_lang/psi/UnqualifiedParenthesesCall.java b/src/org/elixir_lang/psi/UnqualifiedParenthesesCall.java
index 7929b3653..75ba49538 100644
--- a/src/org/elixir_lang/psi/UnqualifiedParenthesesCall.java
+++ b/src/org/elixir_lang/psi/UnqualifiedParenthesesCall.java
@@ -1,11 +1,11 @@
package org.elixir_lang.psi;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.Parentheses;
import org.elixir_lang.psi.qualification.Unqualified;
/**
- * IDENTIFIER matchedParenthesesArguments
+ * {@code IDENTIFIER matchedParenthesesArguments}
*/
-public interface UnqualifiedParenthesesCall extends Call, Quotable, Unqualified {
- ElixirMatchedParenthesesArguments getMatchedParenthesesArguments();
+public interface UnqualifiedParenthesesCall extends Call, Parentheses, Quotable, Unqualified {
}
diff --git a/src/org/elixir_lang/psi/WhenOperation.java b/src/org/elixir_lang/psi/WhenOperation.java
new file mode 100644
index 000000000..7f9d2c0f2
--- /dev/null
+++ b/src/org/elixir_lang/psi/WhenOperation.java
@@ -0,0 +1,7 @@
+package org.elixir_lang.psi;
+
+/**
+ * ... when ...
+ */
+public interface WhenOperation extends InfixOperation {
+}
diff --git a/src/org/elixir_lang/psi/call/Call.java b/src/org/elixir_lang/psi/call/Call.java
index 7425c30a6..39ad5b4d5 100644
--- a/src/org/elixir_lang/psi/call/Call.java
+++ b/src/org/elixir_lang/psi/call/Call.java
@@ -1,13 +1,14 @@
package org.elixir_lang.psi.call;
import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
import org.elixir_lang.psi.ElixirDoBlock;
import org.jetbrains.annotations.Nullable;
/**
* A general function or macro call.
*/
-public interface Call {
+public interface Call extends PsiElement {
/**
*
* @return name of the function/macro as given in the source
@@ -35,6 +36,26 @@ public interface Call {
@Nullable
String moduleName();
+ /**
+ * The arguments directly after the {@link #functionName}. If the function cannot have arguments, then this will `null`
+ *
+ * @return {@code null} if function cannot take arguments, such as an ambiguous variable or no parentheses,
+ * no arguments, function call like {@code foo}.
+ * @return {@code PsiElement[]} if the function takes arguments. Importantly, {@code foo} can be distinguished from
+ * {@code foo()} because the formmer returns {@code null} while the latter returns {@code new PsiElement[0]}
+ */
+ @Nullable
+ PsiElement[] primaryArguments();
+
+ /**
+ * The arguments in the second set of parentheses.
+ *
+ * @return {@code null} if the call cannot or does not have a second set of parentheses.
+ * @return {@code PsiElement[]}
+ */
+ @Nullable
+ PsiElement[] secondaryArguments();
+
/**
* @return name of the function/macro after taking into account any imports
*/
diff --git a/src/org/elixir_lang/psi/call/arguments/NoParentheses.java b/src/org/elixir_lang/psi/call/arguments/NoParentheses.java
new file mode 100644
index 000000000..61ed97a7c
--- /dev/null
+++ b/src/org/elixir_lang/psi/call/arguments/NoParentheses.java
@@ -0,0 +1,33 @@
+package org.elixir_lang.psi.call.arguments;
+
+import com.intellij.psi.PsiElement;
+import org.elixir_lang.psi.ElixirMatchedParenthesesArguments;
+import org.elixir_lang.psi.ElixirNoParenthesesOneArgument;
+import org.elixir_lang.psi.call.Call;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * A call with no parentheses around the arguments
+ *
+ * {@code <...> noParenthesesOneArgument}
+ */
+public interface NoParentheses extends Call {
+ /**
+ * Unlike with a base {@link Call}, {@link NoParentheses#primaryArguments} are {@code @NotNull} because the first
+ * set of arguments has to be there or it would be a {@link None}
+ */
+ @Contract(pure = true)
+ @Override
+ @NotNull
+ PsiElement[] primaryArguments();
+
+ /**
+ * @return Always {@code null} because without parentheses, there is no way to separate sets of arguments.
+ */
+ @Contract(pure = true, value = "-> null")
+ @Override
+ @Nullable
+ PsiElement[] secondaryArguments();
+}
diff --git a/src/org/elixir_lang/psi/call/arguments/NoParenthesesOneArgument.java b/src/org/elixir_lang/psi/call/arguments/NoParenthesesOneArgument.java
new file mode 100644
index 000000000..892b428e0
--- /dev/null
+++ b/src/org/elixir_lang/psi/call/arguments/NoParenthesesOneArgument.java
@@ -0,0 +1,14 @@
+package org.elixir_lang.psi.call.arguments;
+
+import org.elixir_lang.psi.ElixirNoParenthesesOneArgument;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * Created by limhoff on 12/17/15.
+ */
+public interface NoParenthesesOneArgument extends NoParentheses {
+ @Contract(pure = true)
+ @NotNull
+ ElixirNoParenthesesOneArgument getNoParenthesesOneArgument();
+}
diff --git a/src/org/elixir_lang/psi/call/arguments/None.java b/src/org/elixir_lang/psi/call/arguments/None.java
new file mode 100644
index 000000000..26684eb63
--- /dev/null
+++ b/src/org/elixir_lang/psi/call/arguments/None.java
@@ -0,0 +1,31 @@
+package org.elixir_lang.psi.call.arguments;
+
+import com.intellij.psi.PsiElement;
+import org.elixir_lang.psi.ElixirMatchedParenthesesArguments;
+import org.elixir_lang.psi.call.Call;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+/**
+ * A call with no arguments; not even empty parentheses.
+ */
+public interface None extends Call {
+ /**
+ * @return Always {@code null} because a no argument call by definition has no arguments, not even an empty list
+ * of arguments.
+ */
+ @Contract(pure = true, value = "-> null")
+ @Override
+ @Nullable
+ PsiElement[] primaryArguments();
+
+ /**
+ * @return Always {@code null} because a no argument call doesn't ever have {@link #primaryArguments}, so it can't
+ * have secondary arguments.
+ */
+ @Contract(pure = true, value = "-> null")
+ @Override
+ @Nullable
+ PsiElement[] secondaryArguments();
+}
diff --git a/src/org/elixir_lang/psi/call/arguments/Parentheses.java b/src/org/elixir_lang/psi/call/arguments/Parentheses.java
new file mode 100644
index 000000000..d356d2f00
--- /dev/null
+++ b/src/org/elixir_lang/psi/call/arguments/Parentheses.java
@@ -0,0 +1,27 @@
+package org.elixir_lang.psi.call.arguments;
+
+import com.intellij.psi.PsiElement;
+import org.elixir_lang.psi.ElixirMatchedParenthesesArguments;
+import org.elixir_lang.psi.call.Call;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * A call with one or two sets of parentheses containing arguments inside a {@code matchedParenthesesArguments}
+ *
+ * {@code <...> matchedParenthesesArguments}
+ */
+public interface Parentheses extends Call {
+ @Contract(pure = true)
+ @NotNull
+ ElixirMatchedParenthesesArguments getMatchedParenthesesArguments();
+
+ /**
+ * Unlike with a base {@link Call}, {@link Parentheses#primaryArguments} are {@code @NotNull} because the first set
+ * of parentheses has to be there or it wouldn't be a {@link Parentheses}
+ */
+ @Contract(pure = true)
+ @Override
+ @NotNull
+ PsiElement[] primaryArguments();
+}
diff --git a/src/org/elixir_lang/psi/impl/ElixirPsiImplUtil.java b/src/org/elixir_lang/psi/impl/ElixirPsiImplUtil.java
index a13831015..c7903be0c 100644
--- a/src/org/elixir_lang/psi/impl/ElixirPsiImplUtil.java
+++ b/src/org/elixir_lang/psi/impl/ElixirPsiImplUtil.java
@@ -13,6 +13,10 @@
import org.elixir_lang.Macro;
import org.elixir_lang.psi.*;
import org.elixir_lang.psi.call.Call;
+import org.elixir_lang.psi.call.arguments.NoParentheses;
+import org.elixir_lang.psi.call.arguments.NoParenthesesOneArgument;
+import org.elixir_lang.psi.call.arguments.None;
+import org.elixir_lang.psi.call.arguments.Parentheses;
import org.elixir_lang.psi.qualification.Qualified;
import org.elixir_lang.psi.qualification.Unqualified;
import org.jetbrains.annotations.Contract;
@@ -73,6 +77,74 @@ public class ElixirPsiImplUtil {
public static final int UNKNOWN_BASE = 36;
public static final TokenSet IDENTIFIER_TOKEN_SET = TokenSet.create(ElixirTypes.IDENTIFIER);
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(@NotNull final ElixirMapConstructionArguments mapConstructionArguments) {
+ return mapConstructionArguments.getChildren();
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(ElixirNoParenthesesManyArguments noParenthesesManyArguments) {
+ Arguments arguments = noParenthesesManyArguments.getNoParenthesesOnePositionalAndKeywordsArguments();
+
+ if (arguments == null) {
+ arguments = noParenthesesManyArguments.getNoParenthesesManyPositionalAndMaybeKeywordsArguments();
+ }
+
+ return arguments.arguments();
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(@NotNull final ElixirNoParenthesesOneArgument noParenthesesOneArgument) {
+ PsiElement[] children = noParenthesesOneArgument.getChildren();
+
+ assert children.length == 1;
+
+ PsiElement child = children[0];
+ PsiElement[] arguments;
+
+ if (child instanceof Arguments) {
+ Arguments childArguments = (Arguments) child;
+ arguments = childArguments.arguments();
+ } else {
+ arguments = children;
+ }
+
+ return arguments;
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(ElixirNoParenthesesManyPositionalAndMaybeKeywordsArguments noParenthesesManyPositionalAndMaybeKeywordsArguments) {
+ return noParenthesesManyPositionalAndMaybeKeywordsArguments.getChildren();
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(@NotNull final ElixirNoParenthesesOnePositionalAndKeywordsArguments noParenthesesOnePositionalAndKeywordsArguments) {
+ PsiElement noParenthesesFirstPositional = noParenthesesOnePositionalAndKeywordsArguments.getNoParenthesesFirstPositional();
+ PsiElement noParenthesesKeywords = noParenthesesOnePositionalAndKeywordsArguments.getNoParenthesesKeywords();
+
+ return new PsiElement[]{
+ noParenthesesFirstPositional,
+ noParenthesesKeywords
+ };
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(@NotNull final ElixirNoParenthesesStrict noParenthesesStrict) {
+ return noParenthesesStrict.getChildren();
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] arguments(@NotNull final ElixirParenthesesArguments parenthesesArguments) {
+ return parenthesesArguments.getChildren();
+ }
+
@Contract(pure = true)
@NotNull
public static int base(@SuppressWarnings("unused") @NotNull final ElixirBinaryDigits binaryDigits) {
@@ -506,6 +578,16 @@ public static boolean isUnquoted(PsiElement element) {
return unquoted;
}
+ @Contract(pure = true)
+ @NotNull
+ public static Quotable leftOperand(InfixOperation infixOperation) {
+ PsiElement[] children = infixOperation.getChildren();
+
+ assert children.length == 3;
+
+ return (Quotable) children[0];
+ }
+
/* Returns the 0-indexed line number for the element */
public static int lineNumber(ASTNode node) {
return document(node.getPsi()).getLineNumber(node.getStartOffset());
@@ -575,6 +657,16 @@ public static String moduleName(@NotNull final Qualified qualified) {
return qualified.getFirstChild().getText();
}
+ @Contract(pure = true)
+ @NotNull
+ public static Operator operator(InfixOperation infixOperation) {
+ PsiElement[] children = infixOperation.getChildren();
+
+ assert children.length == 3;
+
+ return (Operator) children[1];
+ }
+
@Contract(pure = true)
@NotNull
public static ASTNode operatorTokenNode(@NotNull Operator operator) {
@@ -705,6 +797,52 @@ public static TokenSet operatorTokenSet(@SuppressWarnings("unused") final Elixir
return TokenSet.create(ElixirTypes.WHEN_OPERATOR);
}
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] primaryArguments(@NotNull final DotCall dotCall) {
+ List parenthesesArgumentsList = dotCall.getParenthesesArgumentsList();
+
+ ElixirParenthesesArguments primaryParenthesesArguments = parenthesesArgumentsList.get(0);
+ return primaryParenthesesArguments.arguments();
+ }
+
+ @Contract(pure = true)
+ @Nullable
+ public static PsiElement[] primaryArguments(@NotNull final ElixirUnqualifiedNoParenthesesManyArgumentsCall unqualifiedNoParenthesesManyArgumentsCall) {
+ Arguments arguments = unqualifiedNoParenthesesManyArgumentsCall.getNoParenthesesManyArguments();
+
+ if (arguments == null) {
+ arguments = unqualifiedNoParenthesesManyArgumentsCall.getNoParenthesesStrict();
+ }
+
+ assert arguments != null;
+
+ return arguments.arguments();
+ }
+
+ @Contract(pure = true)
+ @Nullable
+ public static PsiElement[] primaryArguments(@NotNull @SuppressWarnings("unused") final None none) {
+ return null;
+ }
+
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] primaryArguments(@NotNull final NoParenthesesOneArgument noParenthesesOneArgument) {
+ return noParenthesesOneArgument.getNoParenthesesOneArgument().arguments();
+ }
+
+ @Contract(pure = true)
+ @NotNull
+ public static PsiElement[] primaryArguments(@NotNull final Parentheses parentheses) {
+ ElixirMatchedParenthesesArguments matchedParenthesesArguments = parentheses.getMatchedParenthesesArguments();
+ List parenthesesArgumentsList = matchedParenthesesArguments.getParenthesesArgumentsList();
+
+ ElixirParenthesesArguments primaryParenthesesArguments = parenthesesArgumentsList.get(0);
+ return primaryParenthesesArguments.arguments();
+ }
+
public static boolean processDeclarations(@NotNull final ElixirAccessExpression accessExpression,
@NotNull PsiScopeProcessor processor,
@NotNull ResolveState state,
@@ -814,9 +952,21 @@ public static OtpErlangObject quote(@NotNull final AssociationOperation associat
@Contract(pure = true)
@NotNull
public static OtpErlangObject quote(@NotNull final InfixOperation infixOperation) {
- PsiElement[] children = infixOperation.getChildren();
+ Quotable leftOperand = infixOperation.leftOperand();
+ OtpErlangObject quotedLeftOperand = leftOperand.quote();
+
+ Operator operator = infixOperation.operator();
+ OtpErlangObject quotedOperator = operator.quote();
+
+ Quotable rightOperand = infixOperation.rightOperand();
+ OtpErlangObject quotedRightOperand = rightOperand.quote();
- return quoteInfixOperationChildren(children);
+ return quotedFunctionCall(
+ quotedOperator,
+ metadata(operator),
+ quotedLeftOperand,
+ quotedRightOperand
+ );
}
@Contract(pure = true)
@@ -1214,6 +1364,11 @@ public static Body getBody(ElixirCharListHeredocLine charListHeredocLine) {
return charListHeredocLine.getQuoteCharListBody();
}
+ @NotNull
+ public static Body getBody(@NotNull final ElixirCharListLine charListLine) {
+ return charListLine.getQuoteCharListBody();
+ }
+
public static Body getBody(ElixirInterpolatedCharListHeredocLine interpolatedCharListHeredocLine) {
return interpolatedCharListHeredocLine.getInterpolatedCharListBody();
}
@@ -1298,6 +1453,10 @@ public static Body getBody(ElixirStringHeredocLine stringHeredocLine) {
return stringHeredocLine.getQuoteStringBody();
}
+ public static Body getBody(@NotNull final ElixirStringLine stringLine) {
+ return stringLine.getQuoteStringBody();
+ }
+
@Contract(pure = true, value = "_ -> null")
@Nullable
public static ElixirDoBlock getDoBlock(@NotNull @SuppressWarnings("unused") final ElixirUnqualifiedNoParenthesesManyArgumentsCall unqualifiedNoParenthesesManyArgumentsCall) {
@@ -1372,7 +1531,7 @@ public static List getHeredocLineList(ElixirInterpolatedRegexHeredo
return heredocLineList;
}
-
+
public static List getHeredocLineList(ElixirInterpolatedSigilHeredoc interpolatedSigilHeredoc) {
List interpolatedSigilHeredocLines = interpolatedSigilHeredoc.getInterpolatedSigilHeredocLineList();
List heredocLineList = new ArrayList(interpolatedSigilHeredocLines.size());
@@ -1427,7 +1586,7 @@ public static List getHeredocLineList(ElixirLiteralSigilHeredoc lit
return heredocLineList;
}
-
+
public static List getHeredocLineList(ElixirLiteralStringSigilHeredoc literalStringSigilHeredoc) {
List literalStringHeredocLines = literalStringSigilHeredoc.getLiteralStringHeredocLineList();
List heredocLineList = new ArrayList(literalStringHeredocLines.size());
@@ -1437,8 +1596,8 @@ public static List getHeredocLineList(ElixirLiteralStringSigilHered
}
return heredocLineList;
- }
-
+ }
+
public static List getHeredocLineList(ElixirLiteralWordsHeredoc literalWordsSigilHeredoc) {
List literalWordsHeredocLines = literalWordsSigilHeredoc.getLiteralWordsHeredocLineList();
List heredocLineList = new ArrayList(literalWordsHeredocLines.size());
@@ -1449,7 +1608,7 @@ public static List getHeredocLineList(ElixirLiteralWordsHeredoc lit
return heredocLineList;
}
-
+
public static List getHeredocLineList(ElixirStringHeredoc stringHeredoc) {
List stringHeredocLineList = stringHeredoc.getStringHeredocLineList();
List heredocLineList = new ArrayList(stringHeredocLineList.size());
@@ -1727,7 +1886,7 @@ public static OtpErlangObject quoteAsAtom(@NotNull final ElixirCharListLine char
return quotedAsAtom;
}
-
+
@Contract(pure = true)
@NotNull
public static OtpErlangObject quoteAsAtom(@NotNull final ElixirStringLine stringLine) {
@@ -1749,7 +1908,7 @@ public static OtpErlangObject quoteAsAtom(@NotNull final ElixirStringLine string
UTF_8
);
}
-
+
return quotedAsAtom;
}
@@ -3012,21 +3171,21 @@ public static OtpErlangObject[] quoteArguments(@NotNull final ElixirDoBlock doBl
@Contract(pure = true)
@NotNull
public static OtpErlangObject[] quoteArguments(@NotNull final ElixirMapConstructionArguments mapConstructionArguments) {
- PsiElement[] children = mapConstructionArguments.getChildren();
- List quotedChildList = new ArrayList();
+ PsiElement[] arguments = mapConstructionArguments.arguments();
+ List quotedArgumentList = new ArrayList();
- for (PsiElement child : children) {
- Quotable quotableChild = (Quotable) child;
- OtpErlangList quotedChild = (OtpErlangList) quotableChild.quote();
+ for (PsiElement argument : arguments) {
+ Quotable quotableArgument = (Quotable) argument;
+ OtpErlangList quotedArgument = (OtpErlangList) quotableArgument.quote();
- for (OtpErlangObject element : quotedChild.elements()) {
- quotedChildList.add(element);
+ for (OtpErlangObject element : quotedArgument.elements()) {
+ quotedArgumentList.add(element);
}
}
- OtpErlangObject[] quotedArguments = new OtpErlangObject[quotedChildList.size()];
+ OtpErlangObject[] quotedArguments = new OtpErlangObject[quotedArgumentList.size()];
- return quotedChildList.toArray(quotedArguments);
+ return quotedArgumentList.toArray(quotedArguments);
}
@Contract(pure = true)
@@ -3073,6 +3232,7 @@ public static OtpErlangObject[] quoteArguments(ElixirNoParenthesesManyPositional
return quotedChildren;
}
+
@Contract(pure = true)
@NotNull
public static OtpErlangObject[] quoteArguments(@NotNull final ElixirNoParenthesesOneArgument noParenthesesOneArgument) {
@@ -3143,12 +3303,12 @@ public static OtpErlangObject[] quoteArguments(ElixirNoParenthesesStrict noParen
@Contract(pure = true)
@NotNull
public static OtpErlangObject[] quoteArguments(ElixirParenthesesArguments parenthesesArguments) {
- PsiElement[] children = parenthesesArguments.getChildren();
+ PsiElement[] arguments = parenthesesArguments.arguments();
- OtpErlangObject[] quotedArguments = new OtpErlangObject[children.length];
+ OtpErlangObject[] quotedArguments = new OtpErlangObject[arguments.length];
- for (int i = 0; i < children.length; i++) {
- Quotable quotableChild = (Quotable) children[i];
+ for (int i = 0; i < arguments.length; i++) {
+ Quotable quotableChild = (Quotable) arguments[i];
OtpErlangObject quotedChild = quotableChild.quote();
quotedArguments[i] = quotedChild;
}
@@ -3361,30 +3521,6 @@ public static OtpErlangTuple quotedFunctionCall(final OtpErlangObject quotedQual
);
}
- @Contract(pure = true)
- @NotNull
- private static OtpErlangObject quoteInfixOperationChildren(PsiElement... children) {
- if (children.length != 3) {
- throw new NotImplementedException("BinaryOperation expected to have 3 children (left operand, operator, right operand");
- }
-
- Quotable leftOperand = (Quotable) children[0];
- OtpErlangObject quotedLeftOperand = leftOperand.quote();
-
- Operator operator = (Operator) children[1];
- OtpErlangObject quotedOperator = operator.quote();
-
- Quotable rightOperand = (Quotable) children[2];
- OtpErlangObject quotedRightOperand = rightOperand.quote();
-
- return quotedFunctionCall(
- quotedOperator,
- metadata(operator),
- quotedLeftOperand,
- quotedRightOperand
- );
- }
-
@Contract(pure = true)
@NotNull
public static OtpErlangObject quotedVariable(@NotNull final PsiElement variable) {
@@ -3544,6 +3680,61 @@ public static String resolvedModuleName(@NotNull @SuppressWarnings("unused") fin
return "Elixir.Kernel";
}
+ @Contract(pure = true)
+ @NotNull
+ public static Quotable rightOperand(InfixOperation infixOperation) {
+ PsiElement[] children = infixOperation.getChildren();
+
+ assert children.length == 3;
+
+ return (Quotable) children[2];
+ }
+
+ @Contract(pure = true)
+ @Nullable
+ public static PsiElement[] secondaryArguments(@NotNull final DotCall dotCall) {
+ List parenthesesArgumentsList = dotCall.getParenthesesArgumentsList();
+ PsiElement[] arguments;
+
+ if (parenthesesArgumentsList.size() < 2) {
+ arguments = null;
+ } else {
+ ElixirParenthesesArguments parenthesesArguments = parenthesesArgumentsList.get(1);
+ arguments = parenthesesArguments.arguments();
+ }
+
+ return arguments;
+ }
+
+ @Contract(pure = true, value = "_ -> null")
+ @Nullable
+ public static PsiElement[] secondaryArguments(@NotNull @SuppressWarnings("unused") final None none) {
+ return null;
+ }
+
+ @Contract(pure = true, value = "_ -> null")
+ @Nullable
+ public static PsiElement[] secondaryArguments(@NotNull @SuppressWarnings("unused") final NoParentheses noParentheses) {
+ return null;
+ }
+
+ @Contract(pure = true)
+ @Nullable
+ public static PsiElement[] secondaryArguments(@NotNull final Parentheses parentheses) {
+ ElixirMatchedParenthesesArguments matchedParenthesesArguments = parentheses.getMatchedParenthesesArguments();
+ List parenthesesArgumentsList = matchedParenthesesArguments.getParenthesesArgumentsList();
+ PsiElement[] arguments;
+
+ if (parenthesesArgumentsList.size() < 2) {
+ arguments = null;
+ } else {
+ ElixirParenthesesArguments parenthesesArguments = parenthesesArgumentsList.get(1);
+ arguments = parenthesesArguments.arguments();
+ }
+
+ return arguments;
+ }
+
@NotNull
public static PsiElement setName(@NotNull PsiElement element, @NotNull String newName) {
return null;
diff --git a/src/org/elixir_lang/psi/qualification/Unqualified.java b/src/org/elixir_lang/psi/qualification/Unqualified.java
index 16f9b24c5..1ad16cb63 100644
--- a/src/org/elixir_lang/psi/qualification/Unqualified.java
+++ b/src/org/elixir_lang/psi/qualification/Unqualified.java
@@ -1,6 +1,9 @@
package org.elixir_lang.psi.qualification;
+import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
+import org.jetbrains.annotations.Contract;
+import org.jetbrains.annotations.NotNull;
/**
* IDENTIFIER ...
diff --git a/testData/org/elixir_lang/annotator/module_attribute/module_attributes.ex b/testData/org/elixir_lang/annotator/module_attribute/module_attributes.ex
new file mode 100644
index 000000000..79167c4bf
--- /dev/null
+++ b/testData/org/elixir_lang/annotator/module_attribute/module_attributes.ex
@@ -0,0 +1,50 @@
+# Preferences > Editors > Colors & Fonts > Elixir setting name in comments above each paragraph
+defmodule ModuleAttributes do
+ # `@moduledoc` - Documention Module Attributes
+ # `@moduledoc` heredoc - Documention Text
+ @moduledoc """
+ String Heredocs are highlighted as Documentation Text
+ """
+
+ # `@doc` - Documentation Module Attributes
+ # `@doc` string - Documentation Text
+ # `@callback` - Module Attributes
+ # `callback_name` - Specification
+ # `atom` - Type
+ @doc "A callback"
+ @callback callback_name(atom) :: {:ok, atom} | :error
+
+ # `@macrocallback` - Module Attributes
+ # `macro_callback_name` - Spcification
+ # `list`, `tuple` - Type
+ @macrocallback macro_callback_name(list) :: tuple
+
+ # Types
+
+ # `@typedoc` - Documentation Module Attributes
+ # `@typedoc` string - Documentation Text
+ # `@opaque` - Module Attributes
+ # `opaque_type` - Type
+ @typedoc "Don't think about how this works"
+ @opaque opaque_type :: [1, 2]
+
+ # `@type` - Module Attributes
+ # `type_with_parameters` - Type
+ # `a`, `b` - Type Parameter
+ @type type_with_parameters(a, b) :: {a, b}
+
+ @type type_name :: {:ok, list}
+
+ # `@spec` - Module Attributes
+ # `do_it` - Specificaton
+ # `any` - Type
+ @spec do_it({:ok, any}) :: :ok
+ def do_it({:ok, _}), do: :ok
+
+ # `@spec` - Module Attributes
+ # `do_nothing` - Specification
+ # `result` - Type Parameter
+ # `any` - Type
+ @spec do_nothing(result) :: result when result: {:error, any}
+ def do_nothing(result = {:error, _}), do: result
+end