Skip to content

Commit bff073b

Browse files
authored
chore: some minor code adjustments (conwnet#755)
* chore: update docs * chore: remove unused codes * feat: add feature enablement control * feat: update discovery key
1 parent 4e88ad4 commit bff073b

14 files changed

Lines changed: 74 additions & 65 deletions

File tree

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ See the [development guide](docs/development.md) to run GitHub1s locally. Report
5858

5959
[conwnet](https://github.com/conwnet) · [xcv58](https://github.com/xcv58) · [Siddhant Khare](https://github.com/Siddhant-K-code)
6060

61-
## 💖 Acknowledgments
61+
## 💖 Thanks
6262

63-
Thanks to everyone who has contributed to GitHub1s, and to [Sourcegraph](https://sourcegraph.com/), [searchcode](https://searchcode.com/), and [OSS Insight](https://ossinsight.io/) for their support of the project.
63+
Thanks to everyone who has contributed to GitHub1s, and to [Sourcegraph](https://sourcegraph.com/), [searchcode](https://searchcode.com/), and [OSS Insight](https://ossinsight.io/) for the tools and services used by GitHub1s.
6464

6565
## 📄 License
6666

‎docs/usage.md‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,9 @@ For branches or tags, you can also run **GitHub1s: Checkout to...**. Its **Check
3535

3636
- Use **Explorer** to browse files and directories, or **Go to File** to find a file by name.
3737
- Use **Search** for text across the repository and the editor's **Find** action for the open file.
38-
- Open **Source Control** to inspect **Commits**, **File History**, and **Code Reviews** where the platform supports them.
39-
- Select a commit or pull/merge request to inspect its changed files and diffs.
38+
- Open a file and expand **Timeline** in **Explorer** to inspect its history. Select a commit entry to open that file's diff.
39+
- In **Source Control**, use the built-in **Graph** view to browse commits for the current ref and inspect their changed files and diffs.
40+
- In **Source Control**, select a pull/merge request from **Pull Requests** (GitHub) or **Merge Requests** (GitLab) to inspect its changed files and diffs.
4041
- Run **GitHub1s: Toggle File Blame** to display revision information beside file lines where available.
4142

4243
Open the Command Palette with `F1`, `Ctrl+Shift+P`, or `Cmd+Shift+P` on macOS. Browser and operating-system shortcuts can take precedence.

‎extensions/github1s/src/adapters/bitbucket1s/index.ts‎

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import { BitbucketRouterParser } from './router-parser';
77
import { SourcegraphDataSource } from '../sourcegraph/data-source';
88
import { Adapter, CodeReviewType, PlatformName } from '../types';
9-
import { setVSCodeContext } from '@/helpers/vscode';
109

1110
export class BitbucketAdapter implements Adapter {
1211
public scheme: string = 'bitbucket1s';
@@ -20,14 +19,4 @@ export class BitbucketAdapter implements Adapter {
2019
resolveRouterParser() {
2120
return Promise.resolve(BitbucketRouterParser.getInstance());
2221
}
23-
24-
activateAsDefault() {
25-
setVSCodeContext('github1s:views:commitList:visible', true);
26-
setVSCodeContext('github1s:features:gutterBlame:enabled', true);
27-
}
28-
29-
deactivateAsDefault() {
30-
setVSCodeContext('github1s:views:commitList:visible', false);
31-
setVSCodeContext('github1s:features:gutterBlame:enabled', false);
32-
}
3322
}

‎extensions/github1s/src/adapters/github1s/index.ts‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ export class GitHub1sAdapter implements Adapter {
2929
activateAsDefault() {
3030
// register settings view and show it in activity bar
3131
setVSCodeContext('github1s:views:settings:visible', true);
32-
setVSCodeContext('github1s:views:codeReviewList:visible', true);
33-
setVSCodeContext('github1s:views:commitList:visible', true);
34-
setVSCodeContext('github1s:features:gutterBlame:enabled', true);
3532

3633
vscode.window.registerWebviewViewProvider(
3734
GitHub1sSettingsViewProvider.viewType,
@@ -51,8 +48,5 @@ export class GitHub1sAdapter implements Adapter {
5148

5249
deactivateAsDefault() {
5350
setVSCodeContext('github1s:views:settings:visible', false);
54-
setVSCodeContext('github1s:views:codeReviewList:visible', false);
55-
setVSCodeContext('github1s:views:commitList:visible', false);
56-
setVSCodeContext('github1s:features:gutterBlame:enabled', false);
5751
}
5852
}

‎extensions/github1s/src/adapters/gitlab1s/index.ts‎

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ export class GitLab1sAdapter implements Adapter {
2929
activateAsDefault() {
3030
// register settings view and show it in activity bar
3131
setVSCodeContext('github1s:views:settings:visible', true);
32-
setVSCodeContext('github1s:views:codeReviewList:visible', true);
33-
setVSCodeContext('github1s:views:commitList:visible', true);
34-
setVSCodeContext('github1s:features:gutterBlame:enabled', true);
3532

3633
vscode.window.registerWebviewViewProvider(
3734
GitLab1sSettingsViewProvider.viewType,
@@ -49,8 +46,5 @@ export class GitLab1sAdapter implements Adapter {
4946

5047
deactivateAsDefault() {
5148
setVSCodeContext('github1s:views:settings:visible', false);
52-
setVSCodeContext('github1s:views:codeReviewList:visible', false);
53-
setVSCodeContext('github1s:views:commitList:visible', false);
54-
setVSCodeContext('github1s:features:gutterBlame:enabled', false);
5549
}
5650
}

‎extensions/github1s/src/adapters/index.ts‎

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { BitbucketAdapter } from './bitbucket1s';
1010
import { Npmjs1sAdapter } from './npmjs1s';
1111
import { DiscoveryAdapter } from './discovery';
1212
import { Adapter, DataSource, PlatformName, RouterParser } from './types';
13+
import { setVSCodeContext } from '@/helpers/vscode';
1314

1415
const emptyAdapter = {
1516
scheme: 'empty',
@@ -27,6 +28,8 @@ export const registerAdapters = async (): Promise<void> => {
2728
adapterManager.registerAdapter(new Npmjs1sAdapter()),
2829
adapterManager.registerAdapter(new DiscoveryAdapter()),
2930
]);
31+
await setVSCodeContext('github1s:views:codeReviewList:visible', await supportsCodeReviewFeatures());
32+
await setVSCodeContext('github1s:features:gutterBlame:enabled', await supportsGutterBlameFeatures());
3033
};
3134

3235
export const getAdapter = (scheme?: string): Adapter => {
@@ -36,3 +39,31 @@ export const getAdapter = (scheme?: string): Adapter => {
3639
export const getAllAdapters = (): Adapter[] => {
3740
return adapterManager.getAllAdapters();
3841
};
42+
43+
export const supportsDataSourceMethods = async (
44+
methods: (keyof DataSource)[],
45+
scheme: string = getAdapter().scheme,
46+
): Promise<boolean> => {
47+
const adapter = getAllAdapters().find((adapter) => adapter.scheme === scheme);
48+
if (!adapter) {
49+
return false;
50+
}
51+
const dataSource = await adapter.resolveDataSource();
52+
// Inherited default methods return empty results and do not indicate support.
53+
return methods.every((method) => dataSource[method] !== DataSource.prototype[method]);
54+
};
55+
56+
export const supportsCommitFeatures = (scheme?: string): Promise<boolean> => {
57+
return supportsDataSourceMethods(['provideCommits', 'provideCommit', 'provideCommitChangedFiles'], scheme);
58+
};
59+
60+
export const supportsCodeReviewFeatures = (scheme?: string): Promise<boolean> => {
61+
return supportsDataSourceMethods(
62+
['provideCodeReviews', 'provideCodeReview', 'provideCodeReviewChangedFiles'],
63+
scheme,
64+
);
65+
};
66+
67+
export const supportsGutterBlameFeatures = (scheme?: string): Promise<boolean> => {
68+
return supportsDataSourceMethods(['provideFileBlameRanges'], scheme);
69+
};

‎extensions/github1s/src/changes/index.ts‎

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import * as vscode from 'vscode';
77
import * as adapterTypes from '@/adapters/types';
8+
import { supportsCommitFeatures } from '@/adapters';
89
import { getExtensionContext } from '@/helpers/context';
910
import { GitHub1sQuickDiffProvider } from './quick-diff';
1011
import { getChangedFileDiffCommand, getChangedFiles } from './files';
@@ -14,11 +15,15 @@ const sourceControl = vscode.scm.createSourceControl('github1s', 'GitHub1s');
1415
const changesGroup = sourceControl.createResourceGroup('changes', 'Changes');
1516
sourceControl.quickDiffProvider = new GitHub1sQuickDiffProvider();
1617

17-
export const registerSourceControlHistory = () => {
18+
export const registerSourceControlHistory = async () => {
1819
const context = getExtensionContext();
20+
context.subscriptions.push(sourceControl);
21+
if (!(await supportsCommitFeatures())) {
22+
return;
23+
}
1924
const historyProvider = GitHub1sHistoryProvider.getInstance();
2025
sourceControl.historyProvider = historyProvider;
21-
context.subscriptions.push(sourceControl, historyProvider);
26+
context.subscriptions.push(historyProvider);
2227
historyProvider.refresh();
2328
};
2429

‎extensions/github1s/src/commands/editor.ts‎

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import * as vscode from 'vscode';
77
import queryString from 'query-string';
88
import router from '@/router';
99
import { emptyFileUri } from '@/providers';
10+
import { supportsCommitFeatures } from '@/adapters';
1011
import { FileChangeStatus } from '@/adapters/types';
1112
import { Repository } from '@/repository';
1213
import { getChangedFiles, getChangedFileDiffCommand, getChangedFileDiffTitle } from '@/changes/files';
@@ -36,8 +37,8 @@ const commandDiffChangedFile = async (fileUri: vscode.Uri) => {
3637
vscode.commands.executeCommand(command.command, ...(command.arguments || []));
3738
};
3839

39-
const isRepositoryFileUri = (uri: vscode.Uri | undefined): uri is vscode.Uri => {
40-
return !!uri && /^(github1s|gitlab1s|bitbucket1s)$/.test(uri.scheme);
40+
const isRepositoryFileUri = async (uri: vscode.Uri | undefined): Promise<boolean> => {
41+
return !!uri && supportsCommitFeatures(uri.scheme);
4142
};
4243

4344
const getActiveDiffInput = (resource?: vscode.Uri): vscode.TabInputTextDiff | undefined => {
@@ -74,8 +75,10 @@ const resolveOpenFileRevisionArgs = async (
7475
if (textDiffInput) {
7576
// this is a diff editor
7677
const { original, modified } = textDiffInput;
77-
const hasLeftFile = isRepositoryFileUri(original);
78-
const hasRightFile = isRepositoryFileUri(modified);
78+
const [hasLeftFile, hasRightFile] = await Promise.all([
79+
isRepositoryFileUri(original),
80+
isRepositoryFileUri(modified),
81+
]);
7982

8083
if (direction === 'previous' && hasLeftFile) {
8184
baseUri = original;
@@ -86,7 +89,7 @@ const resolveOpenFileRevisionArgs = async (
8689
if (hasRightFile) {
8790
from = getQueryFrom(modified);
8891
}
89-
} else if (isRepositoryFileUri(fileUri)) {
92+
} else if (fileUri && (await isRepositoryFileUri(fileUri))) {
9093
// this is a single file editor
9194
from = getQueryFrom(fileUri);
9295
baseUri = fileUri;

‎extensions/github1s/src/providers/decorations/source-control.ts‎

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ const selectedViewItemDecoration: FileDecoration = {
2525

2626
export class GitHub1sSourceControlDecorationProvider implements FileDecorationProvider, Disposable {
2727
public static codeReviewSchema: string = 'github1s-source-control-code-review';
28-
public static commitSchema: string = 'github1s-source-control-commit';
2928
private static instance: GitHub1sSourceControlDecorationProvider | null = null;
3029

3130
private readonly disposable: Disposable;
@@ -60,11 +59,5 @@ export class GitHub1sSourceControlDecorationProvider implements FileDecorationPr
6059
const query = queryString.parse(uri.query);
6160
return +(routerState as any).codeReviewId === +query.id! ? selectedViewItemDecoration : null;
6261
}
63-
64-
if (uri.scheme === GitHub1sSourceControlDecorationProvider.commitSchema) {
65-
const routerState = router.getState();
66-
const query = queryString.parse(uri.query);
67-
return (routerState as any).commitSha === query.sha ? selectedViewItemDecoration : null;
68-
}
6962
}
7063
}

‎extensions/github1s/src/providers/index.ts‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
*/
55

66
import * as vscode from 'vscode';
7-
import { getAllAdapters } from '@/adapters';
7+
import { getAllAdapters, supportsCommitFeatures } from '@/adapters';
88
import { getExtensionContext } from '@/helpers/context';
99
import { GitHub1sFileSystemProvider } from './file-system';
1010
import { GitHub1sFileSearchProvider } from './file-search';
@@ -20,7 +20,7 @@ import { FileHistoryTimelineProvider } from './timeline';
2020
export const EMPTY_FILE_SCHEME = 'github1s-empty-file';
2121
export const emptyFileUri = vscode.Uri.from({ scheme: EMPTY_FILE_SCHEME });
2222

23-
export const registerVSCodeProviders = () => {
23+
export const registerVSCodeProviders = async () => {
2424
const context = getExtensionContext();
2525
const fileHistoryProvider = FileHistoryTimelineProvider.getInstance();
2626
const allSchemes = getAllAdapters().map((item) => item.scheme);
@@ -39,9 +39,12 @@ export const registerVSCodeProviders = () => {
3939
);
4040
});
4141

42+
const timelineSupport = await Promise.all(allSchemes.map(supportsCommitFeatures));
43+
const timelineSchemes = allSchemes.filter((_, index) => timelineSupport[index]);
44+
4245
context.subscriptions.push(
4346
fileHistoryProvider,
44-
vscode.workspace.registerTimelineProvider(FileHistoryTimelineProvider.schemes, fileHistoryProvider),
47+
vscode.workspace.registerTimelineProvider(timelineSchemes, fileHistoryProvider),
4548
vscode.window.registerFileDecorationProvider(GitHub1sSubmoduleDecorationProvider.getInstance()),
4649
vscode.window.registerFileDecorationProvider(GitHub1sChangedFileDecorationProvider.getInstance()),
4750
vscode.window.registerFileDecorationProvider(GitHub1sSourceControlDecorationProvider.getInstance()),

0 commit comments

Comments
 (0)