mirror of
https://github.com/microsoft/vscode.git
synced 2026-04-25 02:58:56 +01:00
registerDocumentLinkProvider
This commit is contained in:
@@ -74,6 +74,7 @@ export class ExtHostAPIImplementation {
|
||||
CompletionItem: typeof vscode.CompletionItem;
|
||||
CompletionItemKind: typeof vscode.CompletionItemKind;
|
||||
CompletionList: typeof vscode.CompletionList;
|
||||
DocumentLink: typeof vscode.DocumentLink;
|
||||
IndentAction: typeof vscode.IndentAction;
|
||||
OverviewRulerLane: typeof vscode.OverviewRulerLane;
|
||||
TextEditorRevealType: typeof vscode.TextEditorRevealType;
|
||||
@@ -150,6 +151,7 @@ export class ExtHostAPIImplementation {
|
||||
this.CompletionItem = extHostTypes.CompletionItem;
|
||||
this.CompletionItemKind = extHostTypes.CompletionItemKind;
|
||||
this.CompletionList = extHostTypes.CompletionList;
|
||||
this.DocumentLink = extHostTypes.DocumentLink;
|
||||
this.ViewColumn = extHostTypes.ViewColumn;
|
||||
this.StatusBarAlignment = extHostTypes.StatusBarAlignment;
|
||||
this.IndentAction = Modes.IndentAction;
|
||||
@@ -369,6 +371,9 @@ export class ExtHostAPIImplementation {
|
||||
registerCompletionItemProvider(selector: vscode.DocumentSelector, provider: vscode.CompletionItemProvider, ...triggerCharacters: string[]): vscode.Disposable {
|
||||
return languageFeatures.registerCompletionItemProvider(selector, provider, triggerCharacters);
|
||||
},
|
||||
registerDocumentLinkProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentLinkProvider): vscode.Disposable {
|
||||
return languageFeatures.registerDocumentLinkProvider(selector, provider);
|
||||
},
|
||||
setLanguageConfiguration: (language: string, configuration: vscode.LanguageConfiguration):vscode.Disposable => {
|
||||
return languageFeatures.setLanguageConfiguration(language, configuration);
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ export abstract class MainThreadLanguageFeaturesShape {
|
||||
$registerRenameSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any> { throw ni(); }
|
||||
$registerSuggestSupport(handle: number, selector: vscode.DocumentSelector, triggerCharacters: string[]): TPromise<any> { throw ni(); }
|
||||
$registerSignatureHelpProvider(handle: number, selector: vscode.DocumentSelector, triggerCharacter: string[]): TPromise<any> { throw ni(); }
|
||||
$registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): TPromise<any> { throw ni(); }
|
||||
$setLanguageConfiguration(handle: number, languageId:string, configuration: vscode.LanguageConfiguration): TPromise<any> { throw ni(); }
|
||||
}
|
||||
|
||||
@@ -267,6 +268,8 @@ export abstract class ExtHostLanguageFeaturesShape {
|
||||
$provideCompletionItems(handle: number, resource: URI, position: editorCommon.IPosition): TPromise<modes.ISuggestResult[]> { throw ni(); }
|
||||
$resolveCompletionItem(handle: number, resource: URI, position: editorCommon.IPosition, suggestion: modes.ISuggestion): TPromise<modes.ISuggestion> { throw ni(); }
|
||||
$provideSignatureHelp(handle: number, resource: URI, position: editorCommon.IPosition): TPromise<modes.SignatureHelp> { throw ni(); }
|
||||
$providDocumentLinks(handle: number, resource: URI): TPromise<modes.ILink[]> { throw ni(); }
|
||||
|
||||
}
|
||||
|
||||
export abstract class ExtHostQuickOpenShape {
|
||||
|
||||
@@ -588,10 +588,31 @@ class SignatureHelpAdapter {
|
||||
}
|
||||
}
|
||||
|
||||
class LinkProviderAdapter {
|
||||
|
||||
private _documents: ExtHostDocuments;
|
||||
private _provider: vscode.DocumentLinkProvider;
|
||||
|
||||
constructor(documents: ExtHostDocuments, provider: vscode.DocumentLinkProvider) {
|
||||
this._documents = documents;
|
||||
this._provider = provider;
|
||||
}
|
||||
|
||||
provideLinks(resource: URI): TPromise<modes.ILink[]> {
|
||||
const doc = this._documents.getDocumentData(resource).document;
|
||||
|
||||
return asWinJsPromise(token => this._provider.provideDocumentLinks(doc, token)).then(links => {
|
||||
if (Array.isArray(links)) {
|
||||
return links.map(TypeConverters.DocumentLink.from);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
type Adapter = OutlineAdapter | CodeLensAdapter | DefinitionAdapter | HoverAdapter
|
||||
| DocumentHighlightAdapter | ReferenceAdapter | QuickFixAdapter | DocumentFormattingAdapter
|
||||
| RangeFormattingAdapter | OnTypeFormattingAdapter | NavigateTypeAdapter | RenameAdapter
|
||||
| SuggestAdapter | SignatureHelpAdapter;
|
||||
| SuggestAdapter | SignatureHelpAdapter | LinkProviderAdapter;
|
||||
|
||||
export class ExtHostLanguageFeatures extends ExtHostLanguageFeaturesShape {
|
||||
|
||||
@@ -821,6 +842,19 @@ export class ExtHostLanguageFeatures extends ExtHostLanguageFeaturesShape {
|
||||
return this._withAdapter(handle, SignatureHelpAdapter, adapter => adapter.provideSignatureHelp(resource, position));
|
||||
}
|
||||
|
||||
// --- links
|
||||
|
||||
registerDocumentLinkProvider(selector: vscode.DocumentSelector, provider: vscode.DocumentLinkProvider): vscode.Disposable {
|
||||
const handle = this._nextHandle();
|
||||
this._adapter[handle] = new LinkProviderAdapter(this._documents, provider);
|
||||
this._proxy.$registerDocumentLinkProvider(handle, selector);
|
||||
return this._createDisposable(handle);
|
||||
}
|
||||
|
||||
$providDocumentLinks(handle: number, resource: URI): TPromise<modes.ILink[]> {
|
||||
return this._withAdapter(handle, LinkProviderAdapter, adapter => adapter.provideLinks(resource));
|
||||
}
|
||||
|
||||
// --- configuration
|
||||
|
||||
setLanguageConfiguration(languageId:string, configuration: vscode.LanguageConfiguration): vscode.Disposable {
|
||||
|
||||
@@ -318,6 +318,19 @@ export namespace SignatureHelp {
|
||||
}
|
||||
}
|
||||
|
||||
export namespace DocumentLink {
|
||||
|
||||
export function from(link: types.DocumentLink): modes.ILink {
|
||||
return {
|
||||
range: fromRange(link.range),
|
||||
url: link.target.toString()
|
||||
};
|
||||
}
|
||||
|
||||
export function to(link: modes.ILink):types.DocumentLink {
|
||||
return new types.DocumentLink(toRange(link.range), URI.parse(link.url));
|
||||
}
|
||||
}
|
||||
|
||||
export namespace Command {
|
||||
|
||||
|
||||
@@ -206,6 +206,17 @@ export class Position {
|
||||
|
||||
export class Range {
|
||||
|
||||
static is(thing: any): thing is Range {
|
||||
if (thing instanceof Range) {
|
||||
return true;
|
||||
}
|
||||
if (!thing) {
|
||||
return false;
|
||||
}
|
||||
return Position.is((<Range>thing).start)
|
||||
&& Position.is((<Range>thing.end));
|
||||
}
|
||||
|
||||
protected _start: Position;
|
||||
protected _end: Position;
|
||||
|
||||
@@ -769,3 +780,21 @@ export enum TextEditorRevealType {
|
||||
InCenter = 1,
|
||||
InCenterIfOutsideViewport = 2
|
||||
}
|
||||
|
||||
export class DocumentLink {
|
||||
|
||||
range: Range;
|
||||
|
||||
target: URI;
|
||||
|
||||
constructor(range: Range, target: URI) {
|
||||
if (!(target instanceof URI)) {
|
||||
throw illegalArgument('target');
|
||||
}
|
||||
if (!Range.is(range) || range.isEmpty) {
|
||||
throw illegalArgument('range');
|
||||
}
|
||||
this.range = range;
|
||||
this.target = target;
|
||||
}
|
||||
}
|
||||
@@ -201,6 +201,17 @@ export class MainThreadLanguageFeatures extends MainThreadLanguageFeaturesShape
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// --- links
|
||||
|
||||
$registerDocumentLinkProvider(handle: number, selector: vscode.DocumentSelector): TPromise<any> {
|
||||
this._registrations[handle] = modes.LinkProviderRegistry.register(selector, <modes.LinkProvider>{
|
||||
provideLinks: (model, token) => {
|
||||
return wireCancellationToken(token, this._proxy.$providDocumentLinks(handle, model.uri));
|
||||
}
|
||||
});
|
||||
return undefined;
|
||||
}
|
||||
|
||||
// --- configuration
|
||||
|
||||
$setLanguageConfiguration(handle: number, languageId: string, configuration: vscode.LanguageConfiguration): TPromise<any> {
|
||||
|
||||
Reference in New Issue
Block a user