提交 763abb9c 编写于 作者: A Alex Dima

Extract ParameterHintsSupport to its own file

上级 d042a49c
......@@ -438,12 +438,6 @@ export interface IParameterHints {
signatures:ISignature[];
}
export interface IParameterHintsContribution {
triggerCharacters: string[];
excludeTokens: string[];
getParameterHints: (resource: URI, position: EditorCommon.IPosition) => TPromise<IParameterHints>;
}
/**
* Interface used to get parameter hints.
*/
......
......@@ -189,42 +189,7 @@ export function getBracketFor(tokenType:string, tokenText:string, mode:Modes.IMo
export class ParameterHintsSupport extends AbstractSupport implements Modes.IParameterHintsSupport {
private contribution: Modes.IParameterHintsContribution;
constructor(mode: Modes.IMode, contribution: Modes.IParameterHintsContribution) {
super(mode);
this.contribution = contribution;
}
public getParameterHintsTriggerCharacters(): string[]
{
return this.contribution.triggerCharacters;
}
public shouldTriggerParameterHints(context: Modes.ILineContext, offset: number): boolean
{
return handleEvent(context, offset, (nestedMode:Modes.IMode, context:Modes.ILineContext, offset:number) => {
if (this.mode === nestedMode) {
if (!Array.isArray(this.contribution.excludeTokens)) {
return true;
}
if (this.contribution.excludeTokens.length === 1 && this.contribution.excludeTokens[0] === '*') {
return false;
}
return !isLineToken(context, offset-1, this.contribution.excludeTokens);
} else if (nestedMode.parameterHintsSupport) {
return nestedMode.parameterHintsSupport.shouldTriggerParameterHints(context, offset);
} else {
return false;
}
});
}
public getParameterHints(resource: URI, position: EditorCommon.IPosition): TPromise<Modes.IParameterHints> {
return this.contribution.getParameterHints(resource, position);
}
}
export interface ISuggestContribution {
triggerCharacters: 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 IParameterHintsContribution {
triggerCharacters: string[];
excludeTokens: string[];
getParameterHints: (resource: URI, position: EditorCommon.IPosition) => TPromise<Modes.IParameterHints>;
}
export class ParameterHintsSupport implements Modes.IParameterHintsSupport {
private _modeId: string;
private contribution: IParameterHintsContribution;
constructor(modeId: string, contribution: IParameterHintsContribution) {
this._modeId = modeId;
this.contribution = contribution;
}
public getParameterHintsTriggerCharacters(): string[]
{
return this.contribution.triggerCharacters;
}
public shouldTriggerParameterHints(context: Modes.ILineContext, offset: number): boolean
{
return handleEvent(context, offset, (nestedMode:Modes.IMode, context:Modes.ILineContext, offset:number) => {
if (this._modeId === nestedMode.getId()) {
if (!Array.isArray(this.contribution.excludeTokens)) {
return true;
}
if (this.contribution.excludeTokens.length === 1 && this.contribution.excludeTokens[0] === '*') {
return false;
}
return !isLineToken(context, offset-1, this.contribution.excludeTokens);
} else if (nestedMode.parameterHintsSupport) {
return nestedMode.parameterHintsSupport.shouldTriggerParameterHints(context, offset);
} else {
return false;
}
});
}
public getParameterHints(resource: URI, position: EditorCommon.IPosition): TPromise<Modes.IParameterHints> {
return this.contribution.getParameterHints(resource, position);
}
}
......@@ -14,6 +14,7 @@ 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';
import {IParameterHintsContribution} from 'vs/editor/common/modes/supports/parameterHintsSupport';
export var IModeService = createDecorator<IModeService>('modeService');
......@@ -44,7 +45,7 @@ export interface IModeService {
registerInplaceReplaceSupport(modeId: string, support: Modes.IInplaceReplaceSupport): IDisposable;
registerOccurrencesSupport(modeId: string, support: Modes.IOccurrencesSupport): IDisposable;
registerOutlineSupport(modeId: string, support: Modes.IOutlineSupport): IDisposable;
registerDeclarativeParameterHintsSupport(modeId: string, support: Modes.IParameterHintsContribution): IDisposable;
registerDeclarativeParameterHintsSupport(modeId: string, support: IParameterHintsContribution): IDisposable;
registerQuickFixSupport(modeId: string, support: Modes.IQuickFixSupport): IDisposable;
registerDeclarativeReferenceSupport(modeId: string, contribution: IReferenceContribution): IDisposable;
registerRenameSupport(modeId: string, support: Modes.IRenameSupport): IDisposable;
......
......@@ -28,6 +28,7 @@ import {createAsyncDescriptor0, createAsyncDescriptor1} from 'vs/platform/instan
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';
import {ParameterHintsSupport, IParameterHintsContribution} from 'vs/editor/common/modes/supports/parameterHintsSupport';
interface IModeConfigurationMap { [modeId: string]: any; }
......@@ -307,8 +308,8 @@ export class ModeServiceImpl implements IModeService {
return this.registerModeSupport(modeId, 'outlineSupport', (mode) => support);
}
public registerDeclarativeParameterHintsSupport(modeId: string, support: Modes.IParameterHintsContribution): IDisposable {
return this.registerModeSupport(modeId, 'parameterHintsSupport', (mode) => new Supports.ParameterHintsSupport(mode, support));
public registerDeclarativeParameterHintsSupport(modeId: string, support: IParameterHintsContribution): IDisposable {
return this.registerModeSupport(modeId, 'parameterHintsSupport', (mode) => new ParameterHintsSupport(modeId, support));
}
public registerQuickFixSupport(modeId: string, support: Modes.IQuickFixSupport): IDisposable {
......
......@@ -29,6 +29,7 @@ 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';
import {ParameterHintsSupport} from 'vs/editor/common/modes/supports/parameterHintsSupport';
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.
......@@ -310,7 +311,7 @@ export class HTMLMode<W extends htmlWorker.HTMLWorker> extends AbstractMode<W> i
findReferences: (resource, position, includeDeclaration) => this.findReferences(resource, position, includeDeclaration)});
this.logicalSelectionSupport = this;
this.parameterHintsSupport = new supports.ParameterHintsSupport(this, {
this.parameterHintsSupport = new ParameterHintsSupport(this.getId(), {
triggerCharacters: ['(', ','],
excludeTokens: ['*'],
getParameterHints: (resource, position) => this.getParameterHints(resource, position)});
......
......@@ -22,6 +22,7 @@ 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';
import {ParameterHintsSupport} from 'vs/editor/common/modes/supports/parameterHintsSupport';
export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaScriptWorker> {
......@@ -50,7 +51,7 @@ export class JSMode extends typescriptMode.TypeScriptMode<javascriptWorker.JavaS
tokens: [],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
this.parameterHintsSupport = new supports.ParameterHintsSupport(this, {
this.parameterHintsSupport = new ParameterHintsSupport(this.getId(), {
triggerCharacters: ['(', ','],
excludeTokens: ['string.js', 'string.escape.js'],
getParameterHints: (resource, position) => this.getParameterHints(resource, position)});
......
......@@ -29,6 +29,7 @@ import {IInstantiationService} from 'vs/platform/instantiation/common/instantiat
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';
import {ParameterHintsSupport} from 'vs/editor/common/modes/supports/parameterHintsSupport';
class SemanticValidator {
......@@ -262,7 +263,7 @@ export class TypeScriptMode<W extends typescriptWorker.TypeScriptWorker2> extend
tokens: ['identifier.ts', 'string.ts', 'attribute.value.vs'],
findDeclaration: (resource, position) => this.findDeclaration(resource, position)});
this.parameterHintsSupport = new supports.ParameterHintsSupport(this, {
this.parameterHintsSupport = new ParameterHintsSupport(this.getId(), {
triggerCharacters: ['(', ','],
excludeTokens: ['string.ts'],
getParameterHints: (resource, position) => this.getParameterHints(resource, position)});
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册