Skip to content

Commit 8edb692

Browse files
author
miheevks
committed
support pragma ton-solidity
1 parent bf18d2f commit 8edb692

File tree

12 files changed

+55
-24
lines changed

12 files changed

+55
-24
lines changed

src/main/grammars/_SolidityLexer.flex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ UFIXEDNUMTYPE=ufixed(0x8|0x16|0x24|0x32|0x40|0x48|0x56|0x64|0x72|0x80|0x88|0x96|
5050
BOOLEANLITERAL=true|false
5151
SPACE=[ \t\n\x0B\f\r]+
5252
IDENTIFIER=[a-zA-Z_$][a-zA-Z_$0-9]*
53+
PRAGMAIDENTIFIER=[a-zA-Z_$][a-zA-Z_$0-9-]*
5354
// Pragma parses anything up to the trailing ';' to be fully forward-compatible.
5455
PRAGMAALL=[^ ][^;]*
5556

@@ -228,6 +229,7 @@ PRAGMAALL=[^ ][^;]*
228229
{BOOLEANLITERAL} { return BOOLEANLITERAL; }
229230
{SPACE} { return SPACE; }
230231
{IDENTIFIER} { return IDENTIFIER; }
232+
{PRAGMAIDENTIFIER} { return PRAGMAIDENTIFIER; }
231233
}
232234

233235
// nested block comments are not supported, so don't track the occurrences of /*
@@ -286,9 +288,9 @@ PRAGMAALL=[^ ][^;]*
286288
<PRAGMA_OPEN> {
287289
{WHITE_SPACE} { return WHITE_SPACE; }
288290

289-
{IDENTIFIER} {
291+
{PRAGMAIDENTIFIER} {
290292
yybegin(PRAGMA_REST);
291-
return IDENTIFIER;
293+
return PRAGMAIDENTIFIER;
292294
}
293295

294296
<<EOF>> { yybegin(YYINITIAL); }

src/main/grammars/grammar.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
SourceUnit = (PragmaDirective | ImportDirective | ContractDefinition)*
22

33
// Pragma actually parses anything up to the trailing ';' to be fully forward-compatible.
4-
PragmaDirective = 'pragma' Identifier ([^;]+) ';'
4+
PragmaDirective = 'pragma' PragmaIdentifier ([^;]+) ';'
55

66
ImportDirective = 'import' StringLiteral ('as' Identifier)? ';'
77
| 'import' ('*' | Identifier) ('as' Identifier)? 'from' StringLiteral ';'

src/main/grammars/solidity.bnf

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
space='regexp:\s+'
3333

3434
Identifier='regexp:[a-zA-Z_$][a-zA-Z_$0-9]*'
35+
pragmaIdentifier='regexp:[a-zA-Z_$][a-zA-Z_$0-9-]*'
3536

3637
DOT='.'
3738
COLON=':'
@@ -110,7 +111,7 @@ private UntilSemicolonRecover ::= !(';')
110111
private UntilBraceRecover ::= !('}')
111112

112113
// Pragma actually parses anything up to the trailing ';' to be fully forward-compatible.
113-
private PragmaPart ::= pragma Identifier pragmaAll {
114+
private PragmaPart ::= pragma pragmaIdentifier pragmaAll {
114115
pin = 2
115116
recoverWhile = UntilSemicolonRecover
116117
}

src/main/kotlin/me/serce/solidity/ide/formatting/SolidityFormattingModelBuilder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ class SolidityFormattingModelBuilder : FormattingModelBuilder {
6565
.after(CONTROL_STRUCTURES).spaces(1)
6666
.beforeInside(STATEMENT, TokenSet.create(IF_STATEMENT, WHILE_STATEMENT, FOR_STATEMENT, DO_WHILE_STATEMENT)).spaces(1)
6767
.after(CONTRACT).spaces(1)
68-
.aroundInside(IDENTIFIER, TokenSet.create(CONTRACT_DEFINITION, PRAGMA_DIRECTIVE, STRUCT_DEFINITION, PARAMETER_DEF)).spaces(1)
68+
.aroundInside(IDENTIFIER, TokenSet.create(CONTRACT_DEFINITION, STRUCT_DEFINITION, PARAMETER_DEF)).spaces(1)
69+
.aroundInside(PRAGMAIDENTIFIER, PRAGMA_DIRECTIVE).spaces(1)
6970
.afterInside(TYPE_NAME, TokenSet.create(VARIABLE_DECLARATION, PARAMETER_LIST, INDEXED_PARAMETER_LIST)).spaces(1)
7071
.beforeInside(IDENTIFIER, TokenSet.create(VARIABLE_DECLARATION, PARAMETER_LIST, INDEXED_PARAMETER_LIST)).spaces(1)
7172
.after(COMMA).spaces(1)

src/test/resources/fixtures/parser/error.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Solidity File
22
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
33
PsiElement(pragma)('pragma')
44
PsiWhiteSpace(' ')
5-
PsiElement(Identifier)('solidity')
5+
PsiElement(pragmaIdentifier)('solidity')
66
PsiWhiteSpace(' ')
77
PsiElement(pragmaAll)('^0.8.4')
88
PsiElement(;)(';')
@@ -113,4 +113,4 @@ Solidity File
113113
PsiWhiteSpace('\n ')
114114
PsiElement(})('}')
115115
PsiWhiteSpace('\n')
116-
PsiElement(})('}')
116+
PsiElement(})('}')

src/test/resources/fixtures/parser/fallback.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Solidity File
22
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
33
PsiElement(pragma)('pragma')
44
PsiWhiteSpace(' ')
5-
PsiElement(Identifier)('solidity')
5+
PsiElement(pragmaIdentifier)('solidity')
66
PsiWhiteSpace(' ')
77
PsiElement(pragmaAll)('>=0.7.0 <0.9.0')
88
PsiElement(;)(';')
@@ -47,4 +47,4 @@ Solidity File
4747
PsiWhiteSpace('\n\n ')
4848
PsiElement(})('}')
4949
PsiWhiteSpace('\n')
50-
PsiElement(})('}')
50+
PsiElement(})('}')

