in src/extension/uriRebaser.ts [71:143]
public async translateArtifactToLocal(artifactUri: string) { // Retval is validated.
if (Uri.parse(artifactUri, true).scheme === 'sarif') return artifactUri; // Sarif-scheme URIs are owned/created by us, so we know they exist.
const validateUri = async () => {
// Cache
if (this.validatedUrisArtifactToLocal.has(artifactUri))
return this.validatedUrisArtifactToLocal.get(artifactUri)!;
// File System Exist
if (await uriExists(artifactUri))
return artifactUri;
// Known Bases
for (const [artifactBase, localBase] of this.basesArtifactToLocal) {
if (!artifactUri.startsWith(artifactBase)) continue; // Just let it fall through?
const localUri = artifactUri.replace(artifactBase, localBase);
if (await uriExists(localUri)) {
this.updateValidatedUris(artifactUri, localUri);
return localUri;
}
}
{ // API-injected baseUris
const localUri = await this.tryUriBases(artifactUri);
if (localUri) return localUri;
}
// Distinct Project Items
const {file} = artifactUri;
if (this.distinctLocalNames.has(file) && this.store.distinctArtifactNames.has(file)) {
const localUri = this.distinctLocalNames.get(file)!; // Not undefined due to surrounding if.
this.updateValidatedUris(artifactUri, localUri);
this.updateBases(splitUri(artifactUri), splitUri(localUri));
return localUri;
}
// Open Docs
for (const doc of workspace.textDocuments) {
const localUri = doc.uri.toString();
if (localUri.file !== artifactUri.file) continue;
this.updateValidatedUris(artifactUri, localUri);
this.updateBases(splitUri(artifactUri), splitUri(localUri));
return localUri;
}
return ''; // Signals inability to rebase.
};
let validatedUri = await validateUri();
if (!validatedUri && !this.activeInfoMessages.has(artifactUri)) {
this.activeInfoMessages.add(artifactUri);
const choice = await window.showInformationMessage(`Unable to find '${artifactUri.file}'`, 'Locate...');
this.activeInfoMessages.delete(artifactUri);
if (choice) {
const extension = artifactUri.match(/\.([\w]+)$/)?.[1] ?? '';
const files = await window.showOpenDialog({
defaultUri: workspace.workspaceFolders?.[0]?.uri,
filters: { 'Matching file' : [extension] },
// Consider allowing folders.
});
if (!files?.length) return ''; // User cancelled.
const partsOld = splitUri(artifactUri);
const partsNew = splitUri(files[0].toString());
if (partsOld.last !== partsNew.last) {
void window.showErrorMessage(`File names must match: "${partsOld.last}" and "${partsNew.last}"`);
return '';
}
this.updateBases(partsOld, partsNew);
}
validatedUri = await validateUri(); // Try again
}
return validatedUri;
}