in src/main/kotlin/org/jetbrains/mcpserverplugin/general/builtinTools.kt [71:107]
override fun handle(project: Project, args: SearchInFilesArgs): Response {
val projectDir = project.guessProjectDir()?.toNioPathOrNull()
?: return Response(error = "Project directory not found")
val searchSubstring = args.searchText
if (searchSubstring.isNullOrBlank()) {
return Response(error = "contentSubstring parameter is required and cannot be blank")
}
val findModel = FindManager.getInstance(project).findInProjectModel.clone()
findModel.stringToFind = searchSubstring
findModel.isCaseSensitive = false
findModel.isWholeWordsOnly = false
findModel.isRegularExpressions = false
findModel.setProjectScope(true)
val results = mutableSetOf<String>()
val processor = Processor<UsageInfo> { usageInfo ->
val virtualFile = usageInfo.virtualFile ?: return@Processor true
try {
val relativePath = projectDir.relativize(Path(virtualFile.path)).toString()
results.add("""{"path": "$relativePath", "name": "${virtualFile.name}"}""")
} catch (e: IllegalArgumentException) {
}
true
}
FindInProjectUtil.findUsages(
findModel,
project,
processor,
FindUsagesProcessPresentation(UsageViewPresentation())
)
val jsonResult = results.joinToString(",\n", prefix = "[", postfix = "]")
return Response(jsonResult)
}