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