Skip to content

Commit 7d499c3

Browse files
committed
Add support for long numeric type
1 parent 5201b7e commit 7d499c3

File tree

13 files changed

+362
-220
lines changed

13 files changed

+362
-220
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# intellij-runescript Changelog
22

33
## [Unreleased]
4+
- Add support for long numeric type.
45

56
## [1.4.1] - 2023-10-16
67

src/main/gen/io/runescript/plugin/lang/lexer/_RsLexer.java

Lines changed: 206 additions & 195 deletions
Large diffs are not rendered by default.

src/main/gen/io/runescript/plugin/lang/parser/RsParser.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ static boolean parse_root_(IElementType t, PsiBuilder b, int l) {
5050
create_token_set_(ARITHMETIC_EXPRESSION, ARITHMETIC_VALUE_EXPRESSION, ARRAY_ACCESS_EXPRESSION, BOOLEAN_LITERAL_EXPRESSION,
5151
CALC_EXPRESSION, COMMAND_EXPRESSION, CONDITION_EXPRESSION, CONSTANT_EXPRESSION,
5252
COORD_LITERAL_EXPRESSION, DYNAMIC_EXPRESSION, EXPRESSION, GOSUB_EXPRESSION,
53-
INTEGER_LITERAL_EXPRESSION, LOCAL_VARIABLE_EXPRESSION, NULL_LITERAL_EXPRESSION, PAR_EXPRESSION,
54-
RELATIONAL_VALUE_EXPRESSION, SCOPED_VARIABLE_EXPRESSION, STRING_INTERPOLATION_EXPRESSION, STRING_LITERAL_EXPRESSION,
55-
SWITCH_CASE_DEFAULT_EXPRESSION),
53+
INTEGER_LITERAL_EXPRESSION, LOCAL_VARIABLE_EXPRESSION, LONG_LITERAL_EXPRESSION, NULL_LITERAL_EXPRESSION,
54+
PAR_EXPRESSION, RELATIONAL_VALUE_EXPRESSION, SCOPED_VARIABLE_EXPRESSION, STRING_INTERPOLATION_EXPRESSION,
55+
STRING_LITERAL_EXPRESSION, SWITCH_CASE_DEFAULT_EXPRESSION),
5656
};
5757

