Skip to content

Commit a2b7ac0

Browse files
committed
refactor: fix Rust path issue
1 parent cd7419d commit a2b7ac0

File tree

1 file changed

+29
-4
lines changed
  • unit-picker/src/main/kotlin/cc/unitmesh/pick/worker/lang

1 file changed

+29
-4
lines changed

unit-picker/src/main/kotlin/cc/unitmesh/pick/worker/lang/RustWorker.kt

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,18 +19,25 @@ class RustWorker(override val workerContext: WorkerContext) : LangWorker {
1919
try {
2020
val container = RustAnalyser().analysis(job.code, job.fileSummary.location)
2121
val relativePath = Path.of(workerContext.project.codeDir).relativize(Path.of(job.fileSummary.location))
22-
container.PackageName = calculatePackageName(
23-
relativePath.toString().replace("/", "::").replace("\\", ".")
24-
)
22+
container.PackageName = container.PackageName.fixPrefix(workerContext.project.codeDir)
23+
container.FullName = relativePath.toString()
2524

2625
// update error packageName in here with a path
2726
job.codeLines = job.code.lines()
2827
container.DataStructures.map { ds ->
28+
ds.FilePath = relativePath.toString()
2929
ds.Imports = container.Imports
30+
ds.NodeName = ds.NodeName.fixPrefix(workerContext.project.codeDir)
31+
ds.Package = container.PackageName
3032

3133
ds.Content = CodeDataStructUtil.contentByPosition(job.codeLines, ds.Position)
3234
ds.Functions.map {
35+
it.Package = it.Package.fixPrefix(workerContext.project.codeDir)
3336
it.Content = CodeDataStructUtil.contentByPosition(job.codeLines, it.Position)
37+
it.FunctionCalls.map { call ->
38+
call.Package = call.Package.fixPrefix(workerContext.project.codeDir)
39+
call.NodeName = call.NodeName.fixPrefix(workerContext.project.codeDir)
40+
}
3441
}
3542
}
3643

@@ -100,4 +107,22 @@ class RustWorker(override val workerContext: WorkerContext) : LangWorker {
100107
return "$modulePath::$packageName"
101108
}
102109
}
103-
}
110+
}
111+
112+
private fun String.fixPrefix(codeDir: String): String {
113+
var result = this;
114+
if (this.startsWith(codeDir)) {
115+
result = result.substring(codeDir.length + 1)
116+
}
117+
118+
val pkgName = RustWorker.calculatePackageName(codeDir)
119+
// codeDir remove last '/'
120+
val codeDirParent = codeDir.substringBeforeLast("/")
121+
val libPrefix = pkgName.removePrefix(codeDirParent)
122+
123+
if (this.contains(libPrefix)) {
124+
result = result.substringAfter(libPrefix)
125+
}
126+
127+
return result.removePrefix("::")
128+
}

0 commit comments

Comments
 (0)