Skip to content

Commit b40cf38

Browse files
committed
feat: allow to reference both directories and files at the same time
1 parent 6e77df2 commit b40cf38

File tree

5 files changed

+54
-36
lines changed

5 files changed

+54
-36
lines changed

core/index.d.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1865,6 +1865,16 @@ export interface CompiledMessagesResult {
18651865
contextPercentage: number;
18661866
}
18671867

1868+
export interface MentionFilesOrDirectoriesPayload {
1869+
data: MentionFileOrDirectoryPayload[];
1870+
}
1871+
1872+
interface MentionFileOrDirectoryPayload {
1873+
type: "file" | "folder";
1874+
fullPath: string;
1875+
name: string;
1876+
}
1877+
18681878
export interface MessageOption {
18691879
precompiled: boolean;
18701880
}

core/protocol/ideWebview.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
ApplyState,
77
ApplyToFilePayload,
88
HighlightedCodePayload,
9+
MentionFilesOrDirectoriesPayload,
910
MessageContent,
1011
RangeInFileWithContents,
1112
SetCodeToEditPayload,
@@ -78,8 +79,5 @@ export type ToWebviewFromIdeProtocol = ToWebviewFromIdeOrCoreProtocol & {
7879
exitEditMode: [undefined, void];
7980
focusEdit: [undefined, void];
8081
generateRule: [undefined, void];
81-
mentionFileOrDirectory: [
82-
{ type: "file" | "folder"; fullPath: string; name: string },
83-
void,
84-
];
82+
mentionFilesOrDirectories: [MentionFilesOrDirectoriesPayload, void];
8583
};
Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,36 +7,42 @@ import com.intellij.openapi.actionSystem.AnActionEvent
77
import com.intellij.openapi.actionSystem.CommonDataKeys
88
import com.intellij.openapi.vfs.VirtualFile
99

10-
class MentionFileOrFolderInChatAction : AnAction() {
10+
class MentionFilesOrFoldersInChatAction : AnAction() {
1111
override fun actionPerformed(e: AnActionEvent) {
1212
val continuePluginService = getContinuePluginService(e.project) ?: return
13-
val virtualFile = e.getFile() ?: return
14-
15-
val type = if (virtualFile.isDirectory) "folder" else "file"
16-
val params = mapOf(
17-
"type" to type,
18-
"fullPath" to virtualFile.url,
19-
"name" to virtualFile.name,
13+
val selectedFiles = e.getFiles()
14+
15+
val requestData = selectedFiles.map { vFile ->
16+
val type = if (vFile.isDirectory) "folder" else "file"
17+
18+
mapOf(
19+
"type" to type,
20+
"fullPath" to vFile.url,
21+
"name" to vFile.name,
22+
)
23+
}
24+
val requestParams = mapOf(
25+
"data" to requestData
2026
)
2127

22-
continuePluginService.sendToWebview("mentionFileOrDirectory", params)
28+
continuePluginService.sendToWebview("mentionFilesOrDirectories", requestParams)
2329
}
2430

2531
override fun update(e: AnActionEvent) {
26-
val file = e.getFile()
2732
val files = e.getFiles()
2833

29-
val isAvailable = file != null && files.size == 1
34+
val isAvailable = files.isNotEmpty()
3035

3136
e.presentation.isVisible = isAvailable
3237
}
3338

34-
private fun AnActionEvent.getFile(): VirtualFile? {
35-
return this.getData(CommonDataKeys.VIRTUAL_FILE)
36-
}
37-
3839
private fun AnActionEvent.getFiles(): Array<out VirtualFile> {
39-
return this.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY).orEmpty()
40+
val multipleFiles = this.getData(CommonDataKeys.VIRTUAL_FILE_ARRAY)
41+
if (multipleFiles != null) {
42+
return multipleFiles
43+
}
44+
45+
return this.getData(CommonDataKeys.VIRTUAL_FILE)?.let { arrayOf(it) } ?: emptyArray()
4046
}
4147

4248
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT

extensions/intellij/src/main/resources/META-INF/plugin.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@
182182
<override-text place="GoToAction" text="Continue: Add Highlighted Code to Context and Clear Chat"/>
183183
</action>
184184
<group id="ContinueProjectViewPopUpMenuGroup" popup="true" text="Continue">
185-
<action id="com.github.continuedev.continueintellijextension.actions.menu.file.MentionFileOrFolderInChatAction"
186-
class="com.github.continuedev.continueintellijextension.actions.menu.file.MentionFileOrFolderInChatAction"
185+
<action id="com.github.continuedev.continueintellijextension.actions.menu.file.MentionFilesOrFoldersInChatAction"
186+
class="com.github.continuedev.continueintellijextension.actions.menu.file.MentionFilesOrFoldersInChatAction"
187187
text="Mention in the Chat">
188188
</action>
189189

gui/src/components/mainInput/TipTapEditor/useMainEditorWebviewListeners.ts

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -200,22 +200,26 @@ export function useMainEditorWebviewListeners({
200200
);
201201

202202
useWebviewListener(
203-
"mentionFileOrDirectory",
203+
"mentionFilesOrDirectories",
204204
async (data) => {
205205
if (!editor) return;
206-
editor
207-
.chain()
208-
.insertContent({
209-
type: "mention",
210-
attrs: {
211-
id: data.fullPath,
212-
query: data.fullPath,
213-
itemType: data.type,
214-
label: data.name,
215-
},
216-
})
217-
.insertContent(" ")
218-
.run();
206+
let chain = editor.chain();
207+
208+
for (let mention of data.data) {
209+
chain
210+
.insertContent({
211+
type: "mention",
212+
attrs: {
213+
id: mention.fullPath,
214+
query: mention.fullPath,
215+
itemType: mention.type,
216+
label: mention.name,
217+
},
218+
})
219+
.insertContent(" ");
220+
}
221+
222+
chain.run();
219223
},
220224
[editor],
221225
);

0 commit comments

Comments
 (0)