Skip to content

Commit c4d2ea0

Browse files
authored
Scheme strings debt (#3448)
1 parent 74c019d commit c4d2ea0

10 files changed

+42
-41
lines changed

src/common/uri.ts

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import * as pathUtils from 'path';
99
import * as vscode from 'vscode';
1010
import { Repository } from '../api/api';
1111
import { PullRequestModel } from '../github/pullRequestModel';
12-
import { FILECHANGE_FILE_SCHEME } from '../view/compareChangesTreeDataProvider';
1312
import { GitChangeType } from './file';
1413
import { TemporaryState } from './temporaryState';
1514

@@ -125,7 +124,7 @@ export async function asImageDataURI(uri: vscode.Uri, repository: Repository): P
125124
if (!KnownMediaExtensions.includes(ext)) {
126125
return;
127126
}
128-
const ref = uri.scheme === 'review' ? commit : isBase ? baseCommit : headCommit;
127+
const ref = uri.scheme === Schemes.Review ? commit : isBase ? baseCommit : headCommit;
129128
const { object } = await repository.getObjectDetails(ref, uri.fsPath);
130129
const { mimetype } = await repository.detectObjectType(object);
131130

@@ -167,7 +166,7 @@ export function toReviewUri(
167166
}
168167

169168
return uri.with({
170-
scheme: 'review',
169+
scheme: Schemes.Review,
171170
path,
172171
query: JSON.stringify(params),
173172
});
@@ -187,7 +186,7 @@ export function toResourceUri(uri: vscode.Uri, prNumber: number, fileName: strin
187186
};
188187

189188
return uri.with({
190-
scheme: FILECHANGE_FILE_SCHEME,
189+
scheme: Schemes.FileChange,
191190
query: JSON.stringify(params),
192191
});
193192
}
@@ -220,18 +219,22 @@ export function toPRUri(
220219
const path = uri.path;
221220

222221
return uri.with({
223-
scheme: 'pr',
222+
scheme: Schemes.Pr,
224223
path,
225224
query: JSON.stringify(params),
226225
});
227226
}
228227

