diff --git a/src/ClaudeDev.ts b/src/ClaudeDev.ts index 0a0eba6..f271f29 100644 --- a/src/ClaudeDev.ts +++ b/src/ClaudeDev.ts @@ -310,27 +310,17 @@ export class ClaudeDev { .catch(() => false) if (fileExists) { const originalContent = await fs.readFile(filePath, "utf-8") + // condensed patch to return to claude const diffResult = diff.createPatch(filePath, originalContent, newContent) - // Create diff for DiffCodeView.tsx - const completeDiffStringRaw = diff.diffLines(originalContent, newContent) - const completeDiffStringConverted = completeDiffStringRaw - .map((part, index) => { - const prefix = part.added ? "+ " : part.removed ? "- " : " " - const value = part.value || "" - return value + // full diff representation for webview + const diffRepresentation = diff + .diffLines(originalContent, newContent) + .map((part) => { + const prefix = part.added ? "+" : part.removed ? "-" : " " + return (part.value || "") .split("\n") - .map((line, lineIndex) => { - // avoid adding an extra empty line at the very end of the diff output - if ( - line === "" && - index === completeDiffStringRaw.length - 1 && - lineIndex === value.split("\n").length - 1 - ) { - return null - } - return prefix + line + "\n" - }) - .join("") + .map((line) => (line ? prefix + line : "")) + .join("\n") }) .join("") @@ -339,7 +329,7 @@ export class ClaudeDev { JSON.stringify({ tool: "editedExistingFile", path: filePath, - diff: completeDiffStringConverted, + diff: diffRepresentation, } as ClaudeSayTool) ) if (response !== "yesButtonTapped") { diff --git a/webview-ui/src/components/ChatRow.tsx b/webview-ui/src/components/ChatRow.tsx index 0f027f9..ba93a79 100644 --- a/webview-ui/src/components/ChatRow.tsx +++ b/webview-ui/src/components/ChatRow.tsx @@ -133,6 +133,7 @@ const ChatRow: React.FC = ({ maxWidth: "100%", margin: 0, padding: "10px", + // important to note that min-width: max-content is not required here how it is in CodeBlock.tsx borderRadius: 3, border: "1px solid var(--vscode-sideBar-border)", fontSize: "var(--vscode-editor-font-size)", @@ -141,7 +142,10 @@ const ChatRow: React.FC = ({ }} /> ) : ( - + {children} ) diff --git a/webview-ui/src/components/CodeBlock/CodeBlock.tsx b/webview-ui/src/components/CodeBlock/CodeBlock.tsx index 74db7d1..f93d42b 100644 --- a/webview-ui/src/components/CodeBlock/CodeBlock.tsx +++ b/webview-ui/src/components/CodeBlock/CodeBlock.tsx @@ -1,4 +1,3 @@ -import { VSCodeButton } from "@vscode/webview-ui-toolkit/react" import { useMemo } from "react" import { Prism as SyntaxHighlighter } from "react-syntax-highlighter" import { getLanguageFromPath } from "../../utilities/getLanguageFromPath" @@ -97,11 +96,12 @@ const CodeBlock = ({ borderRadius: "3px", backgroundColor: "var(--vscode-editor-background)", overflow: "hidden", // This ensures the inner scrollable area doesn't overflow the rounded corners - border: "1px solid var(--vscode-sideBar-border)", + border: "1px solid var(--vscode-editorGroup-border)", }}> {path && (
{removeLeadingNonAlphanumeric(path) + "\u200E"} - - - +
)} {(!path || isExpanded) && ( @@ -152,6 +149,13 @@ const CodeBlock = ({ customStyle={{ margin: 0, padding: "6px 10px", + /* + overflowX: auto + inner div with padding results in an issue where the top/left/bottom padding renders but the right padding inside does not count as overflow as the width of the element is not exceeded. Once the inner div is outside the boundaries of the parent it counts as overflow. + https://stackoverflow.com/questions/60778406/why-is-padding-right-clipped-with-overflowscroll/77292459#77292459 + this fixes the issue of right padding clipped off + “ideal” size in a given axis when given infinite available space--allows the syntax highlighter to grow to largest possible width including its padding + */ + minWidth: "max-content", borderRadius: 0, fontSize: "var(--vscode-editor-font-size)", lineHeight: "var(--vscode-editor-line-height)",