Skip to content

Commit 24ed2f5

Browse files
authored
2.2.0 (#168)
### Added - Full support latest Tact 1.2.0 version ([#166](#166)) ### Fixed - A bug with comment/uncomment already commented lines ([#169](#169)) - Function parameter name hints for var arguments of same name ([#167](#167))
1 parent 4dcef48 commit 24ed2f5

File tree

96 files changed

+3253
-298
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+3253
-298
lines changed

CHANGELOG.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,18 @@
11
# TON Plugin for the IntelliJ IDEs Changelog
22

3+
## [2.2.0]
4+
5+
### Added
6+
7+
- Full support latest Tact 1.2.0 version ([#166](https://github.com/ton-blockchain/intellij-ton/issues/166))
8+
9+
### Fixed
10+
11+
- A bug with comment/uncomment already commented
12+
lines ([#169](https://github.com/ton-blockchain/intellij-ton/issues/169))
13+
- Function parameter name hints for var arguments of same
14+
name ([#167](https://github.com/ton-blockchain/intellij-ton/issues/167))
15+
316
## [2.1.0]
417

518
### Added

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212

1313
- FunC
1414
- Fift
15-
- Tact (Only syntax highlighting, more complex support is planned in the future release)
15+
- Tact
1616
- TL-B Schemas
1717

1818
---

build.gradle.kts

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ version = pluginVersion
2121
println("pluginVersion=$version")
2222

2323
plugins {
24-
kotlin("jvm") version "1.9.0"
25-
id("org.jetbrains.intellij") version "1.16.0"
26-
id("org.jetbrains.grammarkit") version "2022.3.2"
27-
id("org.jetbrains.changelog") version "1.3.1"
24+
kotlin("jvm") version "1.9.22"
25+
id("org.jetbrains.intellij") version "1.17.3"
26+
id("org.jetbrains.grammarkit") version "2022.3.2.2"
27+
id("org.jetbrains.changelog") version "2.2.0"
2828
idea
2929
}
3030

@@ -43,7 +43,6 @@ allprojects {
4343
}
4444

4545
dependencies {
46-
implementation(kotlin("stdlib-jdk8"))
4746
implementation("me.alllex.parsus:parsus-jvm:0.6.1")
4847
implementation("com.github.andreypfau.tlb:tlb-jvm:54070d9405")
4948
}
@@ -122,6 +121,20 @@ tasks {
122121
buildSearchableOptions {
123122
enabled = prop("enableBuildSearchableOptions").toBoolean()
124123
}
124+
configurations.runtimeClasspath.get().forEach {
125+
println(it)
126+
}
127+
jar {
128+
from({
129+
configurations.runtimeClasspath.get().filter { file ->
130+
!file.nameWithoutExtension.startsWith("kotlin-stdlib") &&
131+
!file.nameWithoutExtension.startsWith("annotations")
132+
}.map {
133+
if (it.isDirectory) it
134+
else zipTree(it)
135+
}
136+
})
137+
}
125138
}
126139

127140
fun prop(name: String, default: (() -> String?)? = null) = extra.properties[name] as? String
@@ -130,7 +143,7 @@ fun prop(name: String, default: (() -> String?)? = null) = extra.properties[name
130143
fun generateParser(language: String, suffix: String = "", config: GenerateParserTask.() -> Unit = {}) =
131144
task<GenerateParserTask>("generate${language.capitalized()}Parser${suffix.capitalized()}") {
132145
sourceFile.set(file("src/main/grammar/${language}Parser.bnf"))
133-
targetRoot.set("src/gen")
146+
targetRootOutputDir.set(file("src/gen"))
134147
pathToParser.set("/org/ton/intellij/${language.lowercase()}/parser/${language}Parser.java")
135148
pathToPsiRoot.set("/org/ton/intellij/${language.lowercase()}/psi")
136149
purgeOldFiles.set(true)
@@ -139,7 +152,6 @@ fun generateParser(language: String, suffix: String = "", config: GenerateParser
139152

140153
fun generateLexer(language: String) = task<GenerateLexerTask>("generate${language}Lexer") {
141154
sourceFile.set(file("src/main/grammar/${language}Lexer.flex"))
142-
targetDir.set("src/gen/org/ton/intellij/${language.lowercase()}/lexer")
143-
targetClass.set("_${language}Lexer")
155+
targetOutputDir.set(file("src/gen/org/ton/intellij/${language.lowercase()}/lexer"))
144156
purgeOldFiles.set(true)
145157
}

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
org.gradle.jvmargs=-Xmx4096m
22
pluginGroup=org.ton
3-
pluginVersion=2.1.0
3+
pluginVersion=2.2.0
44
publishChannel=release
55
publishToken=token
66
enableBuildSearchableOptions=false
@@ -11,4 +11,4 @@ ideaVersion=231-EAP-SNAPSHOT
1111
# https://plugins.jetbrains.com/plugin/227-psiviewer/versions
1212
psiViewerPluginVersion=231-SNAPSHOT
1313
kotlin.stdlib.default.dependency=false
14-
buildNumber=8
14+
buildNumber=1
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists

src/main/grammar/TactLexer.flex

Lines changed: 54 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ import static org.ton.intellij.tact.psi.TactElementTypes.*;
2626
* Dedicated nested-comment level counter
2727
*/
2828
private int zzNestedCommentLevel = 0;
29+
30+
private int zzBlockDepth = 0;
31+
private int zzParenDepth = 0;
32+
private boolean zzStructScope = false;
33+
private boolean zzContractScope = false;
2934
%}
3035

3136
%{
@@ -55,27 +60,47 @@ import static org.ton.intellij.tact.psi.TactElementTypes.*;
5560
%type IElementType
5661

5762
%s IN_BLOCK_COMMENT
63+
%s IN_NAME_ATTRIBUTE
5864

5965
%unicode
6066

6167
EOL=\R
6268
WHITE_SPACE=\s+
6369

6470
WHITE_SPACE=[ \t\n\x0B\f\r]+
65-
INTEGER_LITERAL=(0[xX][0-9a-fA-F][0-9a-fA-F_]*)|([0-9]+)
71+
NON_ZERO_DIGIT=[1-9]
72+
HEX_DIGIT=[0-9a-fA-F]
73+
DIGIT=[0-9]
74+
BIN_DIGIT=[01]
75+
OCT_DIGIT=[0-7]
76+
INTEGER_LITERAL_DEC = ({NON_ZERO_DIGIT}(_?{DIGIT})*) | 0{DIGIT}*
77+
INTEGER_LITERAL_HEX = 0[xX] {HEX_DIGIT} (_?{HEX_DIGIT})*
78+
INTEGER_LITERAL_BIN = 0[bB] {BIN_DIGIT} (_?{BIN_DIGIT})*
79+
INTEGER_LITERAL_OCT = 0[oO] {OCT_DIGIT} (_?{OCT_DIGIT})*
80+
INTEGER_LITERAL= {INTEGER_LITERAL_HEX} | {INTEGER_LITERAL_BIN} | {INTEGER_LITERAL_OCT} | {INTEGER_LITERAL_DEC}
6681
STRING_LITERAL=(\"([^\"\r\n\\]|\\.)*\")
67-
IDENTIFIER=[:letter:]\w*
82+
IDENTIFIER=[a-zA-Z_][a-zA-Z0-9_]*
83+
FUNC_IDENTIFIER=[a-zA-Z_][a-zA-Z0-9_?!:&']*
6884

6985
%%
7086
<YYINITIAL> {
7187
{WHITE_SPACE} { return WHITE_SPACE; }
7288

73-
"{" { return LBRACE; }
74-
"}" { return RBRACE; }
89+
"/*" { yybegin(IN_BLOCK_COMMENT); yypushback(2); }
90+
"//".* { return LINE_COMMENT; }
91+
92+
"{" { zzBlockDepth++; return LBRACE; }
93+
"}" {
94+
if (zzBlockDepth-- == 0) {
95+
zzStructScope = false;
96+
zzContractScope = false;
97+
}
98+
return RBRACE;
99+
}
75100
"[" { return LBRACK; }
76101
"]" { return RBRACK; }
77-
"(" { return LPAREN; }
78-
")" { return RPAREN; }
102+
"(" { zzParenDepth++; return LPAREN; }
103+
")" { zzParenDepth--; return RPAREN; }
79104
":" { return COLON; }
80105
";" { return SEMICOLON; }
81106
"," { return COMMA; }
@@ -93,6 +118,11 @@ IDENTIFIER=[:letter:]\w*
93118
"=" { return EQ; }
94119
"?" { return Q; }
95120
"!" { return EXCL; }
121+
"+=" { return PLUSLET; }
122+
"-=" { return MINUSLET; }
123+
"*=" { return TIMESLET; }
124+
"/=" { return DIVLET; }
125+
"%=" { return MODLET; }
96126
"==" { return EQEQ; }
97127
"!=" { return EXCLEQ; }
98128
">=" { return GTEQ; }
@@ -119,29 +149,27 @@ IDENTIFIER=[:letter:]\w*
119149
"const" { return CONST_KEYWORD; }
120150
"fun" { return FUN_KEYWORD; }
121151
"initOf" { return INIT_OF_KEYWORD; }
122-
"get" { return GET_KEYWORD; }
123152
"as" { return AS_KEYWORD; }
124153
"abstract" { return ABSTRACT_KEYWORD; }
125154
"import" { return IMPORT_KEYWORD; }
126-
"struct" { return STRUCT_KEYWORD; }
127-
"message" { return MESSAGE_KEYWORD; }
128-
"contract" { return CONTRACT_KEYWORD; }
155+
"struct" { zzStructScope = true; return STRUCT_KEYWORD; }
156+
"message" { return zzBlockDepth == 0 ? MESSAGE_KEYWORD : IDENTIFIER; }
157+
"contract" { zzContractScope = true; return CONTRACT_KEYWORD; }
129158
"trait" { return TRAIT_KEYWORD; }
130159
"with" { return WITH_KEYWORD; }
131-
"init" { return INIT_KEYWORD; }
132160
"receive" { return RECEIVE_KEYWORD; }
133-
"bounced" { return BOUNCED_KEYWORD; }
134161
"external" { return EXTERNAL_KEYWORD; }
135162
"true" { return BOOLEAN_LITERAL; }
136163
"false" { return BOOLEAN_LITERAL; }
137164
"null" { return NULL_LITERAL; }
138-
"intOf" { return INT_OF_KEYWORD; }
165+
"primitive" { return PRIMITIVE_KEYWORD; }
166+
"self" { return SELF_KEYWORD; }
167+
"map" { return MAP_KEYWORD; }
168+
"bounced" { return zzBlockDepth == 1 && zzContractScope ? BOUNCED_KEYWORD : IDENTIFIER; }
169+
"init" { return zzBlockDepth == 1 && zzParenDepth == 0 ? INIT_KEYWORD : IDENTIFIER; }
170+
"get" { return zzBlockDepth <= 1 ? GET_KEYWORD : IDENTIFIER; }
139171
"@interface" { return INTERFACE_MACRO; }
140-
"@name" { return NAME_MACRO; }
141-
142-
"/*" { yybegin(IN_BLOCK_COMMENT); yypushback(2); }
143-
"////".* { return LINE_COMMENT; }
144-
"//".* { return LINE_COMMENT; }
172+
"@name" { yybegin(IN_NAME_ATTRIBUTE); yypushback(5); }
145173

146174
{INTEGER_LITERAL} { return INTEGER_LITERAL; }
147175
{STRING_LITERAL} { return STRING_LITERAL; }
@@ -162,4 +190,12 @@ IDENTIFIER=[:letter:]\w*
162190
[^] { }
163191
}
164192

193+
<IN_NAME_ATTRIBUTE> {
194+
"@name" { return NAME_MACRO; }
195+
"(" { zzParenDepth++; return LPAREN; }
196+
")" { zzParenDepth--; yybegin(YYINITIAL); return RPAREN; }
197+
{FUNC_IDENTIFIER} { yybegin(YYINITIAL); return FUNC_IDENTIFIER; }
198+
[^] { yybegin(YYINITIAL); yypushback(1); }
199+
}
200+
165201
[^] { return BAD_CHARACTER; }

0 commit comments

Comments
 (0)