Use safe path comparison

This commit is contained in:
Saoud Rizwan
2024-09-22 20:05:38 -04:00
parent 69e681ebce
commit b5ca470ebf
5 changed files with 42 additions and 33 deletions

View File

@@ -29,6 +29,7 @@ import { regexSearchFiles } from "./utils/ripgrep"
import { parseMentions } from "./utils/context-mentions"
import { UrlContentFetcher } from "./utils/UrlContentFetcher"
import { diagnosticsToProblemsString, getNewDiagnostics } from "./utils/diagnostics"
import { arePathsEqual } from "./utils/path-helpers"
const SYSTEM_PROMPT = async (
supportsImages: boolean
@@ -786,7 +787,9 @@ export class ClaudeDev {
// if the file is already open, ensure it's not dirty before getting its contents
if (fileExists) {
const existingDocument = vscode.workspace.textDocuments.find((doc) => doc.uri.fsPath === absolutePath)
const existingDocument = vscode.workspace.textDocuments.find((doc) =>
arePathsEqual(doc.uri.fsPath, absolutePath)
)
if (existingDocument && existingDocument.isDirty) {
await existingDocument.save()
}
@@ -861,7 +864,10 @@ export class ClaudeDev {
const tabs = vscode.window.tabGroups.all
.map((tg) => tg.tabs)
.flat()
.filter((tab) => tab.input instanceof vscode.TabInputText && tab.input.uri.fsPath === absolutePath)
.filter(
(tab) =>
tab.input instanceof vscode.TabInputText && arePathsEqual(tab.input.uri.fsPath, absolutePath)
)
for (const tab of tabs) {
await vscode.window.tabGroups.close(tab)
// console.log(`Closed tab for ${absolutePath}`)
@@ -1291,11 +1297,11 @@ export class ClaudeDev {
getReadablePath(relPath: string): string {
// path.resolve is flexible in that it will resolve relative paths like '../../' to the cwd and even ignore the cwd if the relPath is actually an absolute path
const absolutePath = path.resolve(cwd, relPath)
if (cwd === path.join(os.homedir(), "Desktop")) {
if (arePathsEqual(cwd, path.join(os.homedir(), "Desktop"))) {
// User opened vscode without a workspace, so cwd is the Desktop. Show the full absolute path to keep the user aware of where files are being created
return absolutePath.toPosix()
}
if (path.normalize(absolutePath) === path.normalize(cwd)) {
if (arePathsEqual(path.normalize(absolutePath), path.normalize(cwd))) {
return path.basename(absolutePath).toPosix()
} else {
// show the relative path to the cwd
@@ -2107,7 +2113,7 @@ ${this.customInstructions.trim()}
if (includeFileDetails) {
details += `\n\n# Current Working Directory (${cwd.toPosix()}) Files\n`
const isDesktop = cwd === path.join(os.homedir(), "Desktop")
const isDesktop = arePathsEqual(cwd, path.join(os.homedir(), "Desktop"))
if (isDesktop) {
// don't want to immediately access desktop since it would show permission popup
details += "(Desktop files not shown automatically. Use list_files to explore if needed.)"