Skip to content

Commit c1057a7

Browse files
authored
Check all local folders in multi-root workspace for local copy of file (#785)
1 parent 5af9c7a commit c1057a7

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

src/providers/DocumentContentProvider.ts

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,40 @@ export class DocumentContentProvider implements vscode.TextDocumentContentProvid
7777
// Exists as a local file and we aren't viewing a different namespace on the same server,
7878
// so return a file:// uri that will open the local file.
7979
return vscode.Uri.file(localFile);
80+
} else {
81+
// The local file doesn't exist in this folder, so check any other
82+
// local folders in this workspace if it's a multi-root workspace
83+
const wFolders = vscode.workspace.workspaceFolders;
84+
if (wFolders && wFolders.length > 1) {
85+
// This is a multi-root workspace
86+
for (const wFolder of wFolders) {
87+
if (wFolder.uri.scheme === "file" && wFolder.name !== workspaceFolder) {
88+
// This isn't the folder that we checked originally
89+
const wFolderConn = config("conn", wFolder.name);
90+
const compareConns = (): boolean => {
91+
if (wFolderConn.ns === conn.ns) {
92+
if (wFolderConn.server && conn.server) {
93+
if (wFolderConn.server === conn.server) {
94+
return true;
95+
}
96+
} else if (!wFolderConn.server && !conn.server) {
97+
if (wFolderConn.host === conn.host && wFolderConn.port === conn.port) {
98+
return true;
99+
}
100+
}
101+
}
102+
return false;
103+
};
104+
if (compareConns() && (!namespace || namespace === wFolderConn.ns)) {
105+
// This folder is connected to the same server:ns combination as the original folder
106+
const wFolderFile = this.getAsFile(name, wFolder.name);
107+
if (wFolderFile) {
108+
return vscode.Uri.file(wFolderFile);
109+
}
110+
}
111+
}
112+
}
113+
}
80114
}
81115
const { active } = conn;
82116
if (!active) {

0 commit comments

Comments
 (0)