src/test/resources/fixtures/parser/natSpec.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Solidity File
44
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
55
PsiElement(pragma)('pragma')
66
PsiWhiteSpace(' ')
7-
PsiElement(Identifier)('solidity')
7+
PsiElement(pragmaIdentifier)('solidity')
88
PsiWhiteSpace(' ')
99
PsiElement(pragmaAll)('>=0.8.2 < 0.9.0')
1010
PsiElement(;)(';')
@@ -337,4 +337,4 @@ Solidity File
337337
PsiWhiteSpace('\n ')
338338
PsiElement(})('}')
339339
PsiWhiteSpace('\n')
340-
PsiElement(})('}')
340+
PsiElement(})('}')

src/test/resources/fixtures/parser/pragma.sol

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
pragma solidity ^0.4.2;
22
pragma solidity 0.4.2;
33
pragma solidity >0.4.23 <0.5.0;
4+
pragma ton-solidity ^0.7.3;
5+
pragma ton-solidity 0.7.3;
6+
pragma ton-solidity >0.7.15 <0.8.0;
47
pragma experimental "v0.5.0";
58
pragma experimental 'v0.5.0';
69
pragma experimental ABIEncoderV2;

src/test/resources/fixtures/parser/pragma.txt

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,47 +2,71 @@ Solidity File
22
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
33
PsiElement(pragma)('pragma')
44
PsiWhiteSpace(' ')
5-
PsiElement(Identifier)('solidity')
5+
PsiElement(pragmaIdentifier)('solidity')
66
PsiWhiteSpace(' ')
77
PsiElement(pragmaAll)('^0.4.2')
88
PsiElement(;)(';')
99
PsiWhiteSpace('\n')
1010
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
1111
PsiElement(pragma)('pragma')
1212
PsiWhiteSpace(' ')
13-
PsiElement(Identifier)('solidity')
13+
PsiElement(pragmaIdentifier)('solidity')
1414
PsiWhiteSpace(' ')
1515
PsiElement(pragmaAll)('0.4.2')
1616
PsiElement(;)(';')
1717
PsiWhiteSpace('\n')
1818
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
1919
PsiElement(pragma)('pragma')
2020
PsiWhiteSpace(' ')
21-
PsiElement(Identifier)('solidity')
21+
PsiElement(pragmaIdentifier)('solidity')
2222
PsiWhiteSpace(' ')
2323
PsiElement(pragmaAll)('>0.4.23 <0.5.0')
2424
PsiElement(;)(';')
2525
PsiWhiteSpace('\n')
2626
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
2727
PsiElement(pragma)('pragma')
2828
PsiWhiteSpace(' ')
29-
PsiElement(Identifier)('experimental')
29+
PsiElement(pragmaIdentifier)('ton-solidity')
30+
PsiWhiteSpace(' ')
31+
PsiElement(pragmaAll)('^0.7.3')
32+
PsiElement(;)(';')
33+
PsiWhiteSpace('\n')
34+
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
35+
PsiElement(pragma)('pragma')
36+
PsiWhiteSpace(' ')
37+
PsiElement(pragmaIdentifier)('ton-solidity')
38+
PsiWhiteSpace(' ')
39+
PsiElement(pragmaAll)('0.7.3')
40+
PsiElement(;)(';')
41+
PsiWhiteSpace('\n')
42+
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
43+
PsiElement(pragma)('pragma')
44+
PsiWhiteSpace(' ')
45+
PsiElement(pragmaIdentifier)('ton-solidity')
46+
PsiWhiteSpace(' ')
47+
PsiElement(pragmaAll)('>0.7.15 <0.8.0')
48+
PsiElement(;)(';')
49+
PsiWhiteSpace('\n')
50+
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
51+
PsiElement(pragma)('pragma')
52+
PsiWhiteSpace(' ')
53+
PsiElement(pragmaIdentifier)('experimental')
3054
PsiWhiteSpace(' ')
3155
PsiElement(pragmaAll)('"v0.5.0"')
3256
PsiElement(;)(';')
3357
PsiWhiteSpace('\n')
3458
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
3559
PsiElement(pragma)('pragma')
3660
PsiWhiteSpace(' ')
37-
PsiElement(Identifier)('experimental')
61+
PsiElement(pragmaIdentifier)('experimental')
3862
PsiWhiteSpace(' ')
3963
PsiElement(pragmaAll)(''v0.5.0'')
4064
PsiElement(;)(';')
4165
PsiWhiteSpace('\n')
4266
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
4367
PsiElement(pragma)('pragma')
4468
PsiWhiteSpace(' ')
45-
PsiElement(Identifier)('experimental')
69+
PsiElement(pragmaIdentifier)('experimental')
4670
PsiWhiteSpace(' ')
4771
PsiElement(pragmaAll)('ABIEncoderV2')
48-
PsiElement(;)(';')
72+
PsiElement(;)(';')

src/test/resources/fixtures/parser/tryCatch.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Solidity File
22
SolPragmaDirectiveImpl(PRAGMA_DIRECTIVE)
33
PsiElement(pragma)('pragma')
44
PsiWhiteSpace(' ')
5-
PsiElement(Identifier)('solidity')
5+
PsiElement(pragmaIdentifier)('solidity')
66
PsiWhiteSpace(' ')
77
PsiElement(pragmaAll)('^0.6.0')
88
PsiElement(;)(';')
@@ -285,4 +285,4 @@ Solidity File
285285
PsiWhiteSpace('\n ')
286286
PsiElement(})('}')
287287
PsiWhiteSpace('\n')
288-
PsiElement(})('}')
288+
PsiElement(})('}')

0 commit comments

Comments
 (0)