From 063d9312c4619bc816f04fdce065e0ce00717f87 Mon Sep 17 00:00:00 2001 From: Andrew Pareles Date: Thu, 14 Nov 2024 22:11:34 -0800 Subject: [PATCH] fix selection using .bind() --- package-lock.json | 11 ++++ package.json | 1 + .../void/browser/prompt/stringifyFiles.ts | 4 +- .../react/src/sidebar-tsx/SidebarChat.tsx | 54 +++++++++---------- .../void/browser/react/src/util/services.tsx | 8 +-- .../contrib/void/browser/react/tsconfig.json | 3 ++ 6 files changed, 48 insertions(+), 33 deletions(-) diff --git a/package-lock.json b/package-lock.json index b6133384..70f4138a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,6 +68,7 @@ "@types/node": "20.x", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "@types/react-syntax-highlighter": "^15.5.13", "@types/sinon": "^10.0.2", "@types/sinon-test": "^2.4.2", "@types/trusted-types": "^1.0.6", @@ -3098,6 +3099,16 @@ "@types/react": "*" } }, + "node_modules/@types/react-syntax-highlighter": { + "version": "15.5.13", + "resolved": "https://registry.npmjs.org/@types/react-syntax-highlighter/-/react-syntax-highlighter-15.5.13.tgz", + "integrity": "sha512-uLGJ87j6Sz8UaBAooU0T6lWJ0dBmjZgN1PZTrj05TNql2/XpC6+4HhMT5syIdFUUt+FASfCeLLv4kBygNU+8qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, "node_modules/@types/responselike": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", diff --git a/package.json b/package.json index 57f850dc..0a5189a7 100644 --- a/package.json +++ b/package.json @@ -130,6 +130,7 @@ "@types/node": "20.x", "@types/react": "^18.3.12", "@types/react-dom": "^18.3.1", + "@types/react-syntax-highlighter": "^15.5.13", "@types/sinon": "^10.0.2", "@types/sinon-test": "^2.4.2", "@types/trusted-types": "^1.0.6", diff --git a/src/vs/workbench/contrib/void/browser/prompt/stringifyFiles.ts b/src/vs/workbench/contrib/void/browser/prompt/stringifyFiles.ts index 98d566e7..11056b43 100644 --- a/src/vs/workbench/contrib/void/browser/prompt/stringifyFiles.ts +++ b/src/vs/workbench/contrib/void/browser/prompt/stringifyFiles.ts @@ -14,9 +14,9 @@ Selection: ${selectionStr}`} } -export const userInstructionsStr = (instructions: string, selections: CodeSelection[]) => { +export const userInstructionsStr = (instructions: string, selections: CodeSelection[] | null) => { let str = ''; - if (selections.length > 0) { + if (selections && selections.length > 0) { str += filesStr(selections); str += `Please edit the selected code following these instructions:\n` } diff --git a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx index 8137a1e0..589ce59c 100644 --- a/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx +++ b/src/vs/workbench/contrib/void/browser/react/src/sidebar-tsx/SidebarChat.tsx @@ -39,26 +39,30 @@ const getBasename = (pathStr: string) => { return parts[parts.length - 1] } -export const SelectedFiles = ({ type, selections, setStagingSelns, }: - | { type: 'past', selections: CodeSelection[]; setStagingSelns?: undefined } - | { type: 'staging', selections: CodeStagingSelection[]; setStagingSelns: ((files: CodeStagingSelection[]) => void) } +export const SelectedFiles = ( + { type, selections, setStaging }: + | { type: 'past', selections: CodeSelection[] | null; setStaging?: undefined } + | { type: 'staging', selections: CodeStagingSelection[] | null; setStaging: ((files: CodeStagingSelection[]) => void) } ) => { return ( - selections.length !== 0 && ( + !!selections && selections.length !== 0 && (
{selections.map((selection, i) => ( - {selection.selectionStr && setStagingSelns?.([...selections.slice(0, i), { ...selection, selectionStr: null }, ...selections.slice(i + 1, Infinity)])} - className="btn btn-secondary btn-sm border border-vscode-input-border rounded" - > - Remove - + {/* selection text */} + {type === 'staging' && selection.selectionStr && { + setStaging([...selections.slice(0, i), { ...selection, selectionStr: null }, ...selections.slice(i + 1, Infinity)]) + }} + className="btn btn-secondary btn-sm border border-vscode-input-border rounded" + >Remove )} />} ))} @@ -168,17 +172,15 @@ export const SidebarChat = () => { threadsStateService.setStaging([]) // clear staging setLatestError('') - const stagingSelections = threadsStateService.state._currentStagingSelections - - const selections = await Promise.all( - stagingSelections.map(async (sel) => ({ ...sel, content: await VSReadFile(fileService, sel.fileURI) })) + const currSelns = threadsStateService.state._currentStagingSelections + const selections = !currSelns ? null : await Promise.all( + currSelns.map(async (sel) => ({ ...sel, content: await VSReadFile(fileService, sel.fileURI) })) ).then( (files) => files.filter(file => file.content !== null) as CodeSelection[] ) // add system message to chat history const systemPromptElt: ChatMessage = { role: 'system', content: generateDiffInstructions } - threadsStateService.addMessageToCurrentThread(systemPromptElt) const userContent = userInstructionsStr(instructions, selections) @@ -215,11 +217,9 @@ export const SidebarChat = () => { voidConfig, abortRef: abortFnRef, }) - - } - const onAbort = useCallback(() => { + const onAbort = () => { // abort claude abortFnRef.current?.() @@ -231,12 +231,12 @@ export const SidebarChat = () => { setMessageStream('') setIsLoading(false) - }, [messageStream, threadsStateService]) + } const currentThread = threadsStateService.getCurrentThread(threadsState) - const selections = threadsState._currentStagingSelections ?? [] + const selections = threadsState._currentStagingSelections return <>
@@ -254,8 +254,8 @@ export const SidebarChat = () => {
{/* selections */} - {(selections.length || selections) &&
- + {(selections && selections.length !== 0) &&
+
}
void> = new Set() const configStateListeners: Set<(s: ConfigState) => void> = new Set() diff --git a/src/vs/workbench/contrib/void/browser/react/tsconfig.json b/src/vs/workbench/contrib/void/browser/react/tsconfig.json index 66c9dc85..291ee2c1 100644 --- a/src/vs/workbench/contrib/void/browser/react/tsconfig.json +++ b/src/vs/workbench/contrib/void/browser/react/tsconfig.json @@ -1,5 +1,8 @@ { "compilerOptions": { + "strict": true, + "exactOptionalPropertyTypes": false, + "jsx": "react-jsx", "moduleResolution": "NodeNext", "module": "NodeNext",