mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-09 19:45:16 +00:00
feat: add 'Include Open Files' chat action item (closes #796)
This commit is contained in:
parent
8d6ca73064
commit
a596fa969c
7 changed files with 51 additions and 3 deletions
|
|
@ -43,5 +43,7 @@ public final class Icons {
|
|||
IconLoader.getIcon("/icons/vcs.svg", Icons.class);
|
||||
public static final Icon QuestionMark =
|
||||
IconLoader.getIcon("/icons/questionMark.svg", Icons.class);
|
||||
public static final Icon ListFiles =
|
||||
IconLoader.getIcon("/icons/listFiles.svg", Icons.class);
|
||||
public static final Icon StatusBarCompletionInProgress = new AnimatedIcon.Default();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package ee.carlrobert.codegpt.ui.textarea
|
||||
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.diagnostic.thisLogger
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import ee.carlrobert.codegpt.CodeGPTKeys
|
||||
|
|
@ -11,10 +12,24 @@ import java.io.File
|
|||
@Service
|
||||
class FileSearchService private constructor(val project: Project) {
|
||||
|
||||
companion object {
|
||||
private val logger = thisLogger()
|
||||
}
|
||||
|
||||
fun addFileToSession(file: VirtualFile) {
|
||||
addFilesToSession(listOf(file))
|
||||
}
|
||||
|
||||
fun addFilesToSession(files: List<VirtualFile>) {
|
||||
val filesIncluded =
|
||||
project.getUserData(CodeGPTKeys.SELECTED_FILES).orEmpty().toMutableList()
|
||||
filesIncluded.add(ReferencedFile(File(file.path)))
|
||||
files.forEach { file ->
|
||||
try {
|
||||
filesIncluded.add(ReferencedFile(File(file.path)))
|
||||
} catch (e: Exception) {
|
||||
logger.error("Failed to add file to session", e)
|
||||
}
|
||||
}
|
||||
updateFilesInSession(filesIncluded)
|
||||
}
|
||||
|
||||
|
|
@ -26,4 +41,4 @@ class FileSearchService private constructor(val project: Project) {
|
|||
.syncPublisher(IncludeFilesInContextNotifier.FILES_INCLUDED_IN_CONTEXT_TOPIC)
|
||||
.filesIncluded(files)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2,13 +2,16 @@ package ee.carlrobert.codegpt.ui.textarea.suggestion.item
|
|||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.options.ShowSettingsUtil
|
||||
import com.intellij.openapi.progress.ProgressManager
|
||||
import com.intellij.openapi.project.Project
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.openapi.vfs.isFile
|
||||
import ee.carlrobert.codegpt.CodeGPTBundle
|
||||
import ee.carlrobert.codegpt.CodeGPTKeys
|
||||
import ee.carlrobert.codegpt.EncodingManager
|
||||
import ee.carlrobert.codegpt.Icons
|
||||
import ee.carlrobert.codegpt.settings.GeneralSettings
|
||||
import ee.carlrobert.codegpt.settings.documentation.DocumentationSettings
|
||||
import ee.carlrobert.codegpt.settings.documentation.DocumentationsConfigurable
|
||||
|
|
@ -21,6 +24,7 @@ import ee.carlrobert.codegpt.ui.textarea.FileSearchService
|
|||
import ee.carlrobert.codegpt.ui.textarea.PromptTextField
|
||||
import ee.carlrobert.codegpt.util.GitUtil
|
||||
import git4idea.GitCommit
|
||||
import javax.swing.Icon
|
||||
|
||||
class FileActionItem(val file: VirtualFile) : SuggestionActionItem {
|
||||
override val displayName = file.name
|
||||
|
|
@ -32,6 +36,18 @@ class FileActionItem(val file: VirtualFile) : SuggestionActionItem {
|
|||
}
|
||||
}
|
||||
|
||||
class IncludeOpenFilesActionItem : SuggestionActionItem {
|
||||
override val displayName: String =
|
||||
CodeGPTBundle.get("suggestionActionItem.includeOpenFiles.displayName")
|
||||
override val icon: Icon = Icons.ListFiles
|
||||
|
||||
override fun execute(project: Project, textPane: PromptTextField) {
|
||||
val openFiles = project.service<FileEditorManager>().openFiles.toList()
|
||||
project.service<FileSearchService>().addFilesToSession(openFiles)
|
||||
textPane.addInlayElement("files", "Open Files", this)
|
||||
}
|
||||
}
|
||||
|
||||
class FolderActionItem(val folder: VirtualFile) : SuggestionActionItem {
|
||||
override val displayName = folder.name
|
||||
override val icon = AllIcons.Nodes.Folder
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class FileSuggestionGroupItem(private val project: Project) : SuggestionGroupIte
|
|||
return FileUtil.searchProjectFiles(project, searchText).toFileSuggestions()
|
||||
}
|
||||
|
||||
private fun Iterable<VirtualFile>.toFileSuggestions() = take(10).map { FileActionItem(it) }
|
||||
private fun Iterable<VirtualFile>.toFileSuggestions() = take(10).map { FileActionItem(it) } + IncludeOpenFilesActionItem()
|
||||
}
|
||||
|
||||
class FolderSuggestionGroupItem(private val project: Project) : SuggestionGroupItem {
|
||||
|
|
|
|||
7
src/main/resources/icons/listFiles.svg
Normal file
7
src/main/resources/icons/listFiles.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<!-- Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="2.5" y="1.5" width="11" height="13" rx="1.5" stroke="#6C707E"/>
|
||||
<rect x="5" y="5" width="6" height="1" rx="0.5" fill="#6C707E"/>
|
||||
<rect x="5" y="7.5" width="6" height="1" rx="0.5" fill="#6C707E"/>
|
||||
<rect x="5" y="10" width="6" height="1" rx="0.5" fill="#6C707E"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 501 B |
7
src/main/resources/icons/listFiles_dark.svg
Normal file
7
src/main/resources/icons/listFiles_dark.svg
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
<!-- Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -->
|
||||
<svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect x="2.5" y="1.5" width="11" height="13" rx="1.5" stroke="#CED0D6"/>
|
||||
<rect x="5" y="5" width="6" height="1" rx="0.5" fill="#CED0D6"/>
|
||||
<rect x="5" y="7.5" width="6" height="1" rx="0.5" fill="#CED0D6"/>
|
||||
<rect x="5" y="10" width="6" height="1" rx="0.5" fill="#CED0D6"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 501 B |
|
|
@ -300,3 +300,4 @@ suggestionActionItem.webSearch.displayName=Web
|
|||
suggestionActionItem.viewDocumentations.displayName=View all docs
|
||||
suggestionActionItem.createPersona.displayName=Create new persona
|
||||
suggestionActionItem.createDocumentation.displayName=Create new documentation
|
||||
suggestionActionItem.includeOpenFiles.displayName=Include Open Files
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue