Skip to content

Commit 467ec26

Browse files
authored
change file fetch strategy to use open files only (#3734)
1 parent 8eca05b commit 467ec26

File tree

4 files changed

+21
-7
lines changed

4 files changed

+21
-7
lines changed

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererFileContextProvider.kt

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,10 +39,7 @@ private val codewhispererCodeChunksIndex = GistManager.getInstance()
3939
.newPsiFileGist("psi to code chunk index", 0, CodeWhispererCodeChunkExternalizer) { psiFile ->
4040
runBlocking {
4141
val fileCrawler = getFileCrawlerForLanguage(psiFile.programmingLanguage())
42-
val fileProducers = listOf<suspend (PsiFile) -> List<VirtualFile>>(
43-
{ psiFile -> fileCrawler.listFilesImported(psiFile) },
44-
{ psiFile -> fileCrawler.listFilesWithinSamePackage(psiFile) }
45-
)
42+
val fileProducers = listOf<suspend (PsiFile) -> List<VirtualFile>> { psiFile -> fileCrawler.listRelevantFilesInEditors(psiFile) }
4643
FileContextProvider.getInstance(psiFile.project).extractCodeChunksFromFiles(psiFile, fileProducers)
4744
}
4845
}
@@ -127,9 +124,12 @@ class DefaultCodeWhispererFileContextProvider(private val project: Project) : Fi
127124
it.forEachIndexed { index, chunk ->
128125
LOG.info {
129126
"""
130-
| Chunk ${index + 1}:
127+
|---------------------------------------------------------------
128+
| Chunk $index:
129+
| path = ${chunk.path},
130+
| score = ${chunk.score},
131131
| content = ${chunk.content}
132-
| path = ${chunk.path}
132+
|----------------------------------------------------------------
133133
""".trimMargin()
134134
}
135135
}
@@ -210,7 +210,7 @@ class DefaultCodeWhispererFileContextProvider(private val project: Project) : Fi
210210
// step 2: bm25 calculation
211211
val timeBeforeBm25 = System.currentTimeMillis()
212212
val top3Chunks: List<BM25Result> = BM250kapi(first60Chunks.map { it.content }).topN(query)
213-
LOG.info { "Time ellapsed for BM25 algorithm: ${System.currentTimeMillis() - timeBeforeBm25} ms; \nResult: $top3Chunks" }
213+
LOG.info { "Time ellapsed for BM25 algorithm: ${System.currentTimeMillis() - timeBeforeBm25} ms" }
214214

215215
yield()
216216

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/CodeWhispererFileCrawler.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ interface FileCrawler {
3737
* @return its source file e.g. Main.java, main.py or most relevant file if any
3838
*/
3939
fun findFocalFileForTest(psiFile: PsiFile): VirtualFile?
40+
41+
fun listRelevantFilesInEditors(psiFile: PsiFile): List<VirtualFile>
4042
}
4143

4244
class NoOpFileCrawler : FileCrawler {
@@ -46,6 +48,8 @@ class NoOpFileCrawler : FileCrawler {
4648
override fun findFocalFileForTest(psiFile: PsiFile): VirtualFile? = null
4749

4850
override fun listFilesWithinSamePackage(psiFile: PsiFile): List<VirtualFile> = emptyList()
51+
52+
override fun listRelevantFilesInEditors(psiFile: PsiFile): List<VirtualFile> = emptyList()
4953
}
5054

5155
abstract class CodeWhispererFileCrawler : FileCrawler {

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/JavaCodeWhispererFileCrawler.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.intellij.openapi.application.runReadAction
77
import com.intellij.openapi.fileEditor.FileEditorManager
88
import com.intellij.openapi.module.ModuleUtilCore
99
import com.intellij.openapi.project.rootManager
10+
import com.intellij.openapi.roots.TestSourcesFilter
1011
import com.intellij.openapi.vfs.VfsUtil
1112
import com.intellij.openapi.vfs.VirtualFile
1213
import com.intellij.psi.PsiClassOwner
@@ -24,6 +25,12 @@ object JavaCodeWhispererFileCrawler : CodeWhispererFileCrawler() {
2425

2526
override fun guessSourceFileName(tstFileName: String): String = tstFileName.substring(0, tstFileName.length - "Test.java".length) + ".java"
2627

28+
override fun listRelevantFilesInEditors(psiFile: PsiFile): List<VirtualFile> = FileEditorManager.getInstance(psiFile.project).openFiles.toList().filter {
29+
it.name != psiFile.virtualFile.name &&
30+
it.extension == psiFile.virtualFile.extension &&
31+
!TestSourcesFilter.isTestSources(it, psiFile.project)
32+
}
33+
2734
override suspend fun listFilesImported(psiFile: PsiFile): List<VirtualFile> {
2835
if (psiFile !is PsiJavaFile) return emptyList()
2936
val result = mutableListOf<VirtualFile>()

jetbrains-core/src/software/aws/toolkits/jetbrains/services/codewhisperer/util/PythonCodeWhispererFileCrawler.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ object PythonCodeWhispererFileCrawler : CodeWhispererFileCrawler() {
1616
override val testFilenamePattern: Regex = Regex("""(?:test_([^/\\]+)\.py|([^/\\]+)_test\.py)${'$'}""")
1717
override suspend fun listFilesImported(psiFile: PsiFile): List<VirtualFile> = emptyList()
1818

19+
// TODO: Add implementation once we enable python cross file
20+
override fun listRelevantFilesInEditors(psiFile: PsiFile): List<VirtualFile> = emptyList()
21+
1922
override fun guessSourceFileName(tstFileName: String): String {
2023
assert(testFilenamePattern.matches(tstFileName))
2124
return tstFileName.substring(5)

0 commit comments

Comments
 (0)