提交 12ea2146 编写于 作者: A Alex Dima

Extract ReferenceSupport to its own file

上级 64ab2947
......@@ -222,42 +222,6 @@ export class TypeDeclarationSupport extends AbstractSupport implements Modes.ITy
}
}
export interface IReferenceContribution {
tokens: string[];
findReferences: (resource: URI, position: EditorCommon.IPosition, includeDeclaration: boolean) => TPromise<Modes.IReference[]>;
}
export class ReferenceSupport extends AbstractSupport implements Modes.IReferenceSupport {
private contribution: IReferenceContribution;
/**
* Provide the token type postfixes for the tokens where a reference can be found in the 'tokens' argument.
*/
constructor(mode: Modes.IMode, contribution: IReferenceContribution) {
super(mode);
this.contribution = contribution;
}
public canFindReferences(context: Modes.ILineContext, offset:number):boolean {
return handleEvent(context, offset, (nestedMode:Modes.IMode, context:Modes.ILineContext, offset:number) => {
if (this.mode === nestedMode) {
return (!Array.isArray(this.contribution.tokens) ||
this.contribution.tokens.length < 1 ||
isLineToken(context, offset, this.contribution.tokens));
} else if (nestedMode.referenceSupport) {
return nestedMode.referenceSupport.canFindReferences(context, offset);
} else {
return false;
}
});
}
public findReferences(resource: URI, position: EditorCommon.IPosition, includeDeclaration: boolean): TPromise<Modes.IReference[]> {
return this.contribution.findReferences(resource, position, includeDeclaration);
}
}
export class ParameterHintsSupport extends AbstractSupport implements Modes.IParameterHintsSupport {
private contribution: Modes.IParameterHintsContribution;
......
/*---------------------------------------------------------------------------------------------
* 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 {TPromise} from 'vs/base/common/winjs.base';
import * as Modes from 'vs/editor/common/modes';
import EditorCommon = require('vs/editor/common/editorCommon');
import URI from 'vs/base/common/uri';
import {handleEvent, isLineToken} from 'vs/editor/common/modes/supports';
export interface IReferenceContribution {
tokens: string[];
findReferences: (resource: URI, position: EditorCommon.IPosition, includeDeclaration: boolean) => TPromise<Modes.IReference[]>;
}
export class ReferenceSupport implements Modes.IReferenceSupport {
private _modeId: string;
private contribution: IReferenceContribution;
/**
* Provide the token type postfixes for the tokens where a reference can be found in the 'tokens' argument.
*/
constructor(modeId: string, contribution: IReferenceContribution) {
this._modeId = modeId;
this.contribution = contribution;
}
public canFindReferences(context: Modes.ILineContext, offset:number):boolean {
return handleEvent(context, offset, (nestedMode:Modes.IMode, context:Modes.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.referenceSupport) {
return nestedMode.referenceSupport.canFindReferences(context, offset);
} else {
return false;
}
});
}
public findReferences(resource: URI, position: EditorCommon.IPosition, includeDeclaration: boolean): TPromise<Modes.IReference[]> {
return this.contribution.findReferences(resource, position, includeDeclaration);
}
}
......@@ -13,6 +13,7 @@ import {IOnEnterSupportOptions} from 'vs/editor/common/modes/supports/onEnter';
import {IDisposable} from 'vs/base/common/lifecycle';
import {IRichEditConfiguration} from 'vs/editor/common/modes/supports/richEditSupport';
import {IDeclarationContribution} from 'vs/editor/common/modes/supports/declarationSupport';
import {IReferenceContribution} from 'vs/editor/common/modes/supports/referenceSupport';
export var IModeService = createDecorator<IModeService>('modeService');
......@@ -45,7 +46,7 @@ export interface IModeService {
registerOutlineSupport(modeId: string, support: Modes.IOutlineSupport): IDisposable;
registerDeclarativeParameterHintsSupport(modeId: string, support: Modes.IParameterHintsContribution): IDisposable;
registerQuickFixSupport(modeId: string, support: Modes.IQuickFixSupport): IDisposable;
registerDeclarativeReferenceSupport(modeId: string, contribution: Supports.IReferenceContribution): IDisposable;
registerDeclarativeReferenceSupport(modeId: string, contribution: IReferenceContribution): IDisposable;
registerRenameSupport(modeId: string, support: Modes.IRenameSupport): IDisposable;
registerDeclarativeSuggestSupport(modeId: string, declaration: Supports.ISuggestContribution): IDisposable;
registerTokenizationSupport(modeId: string, callback: (mode: Modes.IMode) => Modes.ITokenizationSupport): IDisposable;
......
......@@ -27,6 +27,7 @@ import {IDisposable, combinedDispose, empty as EmptyDisposable} from 'vs/base/co
import {createAsyncDescriptor0, createAsyncDescriptor1} from 'vs/platform/instantiation/common/descriptors';
import {RichEditSupport, IRichEditConfiguration} from 'vs/editor/common/modes/supports/richEditSupport';
import {DeclarationSupport, IDeclarationContribution} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport, IReferenceContribution} from 'vs/editor/common/modes/supports/referenceSupport';
interface IModeConfigurationMap { [modeId: string]: any; }
......@@ -314,8 +315,8 @@ export class ModeServiceImpl implements IModeService {
return this.registerModeSupport(modeId, 'quickFixSupport', (mode) => support);
}
public registerDeclarativeReferenceSupport(modeId: string, contribution: Supports.IReferenceContribution): IDisposable {
return this.registerModeSupport(modeId, 'referenceSupport', (mode) => new Supports.ReferenceSupport(mode, contribution));
public registerDeclarativeReferenceSupport(modeId: string, contribution: IReferenceContribution): IDisposable {
return this.registerModeSupport(modeId, 'referenceSupport', (mode) => new ReferenceSupport(modeId, contribution));
}
public registerRenameSupport(modeId: string, support: Modes.IRenameSupport): IDisposable {
......
......@@ -23,6 +23,7 @@ import {IThreadService} from 'vs/platform/thread/common/thread';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
import {TokenizationSupport} from 'vs/editor/common/modes/supports/tokenizationSupport';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport} from 'vs/editor/common/modes/supports/referenceSupport';
export enum States {
Selector,
......@@ -337,7 +338,7 @@ export class CSSMode extends AbstractMode<cssWorker.CSSWorker> {
this.occurrencesSupport = this;
this.extraInfoSupport = this;
this.referenceSupport = new supports.ReferenceSupport(this, {
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: [cssTokenTypes.TOKEN_PROPERTY + '.css', cssTokenTypes.TOKEN_VALUE + '.css', cssTokenTypes.TOKEN_SELECTOR_TAG + '.css'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
......
......@@ -28,6 +28,7 @@ import {EMPTY_ELEMENTS} from 'vs/languages/html/common/htmlEmptyTagsShared';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
import {TokenizationSupport, IEnteringNestedModeData, ILeavingNestedModeData, ITokenizationCustomization} from 'vs/editor/common/modes/supports/tokenizationSupport';
// import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport} from 'vs/editor/common/modes/supports/referenceSupport';
export { htmlTokenTypes }; // export to be used by Razor. We are the main module, so Razor should get ot from use.
export { EMPTY_ELEMENTS }; // export to be used by Razor. We are the main module, so Razor should get ot from use.
......@@ -304,7 +305,7 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode<W> i
this.formattingSupport = this;
this.extraInfoSupport = this;
this.occurrencesSupport = this;
this.referenceSupport = new supports.ReferenceSupport(this, {
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: ['invalid'],
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
this.logicalSelectionSupport = this;
......
......@@ -21,6 +21,7 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat
import {ITelemetryService} from 'vs/platform/telemetry/common/telemetry';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport} from 'vs/editor/common/modes/supports/referenceSupport';
export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaScriptWorker> {
......@@ -41,7 +42,7 @@ export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaS
super(descriptor, instantiationService, threadService, telemetryService);
this.tokenizationSupport = tokenization.createTokenizationSupport(this, tokenization.Language.EcmaScript5);
this.referenceSupport = new supports.ReferenceSupport(this, {
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: [],
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
......
......@@ -22,6 +22,7 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat
import {IThreadService} from 'vs/platform/thread/common/thread';
import {IModelService} from 'vs/editor/common/services/modelService';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport} from 'vs/editor/common/modes/supports/referenceSupport';
export var language: Types.ILanguage = <Types.ILanguage> {
displayName: 'LESS',
......@@ -198,7 +199,7 @@ export class LESSMode extends Monarch.MonarchMode<lessWorker.LessWorker> impleme
this.modeService = modeService;
this.extraInfoSupport = this;
this.referenceSupport = new supports.ReferenceSupport(this, {
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: [lessTokenTypes.TOKEN_PROPERTY + '.less', lessTokenTypes.TOKEN_VALUE + '.less', 'variable.less', lessTokenTypes.TOKEN_SELECTOR + '.class.less', lessTokenTypes.TOKEN_SELECTOR + '.id.less', 'selector.less'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
......
......@@ -22,6 +22,7 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat
import {IThreadService} from 'vs/platform/thread/common/thread';
import {IModelService} from 'vs/editor/common/services/modelService';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport} from 'vs/editor/common/modes/supports/referenceSupport';
export var language = <Types.ILanguage>{
displayName: 'Sass',
......@@ -300,7 +301,7 @@ export class SASSMode extends Monarch.MonarchMode<sassWorker.SassWorker> impleme
this.modeService = modeService;
this.extraInfoSupport = this;
this.referenceSupport = new supports.ReferenceSupport(this, {
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: [sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_VALUE + '.sass', 'variable.decl.sass', 'variable.ref.sass', 'support.function.name.sass', sassTokenTypes.TOKEN_PROPERTY + '.sass', sassTokenTypes.TOKEN_SELECTOR + '.sass'],
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
......
......@@ -28,6 +28,7 @@ import {OnEnterSupport} from 'vs/editor/common/modes/supports/onEnter';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
import {RichEditSupport} from 'vs/editor/common/modes/supports/richEditSupport';
import {DeclarationSupport} from 'vs/editor/common/modes/supports/declarationSupport';
import {ReferenceSupport} from 'vs/editor/common/modes/supports/referenceSupport';
class SemanticValidator {
......@@ -253,7 +254,7 @@ export class TypeScriptMode<W extends typescriptWorker.TypeScriptWorker2> extend
}
});
this.referenceSupport = new supports.ReferenceSupport(this, {
this.referenceSupport = new ReferenceSupport(this.getId(), {
tokens: ['identifier.ts'],
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册