Skip to content

Commit

Permalink
2.2.0 (#168)
Browse files Browse the repository at this point in the history
### 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))
  • Loading branch information
andreypfau authored Apr 26, 2024
1 parent 4dcef48 commit 24ed2f5
Show file tree
Hide file tree
Showing 96 changed files with 3,253 additions and 298 deletions.
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# TON Plugin for the IntelliJ IDEs Changelog

## [2.2.0]

### Added

- Full support latest Tact 1.2.0 version ([#166](https://github.com/ton-blockchain/intellij-ton/issues/166))

### Fixed

- A bug with comment/uncomment already commented
lines ([#169](https://github.com/ton-blockchain/intellij-ton/issues/169))
- Function parameter name hints for var arguments of same
name ([#167](https://github.com/ton-blockchain/intellij-ton/issues/167))

## [2.1.0]

### Added
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

- FunC
- Fift
- Tact (Only syntax highlighting, more complex support is planned in the future release)
- Tact
- TL-B Schemas

---
Expand Down
28 changes: 20 additions & 8 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,10 @@ version = pluginVersion
println("pluginVersion=$version")

plugins {
kotlin("jvm") version "1.9.0"
id("org.jetbrains.intellij") version "1.16.0"
id("org.jetbrains.grammarkit") version "2022.3.2"
id("org.jetbrains.changelog") version "1.3.1"
kotlin("jvm") version "1.9.22"
id("org.jetbrains.intellij") version "1.17.3"
id("org.jetbrains.grammarkit") version "2022.3.2.2"
id("org.jetbrains.changelog") version "2.2.0"
idea
}

Expand All @@ -43,7 +43,6 @@ allprojects {
}

dependencies {
implementation(kotlin("stdlib-jdk8"))
implementation("me.alllex.parsus:parsus-jvm:0.6.1")
implementation("com.github.andreypfau.tlb:tlb-jvm:54070d9405")
}
Expand Down Expand Up @@ -122,6 +121,20 @@ tasks {
buildSearchableOptions {
enabled = prop("enableBuildSearchableOptions").toBoolean()
}
configurations.runtimeClasspath.get().forEach {
println(it)
}
jar {
from({
configurations.runtimeClasspath.get().filter { file ->
!file.nameWithoutExtension.startsWith("kotlin-stdlib") &&
!file.nameWithoutExtension.startsWith("annotations")
}.map {
if (it.isDirectory) it
else zipTree(it)
}
})
}
}

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

fun generateLexer(language: String) = task<GenerateLexerTask>("generate${language}Lexer") {
sourceFile.set(file("src/main/grammar/${language}Lexer.flex"))
targetDir.set("src/gen/org/ton/intellij/${language.lowercase()}/lexer")
targetClass.set("_${language}Lexer")
targetOutputDir.set(file("src/gen/org/ton/intellij/${language.lowercase()}/lexer"))
purgeOldFiles.set(true)
}
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
org.gradle.jvmargs=-Xmx4096m
pluginGroup=org.ton
pluginVersion=2.1.0
pluginVersion=2.2.0
publishChannel=release
publishToken=token
enableBuildSearchableOptions=false
Expand All @@ -11,4 +11,4 @@ ideaVersion=231-EAP-SNAPSHOT
# https://plugins.jetbrains.com/plugin/227-psiviewer/versions
psiViewerPluginVersion=231-SNAPSHOT
kotlin.stdlib.default.dependency=false
buildNumber=8
buildNumber=1
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
72 changes: 54 additions & 18 deletions src/main/grammar/TactLexer.flex
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ import static org.ton.intellij.tact.psi.TactElementTypes.*;
* Dedicated nested-comment level counter
*/
private int zzNestedCommentLevel = 0;

private int zzBlockDepth = 0;
private int zzParenDepth = 0;
private boolean zzStructScope = false;
private boolean zzContractScope = false;
%}

%{
Expand Down Expand Up @@ -55,27 +60,47 @@ import static org.ton.intellij.tact.psi.TactElementTypes.*;
%type IElementType

%s IN_BLOCK_COMMENT
%s IN_NAME_ATTRIBUTE

%unicode

EOL=\R
WHITE_SPACE=\s+

WHITE_SPACE=[ \t\n\x0B\f\r]+
INTEGER_LITERAL=(0[xX][0-9a-fA-F][0-9a-fA-F_]*)|([0-9]+)
NON_ZERO_DIGIT=[1-9]
HEX_DIGIT=[0-9a-fA-F]
DIGIT=[0-9]
BIN_DIGIT=[01]
OCT_DIGIT=[0-7]
INTEGER_LITERAL_DEC = ({NON_ZERO_DIGIT}(_?{DIGIT})*) | 0{DIGIT}*
INTEGER_LITERAL_HEX = 0[xX] {HEX_DIGIT} (_?{HEX_DIGIT})*
INTEGER_LITERAL_BIN = 0[bB] {BIN_DIGIT} (_?{BIN_DIGIT})*
INTEGER_LITERAL_OCT = 0[oO] {OCT_DIGIT} (_?{OCT_DIGIT})*
INTEGER_LITERAL= {INTEGER_LITERAL_HEX} | {INTEGER_LITERAL_BIN} | {INTEGER_LITERAL_OCT} | {INTEGER_LITERAL_DEC}
STRING_LITERAL=(\"([^\"\r\n\\]|\\.)*\")
IDENTIFIER=[:letter:]\w*
IDENTIFIER=[a-zA-Z_][a-zA-Z0-9_]*
FUNC_IDENTIFIER=[a-zA-Z_][a-zA-Z0-9_?!:&']*

%%
<YYINITIAL> {
{WHITE_SPACE} { return WHITE_SPACE; }

"{" { return LBRACE; }
"}" { return RBRACE; }
"/*" { yybegin(IN_BLOCK_COMMENT); yypushback(2); }
"//".* { return LINE_COMMENT; }

"{" { zzBlockDepth++; return LBRACE; }
"}" {
if (zzBlockDepth-- == 0) {
zzStructScope = false;
zzContractScope = false;
}
return RBRACE;
}
"[" { return LBRACK; }
"]" { return RBRACK; }
"(" { return LPAREN; }
")" { return RPAREN; }
"(" { zzParenDepth++; return LPAREN; }
")" { zzParenDepth--; return RPAREN; }
":" { return COLON; }
";" { return SEMICOLON; }
"," { return COMMA; }
Expand All @@ -93,6 +118,11 @@ IDENTIFIER=[:letter:]\w*
"=" { return EQ; }
"?" { return Q; }
"!" { return EXCL; }
"+=" { return PLUSLET; }
"-=" { return MINUSLET; }
"*=" { return TIMESLET; }
"/=" { return DIVLET; }
"%=" { return MODLET; }
"==" { return EQEQ; }
"!=" { return EXCLEQ; }
">=" { return GTEQ; }
Expand All @@ -119,29 +149,27 @@ IDENTIFIER=[:letter:]\w*
"const" { return CONST_KEYWORD; }
"fun" { return FUN_KEYWORD; }
"initOf" { return INIT_OF_KEYWORD; }
"get" { return GET_KEYWORD; }
"as" { return AS_KEYWORD; }
"abstract" { return ABSTRACT_KEYWORD; }
"import" { return IMPORT_KEYWORD; }
"struct" { return STRUCT_KEYWORD; }
"message" { return MESSAGE_KEYWORD; }
"contract" { return CONTRACT_KEYWORD; }
"struct" { zzStructScope = true; return STRUCT_KEYWORD; }
"message" { return zzBlockDepth == 0 ? MESSAGE_KEYWORD : IDENTIFIER; }
"contract" { zzContractScope = true; return CONTRACT_KEYWORD; }
"trait" { return TRAIT_KEYWORD; }
"with" { return WITH_KEYWORD; }
"init" { return INIT_KEYWORD; }
"receive" { return RECEIVE_KEYWORD; }
"bounced" { return BOUNCED_KEYWORD; }
"external" { return EXTERNAL_KEYWORD; }
"true" { return BOOLEAN_LITERAL; }
"false" { return BOOLEAN_LITERAL; }
"null" { return NULL_LITERAL; }
"intOf" { return INT_OF_KEYWORD; }
"primitive" { return PRIMITIVE_KEYWORD; }
"self" { return SELF_KEYWORD; }
"map" { return MAP_KEYWORD; }
"bounced" { return zzBlockDepth == 1 && zzContractScope ? BOUNCED_KEYWORD : IDENTIFIER; }
"init" { return zzBlockDepth == 1 && zzParenDepth == 0 ? INIT_KEYWORD : IDENTIFIER; }
"get" { return zzBlockDepth <= 1 ? GET_KEYWORD : IDENTIFIER; }
"@interface" { return INTERFACE_MACRO; }
"@name" { return NAME_MACRO; }

"/*" { yybegin(IN_BLOCK_COMMENT); yypushback(2); }
"////".* { return LINE_COMMENT; }
"//".* { return LINE_COMMENT; }
"@name" { yybegin(IN_NAME_ATTRIBUTE); yypushback(5); }

{INTEGER_LITERAL} { return INTEGER_LITERAL; }
{STRING_LITERAL} { return STRING_LITERAL; }
Expand All @@ -162,4 +190,12 @@ IDENTIFIER=[:letter:]\w*
[^] { }
}

<IN_NAME_ATTRIBUTE> {
"@name" { return NAME_MACRO; }
"(" { zzParenDepth++; return LPAREN; }
")" { zzParenDepth--; yybegin(YYINITIAL); return RPAREN; }
{FUNC_IDENTIFIER} { yybegin(YYINITIAL); return FUNC_IDENTIFIER; }
[^] { yybegin(YYINITIAL); yypushback(1); }
}

[^] { return BAD_CHARACTER; }
Loading

0 comments on commit 24ed2f5

Please sign in to comment.