From e0dd612a70dc8e039d052deff8ccedecc505c5a5 Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Fri, 26 Jul 2024 13:20:54 +0300 Subject: [PATCH] feat: include only valid project folders --- .../ui/textarea/SuggestionUpdateStrategy.kt | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionUpdateStrategy.kt b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionUpdateStrategy.kt index 578389f4..3e6f7a8d 100644 --- a/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionUpdateStrategy.kt +++ b/src/main/kotlin/ee/carlrobert/codegpt/ui/textarea/SuggestionUpdateStrategy.kt @@ -1,10 +1,12 @@ package ee.carlrobert.codegpt.ui.textarea import com.intellij.openapi.application.readAction +import com.intellij.openapi.application.runReadAction import com.intellij.openapi.components.service import com.intellij.openapi.fileEditor.FileEditorManager import com.intellij.openapi.project.Project import com.intellij.openapi.roots.ProjectFileIndex +import com.intellij.openapi.vfs.VirtualFileManager import ee.carlrobert.codegpt.util.ResourceUtil import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers @@ -16,7 +18,6 @@ import java.nio.file.Path import javax.swing.DefaultListModel import kotlin.io.path.absolutePathString import kotlin.io.path.isDirectory -import kotlin.io.path.name interface SuggestionUpdateStrategy { fun populateSuggestions( @@ -97,10 +98,18 @@ class FolderSuggestionActionStrategy : SuggestionUpdateStrategy { private suspend fun findProjectFolders(project: Project): List { val projectRoot = project.basePath?.let { Path.of(it) } ?: return emptyList() + val projectFileIndex = project.service() + val virtualFileManager = VirtualFileManager.getInstance() + return withContext(Dispatchers.IO) { val uniqueFolders = mutableSetOf() Files.walk(projectRoot) - .filter { it.isDirectory() && !it.name.startsWith(".") } + .filter { path -> + val file = virtualFileManager.findFileByNioPath(path) + val isProjectFile = + file != null && runReadAction { projectFileIndex.isInContent(file) } + path.isDirectory() && !path.startsWith(".") && isProjectFile + } .forEach { folder -> val folderPath = folder.absolutePathString() if (uniqueFolders.none { it.startsWith(folderPath) }) { @@ -129,7 +138,12 @@ class PersonaSuggestionActionStrategy : SuggestionUpdateStrategy { searchText: String, ) { listModel.clear() - listModel.addAll(ResourceUtil.getFilteredPersonaSuggestions { it.name.contains(searchText, true) }) + listModel.addAll(ResourceUtil.getFilteredPersonaSuggestions { + it.name.contains( + searchText, + true + ) + }) } }