229-
export enum Schemas {
230-
file = 'file'
228+
export enum Schemes {
229+
File = 'file',
230+
Review = 'review',
231+
Pr = 'pr',
232+
FileChange = 'filechange',
233+
GithubPr = 'githubpr'
231234
}
232235

233236
export function resolvePath(from: vscode.Uri, to: string) {
234-
if (from.scheme === Schemas.file) {
237+
if (from.scheme === Schemes.File) {
235238
return pathUtils.resolve(from.fsPath, to);
236239
} else {
237240
return pathUtils.posix.resolve(from.path, to);

src/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { Resource } from './common/resources';
1717
import { SessionState } from './common/sessionState';
1818
import { BRANCH_PUBLISH, FILE_LIST_LAYOUT, PR_SETTINGS_NAMESPACE } from './common/settingKeys';
1919
import { TemporaryState } from './common/temporaryState';
20-
import { handler as uriHandler } from './common/uri';
20+
import { Schemes, handler as uriHandler } from './common/uri';
2121
import { EXTENSION_ID, FOCUS_REVIEW_MODE } from './constants';
2222
import { createExperimentationService, ExperimentationTelemetry } from './experimentationService';
2323
import { setSyncedKeys } from './extensionState';
@@ -302,7 +302,7 @@ async function deferredActivate(context: vscode.ExtensionContext, apiImpl: GitAp
302302
Logger.debug('Creating tree view.', 'Activation');
303303
const prTree = new PullRequestsTreeDataProvider(telemetry);
304304
context.subscriptions.push(prTree);
305-
context.subscriptions.push(vscode.workspace.registerFileSystemProvider('pr', getInMemPRFileSystemProvider(), { isReadonly: true }));
305+
context.subscriptions.push(vscode.workspace.registerFileSystemProvider(Schemes.Pr, getInMemPRFileSystemProvider(), { isReadonly: true }));
306306

307307
Logger.appendLine('Looking for git repository');
308308

src/github/folderRepositoryManager.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { parseRepositoryRemotes, Remote } from '../common/remote';
1414
import { ISessionState } from '../common/sessionState';
1515
import { ITelemetry } from '../common/telemetry';
1616
import { EventType, TimelineEvent } from '../common/timelineEvent';
17-
import { fromPRUri } from '../common/uri';
17+
import { fromPRUri, Schemes } from '../common/uri';
1818
import { compareIgnoreCase, formatError, Predicate } from '../common/utils';
1919
import { EXTENSION_ID } from '../constants';
2020
import { REPO_KEYS, ReposState } from '../extensionState';
@@ -262,7 +262,7 @@ export class FolderRepositoryManager implements vscode.Disposable {
262262
const activeTextEditors = vscode.window.visibleTextEditors;
263263
if (activeTextEditors.length) {
264264
const visiblePREditor = activeTextEditors.find(
265-
editor => editor.document.uri.scheme === 'pr',
265+
editor => editor.document.uri.scheme === Schemes.Pr,
266266
);
267267

268268
if (visiblePREditor) {

src/view/compareChangesTreeDataProvider.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,13 @@ import * as vscode from 'vscode';
88
import { Repository } from '../api/api';
99
import { getGitChangeType } from '../common/diffHunk';
1010
import Logger from '../common/logger';
11-
import { fromGitHubURI } from '../common/uri';
11+
import { fromGitHubURI, Schemes } from '../common/uri';
1212
import { FolderRepositoryManager } from '../github/folderRepositoryManager';
1313
import { GitHubRepository } from '../github/githubRepository';
1414
import { ReadonlyFileSystemProvider } from './readonlyFileSystemProvider';
1515
import { GitHubFileChangeNode } from './treeNodes/fileChangeNode';
1616
import { TreeNode } from './treeNodes/treeNode';
1717

18-
export const GITHUB_FILE_SCHEME = 'githubpr';
19-
export const FILECHANGE_FILE_SCHEME = 'filechange';
2018

2119
export class CompareChangesTreeProvider implements vscode.TreeDataProvider<TreeNode> {
2220
private _view: vscode.TreeView<TreeNode>;
@@ -131,7 +129,7 @@ export class CompareChangesTreeProvider implements vscode.TreeDataProvider<TreeN
131129
if (!this._contentProvider) {
132130
this._contentProvider = new GitHubContentProvider(this._gitHubRepository);
133131
this._disposables.push(
134-
vscode.workspace.registerFileSystemProvider(GITHUB_FILE_SCHEME, this._contentProvider, { isReadonly: true }));
132+
vscode.workspace.registerFileSystemProvider(Schemes.GithubPr, this._contentProvider, { isReadonly: true }));
135133
}
136134

137135
const { octokit, remote } = await this._gitHubRepository.ensure();

src/view/fileTypeDecorationProvider.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import * as vscode from 'vscode';
77
import { ViewedState } from '../common/comment';
88
import { GitChangeType } from '../common/file';
9-
import { fromFileChangeNodeUri, fromPRUri, toResourceUri } from '../common/uri';
9+
import { fromFileChangeNodeUri, fromPRUri, Schemes, toResourceUri } from '../common/uri';
1010
import { FolderRepositoryManager } from '../github/folderRepositoryManager';
1111
import { PullRequestModel } from '../github/pullRequestModel';
1212
import { RepositoriesManager } from '../github/repositoriesManager';
@@ -38,7 +38,7 @@ export class FileTypeDecorationProvider implements vscode.FileDecorationProvider
3838
const fileChangeUri = toResourceUri(uri, model.number, change.fileName, fileChange.status);
3939
this._onDidChangeFileDecorations.fire(fileChangeUri);
4040
this._onDidChangeFileDecorations.fire(fileChangeUri.with({ scheme: folderManager.repository.rootUri.scheme }));
41-
this._onDidChangeFileDecorations.fire(fileChangeUri.with({ scheme: 'pr', authority: '' }));
41+
this._onDidChangeFileDecorations.fire(fileChangeUri.with({ scheme: Schemes.Pr, authority: '' }));
4242
}
4343
});
4444
});

src/view/pullRequestCommentController.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { CommentHandler, registerCommentHandler, unregisterCommentHandler } from
1010
import { DiffSide, IComment } from '../common/comment';
1111
import Logger from '../common/logger';
1212
import { ISessionState } from '../common/sessionState';
13-
import { fromPRUri } from '../common/uri';
13+
import { fromPRUri, Schemes } from '../common/uri';
1414
import { groupBy } from '../common/utils';
1515
import { FolderRepositoryManager } from '../github/folderRepositoryManager';
1616
import { GHPRComment, GHPRCommentThread, TemporaryComment } from '../github/prComment';
@@ -106,7 +106,7 @@ export class PullRequestCommentController implements CommentHandler, CommentReac
106106
}
107107

108108
const editorUri = editor.document.uri;
109-
if (editorUri.scheme !== 'pr') {
109+
if (editorUri.scheme !== Schemes.Pr) {
110110
return;
111111
}
112112

@@ -120,7 +120,7 @@ export class PullRequestCommentController implements CommentHandler, CommentReac
120120

121121
private getPREditors(editors: vscode.TextEditor[]): vscode.TextEditor[] {
122122
return editors.filter(editor => {
123-
if (editor.document.uri.scheme !== 'pr') {
123+
if (editor.document.uri.scheme !== Schemes.Pr) {
124124
return false;
125125
}
126126

@@ -306,7 +306,7 @@ export class PullRequestCommentController implements CommentHandler, CommentReac
306306
}
307307

308308
hasCommentThread(thread: GHPRCommentThread): boolean {
309-
if (thread.uri.scheme !== 'pr') {
309+
if (thread.uri.scheme !== Schemes.Pr) {
310310
return false;
311311
}
312312

@@ -533,7 +533,7 @@ export class PullRequestCommentController implements CommentHandler, CommentReac
533533
}
534534

535535
public async toggleReaction(comment: GHPRComment, reaction: vscode.CommentReaction): Promise<void> {
536-
if (comment.parent!.uri.scheme !== 'pr') {
536+
if (comment.parent!.uri.scheme !== Schemes.Pr) {
537537
return;
538538
}
539539

src/view/reviewCommentController.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import { getCommentingRanges } from '../common/commentingRanges';
1313
import { mapNewPositionToOld, mapOldPositionToNew } from '../common/diffPositionMapping';
1414
import { GitChangeType } from '../common/file';
1515
import { ISessionState } from '../common/sessionState';
16-
import { fromReviewUri, ReviewUriParams, toReviewUri } from '../common/uri';
16+
import { fromReviewUri, ReviewUriParams, Schemes, toReviewUri } from '../common/uri';
1717
import { formatError, groupBy, uniqBy } from '../common/utils';
1818
import { FolderRepositoryManager } from '../github/folderRepositoryManager';
1919
import { GHPRComment, GHPRCommentThread, TemporaryComment } from '../github/prComment';
@@ -378,7 +378,7 @@ export class ReviewCommentController
378378
// #endregion
379379

380380
hasCommentThread(thread: vscode.CommentThread): boolean {
381-
if (thread.uri.scheme === 'review') {
381+
if (thread.uri.scheme === Schemes.Review) {
382382
return true;
383383
}
384384

@@ -530,7 +530,7 @@ export class ReviewCommentController
530530

531531
// #region Review
532532
private getCommentSide(thread: GHPRCommentThread): DiffSide {
533-
if (thread.uri.scheme === 'review') {
533+
if (thread.uri.scheme === Schemes.Review) {
534534
const query = fromReviewUri(thread.uri.query);
535535
return query.base ? DiffSide.LEFT : DiffSide.RIGHT;
536536
}

src/view/reviewsManager.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as vscode from 'vscode';
77
import { Repository } from '../api/api';
88
import { GitApiImpl } from '../api/api1';
99
import { ITelemetry } from '../common/telemetry';
10+
import { Schemes } from '../common/uri';
1011
import { CredentialStore } from '../github/credentials';
1112
import { RepositoriesManager } from '../github/repositoriesManager';
1213
import { GitContentFileSystemProvider } from './gitContentProvider';
@@ -31,7 +32,7 @@ export class ReviewsManager {
3132
this._disposables = [];
3233
const gitContentProvider = new GitContentFileSystemProvider(gitApi, credentialStore);
3334
gitContentProvider.registerTextDocumentContentFallback(this.provideTextDocumentContent.bind(this));
34-
this._disposables.push(vscode.workspace.registerFileSystemProvider('review', gitContentProvider, { isReadonly: true }));
35+
this._disposables.push(vscode.workspace.registerFileSystemProvider(Schemes.Review, gitContentProvider, { isReadonly: true }));
3536
this.registerListeners();
3637
this._disposables.push(this._prsTreeDataProvider);
3738
}

src/view/treeNodes/fileChangeNode.ts

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,10 @@ import { DiffHunk, parsePatch } from '../../common/diffHunk';
1010
import { GitChangeType, InMemFileChange, SimpleFileChange } from '../../common/file';
1111
import Logger from '../../common/logger';
1212
import { FILE_LIST_LAYOUT } from '../../common/settingKeys';
13-
import { asImageDataURI, EMPTY_IMAGE_URI, fromReviewUri, ReviewUriParams, toResourceUri } from '../../common/uri';
13+
import { asImageDataURI, EMPTY_IMAGE_URI, fromReviewUri, ReviewUriParams, Schemes, toResourceUri } from '../../common/uri';
1414
import { groupBy } from '../../common/utils';
1515
import { FolderRepositoryManager, SETTINGS_NAMESPACE } from '../../github/folderRepositoryManager';
1616
import { IResolvedPullRequestModel, PullRequestModel } from '../../github/pullRequestModel';
17-
import { FILECHANGE_FILE_SCHEME, GITHUB_FILE_SCHEME } from '../compareChangesTreeDataProvider';
1817
import { DecorationProvider } from '../treeDecorationProvider';
1918
import { TreeNode, TreeNodeParent } from './treeNode';
2019

@@ -91,7 +90,7 @@ export class RemoteFileChangeNode extends TreeNode implements vscode.TreeItem {
9190
) {
9291
super();
9392
const viewed = this.pullRequest.fileChangeViewedState[fileName] ?? ViewedState.UNVIEWED;
94-
this.contextValue = `${FILECHANGE_FILE_SCHEME}:${GitChangeType[status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
93+
this.contextValue = `${Schemes.FileChange}:${GitChangeType[status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
9594
}`;
9695
this.label = path.basename(fileName);
9796
this.description = vscode.workspace.asRelativePath(path.dirname(fileName), false);
@@ -129,7 +128,7 @@ export class RemoteFileChangeNode extends TreeNode implements vscode.TreeItem {
129128
}
130129

131130
this._viewed = viewed;
132-
this.contextValue = `${FILECHANGE_FILE_SCHEME}:${GitChangeType[this.status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
131+
this.contextValue = `${Schemes.FileChange}:${GitChangeType[this.status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
133132
}`;
134133
}
135134

@@ -196,7 +195,7 @@ export class FileChangeNode extends TreeNode implements vscode.TreeItem {
196195
) {
197196
super();
198197
const viewed = this.pullRequest.fileChangeViewedState[this.fileName] ?? ViewedState.UNVIEWED;
199-
this.contextValue = `${FILECHANGE_FILE_SCHEME}:${GitChangeType[this.status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
198+
this.contextValue = `${Schemes.FileChange}:${GitChangeType[this.status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
200199
}`;
201200
this.label = path.basename(this.fileName);
202201
this.iconPath = vscode.ThemeIcon.File;
@@ -253,7 +252,7 @@ export class FileChangeNode extends TreeNode implements vscode.TreeItem {
253252
}
254253

255254
this._viewed = viewed;
256-
this.contextValue = `${FILECHANGE_FILE_SCHEME}:${GitChangeType[this.status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
255+
this.contextValue = `${Schemes.FileChange}:${GitChangeType[this.status]}:${viewed === ViewedState.VIEWED ? 'viewed' : 'unviewed'
257256
}`;
258257
}
259258

@@ -482,36 +481,36 @@ export class GitHubFileChangeNode extends TreeNode implements vscode.TreeItem {
482481
this.label = fileName;
483482
this.iconPath = vscode.ThemeIcon.File;
484483
this.fileChangeResourceUri = vscode.Uri.file(fileName).with({
485-
scheme: GITHUB_FILE_SCHEME,
484+
scheme: Schemes.GithubPr,
486485
query: JSON.stringify({ status, fileName }),
487486
});
488487

489488
let parentURI = vscode.Uri.file(fileName).with({
490-
scheme: GITHUB_FILE_SCHEME,
489+
scheme: Schemes.GithubPr,
491490
query: JSON.stringify({ fileName, branch: baseBranch }),
492491
});
493492
let headURI = vscode.Uri.file(fileName).with({
494-
scheme: GITHUB_FILE_SCHEME,
493+
scheme: Schemes.GithubPr,
495494
query: JSON.stringify({ fileName, branch: headBranch }),
496495
});
497496
switch (status) {
498497
case GitChangeType.ADD:
499498
parentURI = vscode.Uri.file(fileName).with({
500-
scheme: GITHUB_FILE_SCHEME,
499+
scheme: Schemes.GithubPr,
501500
query: JSON.stringify({ fileName, branch: baseBranch, isEmpty: true }),
502501
});
503502
break;
504503

505504
case GitChangeType.RENAME:
506505
parentURI = vscode.Uri.file(previousFileName!).with({
507-
scheme: GITHUB_FILE_SCHEME,
506+
scheme: Schemes.GithubPr,
508507
query: JSON.stringify({ fileName: previousFileName, branch: baseBranch, isEmpty: true }),
509508
});
510509
break;
511510

512511
case GitChangeType.DELETE:
513512
headURI = vscode.Uri.file(fileName).with({
514-
scheme: GITHUB_FILE_SCHEME,
513+
scheme: Schemes.GithubPr,
515514
query: JSON.stringify({ fileName, branch: headBranch, isEmpty: true }),
516515
});
517516
break;

src/view/treeNodes/pullRequestNode.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { DiffChangeType, getModifiedContentFromDiffHunk } from '../../common/dif
99
import { GitChangeType, SlimFileChange } from '../../common/file';
1010
import Logger from '../../common/logger';
1111
import { FILE_LIST_LAYOUT } from '../../common/settingKeys';
12-
import { fromPRUri, resolvePath, toPRUri, toReviewUri } from '../../common/uri';
12+
import { fromPRUri, resolvePath, Schemes, toPRUri, toReviewUri } from '../../common/uri';
1313
import { FolderRepositoryManager, SETTINGS_NAMESPACE } from '../../github/folderRepositoryManager';
1414
import { IResolvedPullRequestModel, PullRequestModel } from '../../github/pullRequestModel';
1515
import { getInMemPRFileSystemProvider } from '../inMemPRContentProvider';
@@ -293,7 +293,7 @@ export class PRNode extends TreeNode implements vscode.CommentingRangeProvider {
293293
document: vscode.TextDocument,
294294
_token: vscode.CancellationToken,
295295
): Promise<vscode.Range[] | undefined> {
296-
if (document.uri.scheme === 'pr') {
296+
if (document.uri.scheme === Schemes.Pr) {
297297
const params = fromPRUri(document.uri);
298298

299299
if (!params || params.prNumber !== this.pullRequestModel.number) {

0 commit comments

Comments
 (0)