5858
/* ********************************************************** */
@@ -776,6 +776,7 @@ public static boolean IntegerLiteralExpression(PsiBuilder b, int l) {
776776

777777
/* ********************************************************** */
778778
// IntegerLiteralExpression
779+
// | LongLiteralExpression
779780
// | CoordLiteralExpression
780781
// | BooleanLiteralExpression
781782
// | NullLiteralExpression
@@ -785,6 +786,7 @@ static boolean LiteralExpression(PsiBuilder b, int l) {
785786
boolean r;
786787
Marker m = enter_section_(b, l, _NONE_, null, "<Expression>");
787788
r = IntegerLiteralExpression(b, l + 1);
789+
if (!r) r = LongLiteralExpression(b, l + 1);
788790
if (!r) r = CoordLiteralExpression(b, l + 1);
789791
if (!r) r = BooleanLiteralExpression(b, l + 1);
790792
if (!r) r = NullLiteralExpression(b, l + 1);
@@ -936,6 +938,18 @@ private static boolean LogicalOrWrapper_1(PsiBuilder b, int l) {
936938
return true;
937939
}
938940

941+
/* ********************************************************** */
942+
// LONG
943+
public static boolean LongLiteralExpression(PsiBuilder b, int l) {
944+
if (!recursion_guard_(b, l, "LongLiteralExpression")) return false;
945+
if (!nextTokenIs(b, "<Expression>", LONG)) return false;
946+
boolean r;
947+
Marker m = enter_section_(b, l, _NONE_, LONG_LITERAL_EXPRESSION, "<Expression>");
948+
r = consumeToken(b, LONG);
949+
exit_section_(b, l, m, r, false, null);
950+
return r;
951+
}
952+
939953
/* ********************************************************** */
940954
// IDENTIFIER | DEFINE_TYPE | TYPE_LITERAL | ARRAY_TYPE_LITERAL | WHILE | IF | TRUE | FALSE | NULL | SWITCH
941955
public static boolean NameLiteral(PsiBuilder b, int l) {

src/main/gen/io/runescript/plugin/lang/psi/RsElementTypes.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public interface RsElementTypes {
3636
IElementType INTEGER_LITERAL_EXPRESSION = new RsElementType("INTEGER_LITERAL_EXPRESSION");
3737
IElementType LOCAL_VARIABLE_DECLARATION_STATEMENT = new RsElementType("LOCAL_VARIABLE_DECLARATION_STATEMENT");
3838
IElementType LOCAL_VARIABLE_EXPRESSION = StubElementTypeFactory.create("LOCAL_VARIABLE_EXPRESSION");
39+
IElementType LONG_LITERAL_EXPRESSION = new RsElementType("LONG_LITERAL_EXPRESSION");
3940
IElementType NAME_LITERAL = StubElementTypeFactory.create("NAME_LITERAL");
4041
IElementType NULL_LITERAL_EXPRESSION = new RsElementType("NULL_LITERAL_EXPRESSION");
4142
IElementType PARAMETER = StubElementTypeFactory.create("PARAMETER");
@@ -80,6 +81,7 @@ public interface RsElementTypes {
8081
IElementType INTEGER = new RsElementType("INTEGER");
8182
IElementType LBRACE = new RsElementType("{");
8283
IElementType LBRACKET = new RsElementType("[");
84+
IElementType LONG = new RsElementType("LONG");
8385
IElementType LPAREN = new RsElementType("(");
8486
IElementType LT = new RsElementType("<");
8587
IElementType LTE = new RsElementType("<=");
@@ -187,6 +189,9 @@ else if (type == LOCAL_VARIABLE_DECLARATION_STATEMENT) {
187189
else if (type == LOCAL_VARIABLE_EXPRESSION) {
188190
return new RsLocalVariableExpressionImpl(node);
189191
}
192+
else if (type == LONG_LITERAL_EXPRESSION) {
193+
return new RsLongLiteralExpressionImpl(node);
194+
}
190195
else if (type == NAME_LITERAL) {
191196
return new RsNameLiteralImpl(node);
192197
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// This class is automatically generated. Do not edit.
2+
package io.runescript.plugin.lang.psi;
3+
4+
import java.util.List;
5+
import org.jetbrains.annotations.*;
6+
import com.intellij.psi.PsiElement;
7+
8+
public interface RsLongLiteralExpression extends RsExpression {
9+
10+
@NotNull
11+
PsiElement getLong();
12+
13+
}

src/main/gen/io/runescript/plugin/lang/psi/RsVisitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ public void visitLocalVariableExpression(@NotNull RsLocalVariableExpression o) {
126126
// visitNamedElement(o);
127127
}
128128

129+
public void visitLongLiteralExpression(@NotNull RsLongLiteralExpression o) {
130+
visitExpression(o);
131+
}
132+
129133
public void visitNameLiteral(@NotNull RsNameLiteral o) {
130134
visitPsiElement(o);
131135
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// This class is automatically generated. Do not edit.
2+
package io.runescript.plugin.lang.psi.impl;
3+
4+
import java.util.List;
5+
import org.jetbrains.annotations.*;
6+
import com.intellij.lang.ASTNode;
7+
import com.intellij.psi.PsiElement;
8+
import com.intellij.psi.PsiElementVisitor;
9+
import com.intellij.psi.util.PsiTreeUtil;
10+
import static io.runescript.plugin.lang.psi.RsElementTypes.*;
11+
import io.runescript.plugin.lang.psi.*;
12+
13+
public class RsLongLiteralExpressionImpl extends RsExpressionImpl implements RsLongLiteralExpression {
14+
15+
public RsLongLiteralExpressionImpl(@NotNull ASTNode node) {
16+
super(node);
17+
}
18+
19+
@Override
20+
public void accept(@NotNull RsVisitor visitor) {
21+
visitor.visitLongLiteralExpression(this);
22+
}
23+
24+
@Override
25+
public void accept(@NotNull PsiElementVisitor visitor) {
26+
if (visitor instanceof RsVisitor) accept((RsVisitor)visitor);
27+
else super.accept(visitor);
28+
}
29+
30+
@Override
31+
@NotNull
32+
public PsiElement getLong() {
33+
return notNullChild(findChildByType(LONG));
34+
}
35+
36+
}

src/main/grammars/RuneScript.bnf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -240,11 +240,13 @@ ScopedVariableExpression ::= '%' NameLiteral {
240240
}
241241

242242
private LiteralExpression ::= IntegerLiteralExpression
243+
| LongLiteralExpression
243244
| CoordLiteralExpression
244245
| BooleanLiteralExpression
245246
| NullLiteralExpression
246247
| StringLiteralExpression
247248
IntegerLiteralExpression ::= INTEGER
249+
LongLiteralExpression ::= LONG
248250
CoordLiteralExpression ::= COORDGRID
249251
BooleanLiteralExpression ::= TRUE | FALSE
250252
NullLiteralExpression ::= NULL

src/main/grammars/RuneScript.flex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,12 @@ IDENTIFIER = ({IDENTIFIER_PART})+
4747
DECIMAL_DIGIT = [0-9]
4848
HEX_DIGIT = [0-9a-fA-F]
4949
HEX_INTEGER = 0[xX]({HEX_DIGIT})+
50+
LONG_HEX_INTEGER = 0[xX]({HEX_DIGIT})+ [lL]
5051
DECIMAL_INTEGER = (({DECIMAL_DIGIT})+)
52+
LONG_DECIMAL_INTEGER = (({DECIMAL_DIGIT})+) [lL]
5153
COORDGRID = {DECIMAL_INTEGER}_{DECIMAL_INTEGER}_{DECIMAL_INTEGER}_{DECIMAL_INTEGER}_{DECIMAL_INTEGER}
5254
INTEGER = ([-+]?)(({DECIMAL_INTEGER})|({HEX_INTEGER}))
55+
LONG = ([-+]?)(({LONG_DECIMAL_INTEGER})|({LONG_HEX_INTEGER}))
5356
STRING_ESCAPE_SEQUENCE=\\([abfnrtv\'\"\\])
5457
STRING_PART = [^\"\r\n<\\]+
5558

@@ -99,6 +102,7 @@ INCOMPLETE_TAG = "<"(shad|col|str|u|img)"="
99102
\" { pushState(STRING); return STRING_START; }
100103

101104
{COORDGRID} { return COORDGRID; }
105+
{LONG} { return LONG; }
102106
{INTEGER} { return INTEGER; }
103107

104108

src/main/kotlin/io/runescript/plugin/ide/codeInsight/RsInlayParameterHintsProvider.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ class RsInlayParameterHintsProvider : InlayParameterHintsProvider {
6161
unwrappedExpression = unwrappedExpression.expression
6262
}
6363
return unwrappedExpression !is RsIntegerLiteralExpression
64+
&& unwrappedExpression !is RsLongLiteralExpression
6465
&& unwrappedExpression !is RsBooleanLiteralExpression
6566
&& unwrappedExpression !is RsStringLiteralExpression
6667
&& unwrappedExpression !is RsNullLiteralExpression

0 commit comments

Comments
 (0)