Skip to content

Commit 1d357e1

Browse files
committed
feat(rs): init struct
1 parent 42c9115 commit 1d357e1

3 files changed

Lines changed: 48 additions & 6 deletions

File tree

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,38 @@
11
package chapi.ast.rustast
22

3+
import chapi.ast.antlr.RustParser
34
import chapi.domain.core.*
45

56
open class RustFullIdentListener(fileName: String) : RustAstBaseListener() {
6-
private var currentDataStruct = CodeDataStruct()
7-
private val defaultDataStruct = CodeDataStruct()
8-
private var currentFunction = CodeFunction()
9-
private var structMap = mutableMapOf<String, CodeDataStruct>()
107
private var codeContainer: CodeContainer = CodeContainer(FullName = fileName)
118

9+
private var defaultNode = CodeDataStruct()
10+
private var structMap = mutableMapOf<String, CodeDataStruct>()
11+
private var localVars = mutableMapOf<String, String>()
12+
13+
private var currentFunction = CodeFunction(IsConstructor = false)
14+
15+
override fun enterStructStruct(ctx: RustParser.StructStructContext?) {
16+
val structName = ctx!!.identifier().text
17+
18+
val codeStruct = CodeDataStruct(
19+
NodeName = structName,
20+
Package = codeContainer.PackageName
21+
)
22+
23+
structMap[structName] = codeStruct
24+
defaultNode = codeStruct
25+
}
1226

1327
fun getNodeInfo(): CodeContainer {
14-
if (defaultDataStruct.Functions.isNotEmpty()) {
15-
codeContainer.DataStructures += defaultDataStruct
28+
for (entry in structMap) {
29+
codeContainer.DataStructures += entry.value
1630
}
31+
32+
if (defaultNode.Functions.isNotEmpty()) {
33+
codeContainer.DataStructures += defaultNode
34+
}
35+
1736
return codeContainer
1837
}
1938
}

chapi-ast-rust/src/test/kotlin/chapi/ast/rustast/RustAnalyserTest.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package chapi.ast.rustast
22

3+
import org.junit.jupiter.api.Disabled
34
import org.junit.jupiter.api.Test
45
import java.io.File
56

@@ -17,6 +18,7 @@ internal class RustAnalyserTest {
1718
}
1819

1920
@Test
21+
@Disabled
2022
fun allGrammarUnderResources() {
2123
val content = this::class.java.getResource("/grammar")!!
2224
File(content.toURI()).walkTopDown().forEach {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package chapi.ast.rustast
2+
3+
import org.junit.jupiter.api.Test
4+
import kotlin.test.assertEquals
5+
6+
7+
class RustFullIdentListenerTest {
8+
@Test
9+
fun structDef() {
10+
val str = """
11+
struct Point {
12+
x: i32,
13+
y: i32,
14+
}
15+
""".trimIndent()
16+
17+
val codeContainer = RustAnalyser().analysis(str, "test.rs")
18+
assertEquals(1, codeContainer.DataStructures.size)
19+
assertEquals("Point", codeContainer.DataStructures[0].NodeName)
20+
}
21+
}

0 commit comments

Comments
 (0)