Skip to content

Commit d564334

Browse files
authored
Sort and filter share providers (microsoft#183377)
1 parent 1fc4a6b commit d564334

File tree

5 files changed

+9
-4
lines changed

5 files changed

+9
-4
lines changed

src/vs/workbench/api/browser/mainThreadShare.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,12 @@ export class MainThreadShare implements MainThreadShareShape {
2424
this.proxy = extHostContext.getProxy(ExtHostContext.ExtHostShare);
2525
}
2626

27-
$registerShareProvider(handle: number, selector: IDocumentFilterDto[], id: string, label: string): void {
27+
$registerShareProvider(handle: number, selector: IDocumentFilterDto[], id: string, label: string, priority: number): void {
2828
const provider: IShareProvider = {
2929
id,
3030
label,
3131
selector,
32+
priority,
3233
provideShare: async (item: IShareableItem) => {
3334
return URI.revive(await this.proxy.$provideShare(handle, item, new CancellationTokenSource().token));
3435
}

src/vs/workbench/api/common/extHost.protocol.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1265,7 +1265,7 @@ export interface MainThreadSearchShape extends IDisposable {
12651265
}
12661266

12671267
export interface MainThreadShareShape extends IDisposable {
1268-
$registerShareProvider(handle: number, selector: IDocumentFilterDto[], id: string, label: string): void;
1268+
$registerShareProvider(handle: number, selector: IDocumentFilterDto[], id: string, label: string, priority: number): void;
12691269
$unregisterShareProvider(handle: number): void;
12701270
}
12711271

src/vs/workbench/api/common/extHostShare.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ export class ExtHostShare implements ExtHostShareShape {
3232
registerShareProvider(selector: vscode.DocumentSelector, provider: vscode.ShareProvider): vscode.Disposable {
3333
const handle = ExtHostShare.handlePool++;
3434
this.providers.set(handle, provider);
35-
this.proxy.$registerShareProvider(handle, DocumentSelector.from(selector, this.uriTransformer), provider.id, provider.label);
35+
this.proxy.$registerShareProvider(handle, DocumentSelector.from(selector, this.uriTransformer), provider.id, provider.label, provider.priority);
3636
return {
3737
dispose: () => {
3838
this.proxy.$unregisterShareProvider(handle);

src/vs/workbench/contrib/share/browser/shareService.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import { CancellationToken } from 'vs/base/common/cancellation';
77
import { IDisposable } from 'vs/base/common/lifecycle';
88
import { URI } from 'vs/base/common/uri';
9+
import { score } from 'vs/editor/common/languageSelector';
910
import { localize } from 'vs/nls';
1011
import { ISubmenuItem } from 'vs/platform/actions/common/actions';
1112
import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey';
@@ -46,7 +47,9 @@ export class ShareService implements IShareService {
4647
}
4748

4849
async provideShare(item: IShareableItem, token: CancellationToken): Promise<URI | undefined> {
49-
const providers = [...this._providers.values()];
50+
const providers = [...this._providers.values()]
51+
.filter((p) => score(p.selector, item.resourceUri, '', true, undefined, undefined) > 0)
52+
.sort((a, b) => a.priority - b.priority);
5053

5154
if (providers.length === 0) {
5255
return undefined;

src/vs/workbench/contrib/share/common/share.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ export interface IShareableItem {
1919
export interface IShareProvider {
2020
readonly id: string;
2121
readonly label: string;
22+
readonly priority: number;
2223
readonly selector: LanguageSelector;
2324
prepareShare?(item: IShareableItem, token: CancellationToken): Thenable<boolean | undefined>;
2425
provideShare(item: IShareableItem, token: CancellationToken): Thenable<URI | undefined>;

0 commit comments

Comments
 (0)