提交 64ab2947 编写于 作者: A Alex Dima

Extract DeclarationSupport to its own file

上级 ba55cc21
......@@ -186,40 +186,6 @@ export function getBracketFor(tokenType:string, tokenText:string, mode:Modes.IMo
return Modes.Bracket.None;
}
export interface IDeclarationContribution {
tokens?: string[];
findDeclaration: (resource: URI, position: EditorCommon.IPosition) => TPromise<Modes.IReference>;
}
export class DeclarationSupport extends AbstractSupport implements Modes.IDeclarationSupport {
private contribution: IDeclarationContribution;
/**
* Provide the token type postfixes for the tokens where a declaration can be found in the 'tokens' argument.
*/
constructor(mode: Modes.IMode, contribution: IDeclarationContribution) {
super(mode);
this.contribution = contribution;
}
public canFindDeclaration(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.declarationSupport) {
return nestedMode.declarationSupport.canFindDeclaration(context, offset);
} else {
return false;
}
});
}
public findDeclaration(resource: URI, position: EditorCommon.IPosition): TPromise<Modes.IReference>{
return this.contribution.findDeclaration(resource, position);
}
}
export interface ITypeDeclarationContribution {
tokens: string[];
......
/*---------------------------------------------------------------------------------------------
* 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 IDeclarationContribution {
tokens?: string[];
findDeclaration: (resource: URI, position: EditorCommon.IPosition) => TPromise<Modes.IReference>;
}
export class DeclarationSupport implements Modes.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: 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.declarationSupport) {
return nestedMode.declarationSupport.canFindDeclaration(context, offset);
} else {
return false;
}
});
}
public findDeclaration(resource: URI, position: EditorCommon.IPosition): TPromise<Modes.IReference>{
return this.contribution.findDeclaration(resource, position);
}
}
......@@ -12,6 +12,7 @@ import MonarchTypes = require('vs/editor/common/modes/monarch/monarchTypes');
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';
export var IModeService = createDecorator<IModeService>('modeService');
......@@ -36,7 +37,7 @@ export interface IModeService {
getOrCreateModeByFilenameOrFirstLine(filename: string, firstLine?:string): TPromise<Modes.IMode>;
registerCodeLensSupport(modeId: string, support: Modes.ICodeLensSupport): IDisposable;
registerDeclarativeDeclarationSupport(modeId: string, contribution: Supports.IDeclarationContribution): IDisposable;
registerDeclarativeDeclarationSupport(modeId: string, contribution: IDeclarationContribution): IDisposable;
registerExtraInfoSupport(modeId: string, support: Modes.IExtraInfoSupport): IDisposable;
registerFormattingSupport(modeId: string, support: Modes.IFormattingSupport): IDisposable;
registerInplaceReplaceSupport(modeId: string, support: Modes.IInplaceReplaceSupport): IDisposable;
......
......@@ -26,6 +26,7 @@ import {OnEnterSupport, IOnEnterSupportOptions} from 'vs/editor/common/modes/sup
import {IDisposable, combinedDispose, empty as EmptyDisposable} from 'vs/base/common/lifecycle';
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';
interface IModeConfigurationMap { [modeId: string]: any; }
......@@ -281,8 +282,8 @@ export class ModeServiceImpl implements IModeService {
return this.registerModeSupport(modeId, 'richEditSupport', (mode) => new RichEditSupport(modeId, support));
}
public registerDeclarativeDeclarationSupport(modeId: string, contribution: Supports.IDeclarationContribution): IDisposable {
return this.registerModeSupport(modeId, 'declarationSupport', (mode) => new Supports.DeclarationSupport(mode, contribution));
public registerDeclarativeDeclarationSupport(modeId: string, contribution: IDeclarationContribution): IDisposable {
return this.registerModeSupport(modeId, 'declarationSupport', (mode) => new DeclarationSupport(modeId, contribution));
}
public registerExtraInfoSupport(modeId: string, support: Modes.IExtraInfoSupport): IDisposable {
......
......@@ -22,6 +22,7 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat
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';
export enum States {
Selector,
......@@ -341,7 +342,7 @@ export class CSSMode extends AbstractMode<cssWorker.CSSWorker> {
findReferences: (resource, position, /*unused*/includeDeclaration) => this.findReferences(resource, position)});
this.logicalSelectionSupport = this;
this.outlineSupport = this;
this.declarationSupport = new supports.DeclarationSupport(this, {
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: [cssTokenTypes.TOKEN_VALUE + '.css'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
......
......@@ -27,6 +27,7 @@ import * as htmlTokenTypes from 'vs/languages/html/common/htmlTokenTypes';
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';
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.
......@@ -313,7 +314,7 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode<W> i
excludeTokens: ['*'],
getParameterHints: (resource, position) => this.getParameterHints(resource, position)});
// TODO@Alex TODO@Joh: there is something off about declaration support of embedded JS in HTML
// this.declarationSupport = new supports.DeclarationSupport(this, {
// this.declarationSupport = new DeclarationSupport(this, {
// tokens: ['invalid'],
// findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
......
......@@ -20,6 +20,7 @@ import {IThreadService} from 'vs/platform/thread/common/thread';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
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';
export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaScriptWorker> {
......@@ -44,7 +45,7 @@ export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaS
tokens: [],
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
this.declarationSupport = new supports.DeclarationSupport(this, {
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: [],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
......
......@@ -21,6 +21,7 @@ import {IModeService} from 'vs/editor/common/services/modeService';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
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';
export var language: Types.ILanguage = <Types.ILanguage> {
displayName: 'LESS',
......@@ -201,7 +202,7 @@ export class LESSMode extends Monarch.MonarchMode<lessWorker.LessWorker> impleme
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;
this.declarationSupport = new supports.DeclarationSupport(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.outlineSupport = this;
......
......@@ -21,6 +21,7 @@ import {IModeService} from 'vs/editor/common/services/modeService';
import {IInstantiationService} from 'vs/platform/instantiation/common/instantiation';
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';
export var language = <Types.ILanguage>{
displayName: 'Sass',
......@@ -303,7 +304,7 @@ export class SASSMode extends Monarch.MonarchMode<sassWorker.SassWorker> impleme
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;
this.declarationSupport = new supports.DeclarationSupport(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.outlineSupport = this;
......
......@@ -27,6 +27,7 @@ import {IThreadService, ThreadAffinity} from 'vs/platform/thread/common/thread';
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';
class SemanticValidator {
......@@ -256,7 +257,7 @@ export class TypeScriptMode<W extends typescriptWorker.TypeScriptWorker2> extend
tokens: ['identifier.ts'],
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
this.declarationSupport = new supports.DeclarationSupport(this, {
this.declarationSupport = new DeclarationSupport(this.getId(), {
tokens: ['identifier.ts', 'string.ts', 'attribute.value.vs'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册