Skip to content

Commit 96063c6

Browse files
committed
feat(rust): add RustVariableContextBuilder
This commit adds a new file `RustVariableContextBuilder.kt` to the `rust/src/main/kotlin/cc/unitmesh/rust/context` directory. The `RustVariableContextBuilder` class implements the `VariableContextBuilder` interface and provides the implementation for the `getVariableContext` method. This method is responsible for generating the variable context for a given `PsiElement` in Rust code. The implementation checks if the `PsiElement` is an instance of `RsLetDecl` and extracts relevant information such as the text, name, parent function, and containing class. The generated `VariableContext` object is then returned. Additionally, the commit modifies the `rust/src/main/resources/cc.unitmesh
1 parent c3bfc53 commit 96063c6

File tree

3 files changed

+39
-1
lines changed

3 files changed

+39
-1
lines changed

rust/src/main/kotlin/cc/unitmesh/rust/context/RustClassContextBuilder.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import org.rust.lang.core.psi.ext.fields
1111
class RustClassContextBuilder : ClassContextBuilder {
1212
override fun getClassContext(psiElement: PsiElement, gatherUsages: Boolean): ClassContext? {
1313
if (psiElement !is RsStructOrEnumItemElement) return null
14+
1415
when (psiElement) {
1516
is RsStructItem -> {
1617
val fields: List<PsiElement> = psiElement.fields.map {
@@ -29,7 +30,7 @@ class RustClassContextBuilder : ClassContextBuilder {
2930
}
3031

3132
is RsEnumItem -> {
32-
33+
// TODO: Implement
3334
}
3435
}
3536

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package cc.unitmesh.rust.context
2+
3+
import cc.unitmesh.devti.context.VariableContext
4+
import cc.unitmesh.devti.context.builder.VariableContextBuilder
5+
import com.intellij.psi.PsiElement
6+
import com.intellij.psi.util.PsiTreeUtil
7+
import org.rust.lang.core.psi.RsFunction
8+
import org.rust.lang.core.psi.RsImplItem
9+
import org.rust.lang.core.psi.RsLetDecl
10+
11+
class RustVariableContextBuilder : VariableContextBuilder {
12+
override fun getVariableContext(
13+
psiElement: PsiElement,
14+
includeMethodContext: Boolean,
15+
includeClassContext: Boolean,
16+
gatherUsages: Boolean
17+
): VariableContext? {
18+
if (psiElement !is RsLetDecl) return null
19+
20+
val text = psiElement.text
21+
val parentOfType = PsiTreeUtil.getParentOfType(psiElement, RsFunction::class.java, true)
22+
val containingClass = PsiTreeUtil.getParentOfType(psiElement, RsImplItem::class.java, true)
23+
24+
return VariableContext(
25+
psiElement,
26+
text,
27+
psiElement.name,
28+
parentOfType,
29+
containingClass,
30+
emptyList(),
31+
includeClassContext
32+
)
33+
}
34+
35+
}

rust/src/main/resources/cc.unitmesh.rust.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
implementationClass="cc.unitmesh.rust.context.RustClassContextBuilder"/>
1313
<methodContextBuilder language="Rust"
1414
implementationClass="cc.unitmesh.rust.context.RustMethodContextBuilder"/>
15+
<variableContextBuilder language="Rust"
16+
implementationClass="cc.unitmesh.rust.context.RustVariableContextBuilder"/>
1517

1618
<contextPrompter language="Rust" implementation="cc.unitmesh.rust.provider.RustContextPrompter"/>
1719

0 commit comments

Comments
 (0)