提交 8591582c 编写于 作者: A Alex Dima

Align IDeclarationSupport with ext host API

上级 1f3c9192
......@@ -36,7 +36,6 @@ import 'vs/editor/common/modes/monarch/monarchCommon';
import 'vs/editor/common/modes/monarch/monarchDefinition';
import 'vs/editor/common/modes/monarch/monarchLexer';
import 'vs/editor/common/modes/monarch/monarchCompile';
import 'vs/editor/common/modes/supports/declarationSupport';
import 'vs/editor/common/modes/supports/richEditSupport';
import 'vs/editor/common/modes/supports/suggestSupport';
import 'vs/editor/common/modes/supports/tokenizationSupport';
......
......@@ -522,7 +522,6 @@ export interface IReferenceSupport {
* Interface used to find declarations on a symbol
*/
export interface IDeclarationSupport {
canFindDeclaration(context:ILineContext, offset:number):boolean;
findDeclaration(resource:URI, position:editorCommon.IPosition):TPromise<IReference|IReference[]>;
}
......
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import URI from 'vs/base/common/uri';
import {TPromise} from 'vs/base/common/winjs.base';
import {IPosition} from 'vs/editor/common/editorCommon';
import {IDeclarationSupport, ILineContext, IMode, IReference} from 'vs/editor/common/modes';
import {handleEvent, isLineToken} from 'vs/editor/common/modes/supports';
export interface IDeclarationContribution {
tokens?: string[];
findDeclaration: (resource: URI, position: IPosition) => TPromise<IReference>;
}
export class DeclarationSupport implements IDeclarationSupport {
private _modeId: string;
private contribution: IDeclarationContribution;
/**
* Provide the token type postfixes for the tokens where a declaration can be found in the 'tokens' argument.
*/
constructor(modeId: string, contribution: IDeclarationContribution) {
this._modeId = modeId;
this.contribution = contribution;
}
public canFindDeclaration(context: ILineContext, offset:number):boolean {
return handleEvent(context, offset, (nestedMode:IMode, context:ILineContext, offset:number) => {
if (this._modeId === nestedMode.getId()) {
return (!Array.isArray(this.contribution.tokens) ||
this.contribution.tokens.length < 1 ||
isLineToken(context, offset, this.contribution.tokens));
} else if (nestedMode.declarationSupport) {
return nestedMode.declarationSupport.canFindDeclaration(context, offset);
} else {
return false;
}
});
}
public findDeclaration(resource: URI, position: IPosition): TPromise<IReference>{
return this.contribution.findDeclaration(resource, position);
}
}
......@@ -70,13 +70,7 @@ export class DefinitionAction extends EditorAction {
return false;
}
const model = this.editor.getModel();
const position = this.editor.getSelection().getStartPosition();
return DeclarationRegistry.all(model).some(provider => {
return provider.canFindDeclaration(
model.getLineContext(position.lineNumber),
position.column - 1);
});
return DeclarationRegistry.has(this.editor.getModel());
}
public run(): TPromise<any> {
......
......@@ -333,9 +333,9 @@ export class CSSMode extends AbstractMode {
Modes.HoverProviderRegistry.register(this.getId(), this);
// Modes.ReferenceSearchRegistry.register(this.getId(), this);
Modes.OutlineRegistry.register(this.getId(), this);
// this.declarationSupport = new DeclarationSupport(this.getId(), {
// tokens: [cssTokenTypes.TOKEN_VALUE + '.css'],
// findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
// this.declarationSupport = {
// findDeclaration: (resource, position) => this.findDeclaration(resource, position)
// };
Modes.SuggestRegistry.register(this.getId(), {
triggerCharacters: [' ', ':'],
......
......@@ -18,7 +18,6 @@ import {IModeService} from 'vs/editor/common/services/modeService';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {IThreadService, ThreadAffinity} from 'vs/platform/thread/common/thread';
import {IModelService} from 'vs/editor/common/services/modelService';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {IEditorWorkerService} from 'vs/editor/common/services/editorWorkerService';
import {CancellationToken} from 'vs/base/common/cancellation';
import {wireCancellationToken} from 'vs/base/common/async';
......@@ -210,9 +209,9 @@ export class LESSMode extends AbstractMode implements Modes.HoverProvider, Modes
this.inplaceReplaceSupport = this;
this.configSupport = this;
Modes.ReferenceSearchRegistry.register(this.getId(), this);
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: ['variable.less', lessTokenTypes.TOKEN_SELECTOR + '.class.less', lessTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
this.declarationSupport = {
findDeclaration: (resource, position) => this.findDeclaration(resource, position)
};
Modes.OutlineRegistry.register(this.getId(), this);
Modes.SuggestRegistry.register(this.getId(), {
......
......@@ -18,7 +18,6 @@ import {IModeService} from 'vs/editor/common/services/modeService';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {IThreadService, ThreadAffinity} from 'vs/platform/thread/common/thread';
import {IModelService} from 'vs/editor/common/services/modelService';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {IEditorWorkerService} from 'vs/editor/common/services/editorWorkerService';
import {CancellationToken} from 'vs/base/common/cancellation';
import {wireCancellationToken} from 'vs/base/common/async';
......@@ -311,9 +310,9 @@ export class SASSMode extends AbstractMode implements Modes.HoverProvider, Modes
this.inplaceReplaceSupport = this;
this.configSupport = this;
Modes.ReferenceSearchRegistry.register(this.getId(), this);
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: ['variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_SELECTOR + '.sass'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
this.declarationSupport = {
findDeclaration: (resource, position) => this.findDeclaration(resource, position)
};
Modes.OutlineRegistry.register(this.getId(), this);
Modes.SuggestRegistry.register(this.getId(), {
......
......@@ -337,10 +337,6 @@ class OccurrencesAdapter extends Adapter implements modes.IOccurrencesSupport {
class DeclarationAdapter extends Adapter implements modes.IDeclarationSupport {
canFindDeclaration(context: modes.ILineContext, offset: number): boolean {
return true;
}
findDeclaration(resource: URI, position: editor.IPosition): TPromise<modes.IReference[]> {
return this._worker(resource).then(worker => {
return worker.getDefinitionAtPosition(resource.toString(), this._positionToOffset(resource, position));
......
......@@ -162,10 +162,6 @@ class DeclarationAdapter implements modes.IDeclarationSupport {
this._provider = provider;
}
canFindDeclaration() {
return true;
}
findDeclaration(resource: URI, position: IPosition): TPromise<modes.IReference[]> {
let doc = this._documents.getDocumentData(resource).document;
let pos = TypeConverters.toPosition(position);
......@@ -887,9 +883,6 @@ export class MainThreadLanguageFeatures {
$registerDeclaractionSupport(handle: number, selector: vscode.DocumentSelector): TPromise<any> {
this._registrations[handle] = modes.DeclarationRegistry.register(selector, <modes.IDeclarationSupport>{
canFindDeclaration() {
return true;
},
findDeclaration: (resource: URI, position: IPosition): TPromise<modes.IReference[]> => {
return this._proxy.$findDeclaration(handle, resource, position);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册