From b5063c42268446349cce574b120b189c6d70f7f0 Mon Sep 17 00:00:00 2001 From: Alex Dima Date: Sun, 5 Jun 2016 10:21:29 +0200 Subject: [PATCH] Reduce dependencies on IMode --- .../common/controller/cursorCollection.ts | 4 +- src/vs/editor/common/controller/oneCursor.ts | 4 +- src/vs/editor/common/core/modeTransition.ts | 2 + src/vs/editor/common/editorCommon.ts | 7 ++-- src/vs/editor/common/model/mirrorModel.ts | 10 ++--- .../common/model/textModelWithTokens.ts | 26 ++++++------ .../model/textModelWithTokensHelpers.ts | 2 +- src/vs/editor/common/modes.ts | 35 ---------------- .../modes/languageConfigurationRegistry.ts | 40 +++++++++---------- src/vs/editor/common/modes/supports.ts | 6 +-- .../common/modes/supports/characterPair.ts | 8 ++-- .../modes/supports/electricCharacter.ts | 6 +-- .../editor/common/modes/supports/onEnter.ts | 8 ++-- .../common/modes/supports/richEditBrackets.ts | 6 +-- .../comment/common/blockCommentCommand.ts | 4 +- .../comment/common/lineCommentCommand.ts | 12 +++--- .../contrib/smartSelect/common/tokenTree.ts | 7 ++-- .../test/common/modes/tokenization.test.ts | 8 ++-- src/vs/languages/css/test/common/css.test.ts | 2 +- .../languages/html/test/common/html.test.ts | 2 +- src/vs/languages/php/test/common/php.test.ts | 2 +- .../parts/emmet/node/editorAccessor.ts | 4 +- 22 files changed, 86 insertions(+), 119 deletions(-) diff --git a/src/vs/editor/common/controller/cursorCollection.ts b/src/vs/editor/common/controller/cursorCollection.ts index e10d3adc521..f2f977ffbc5 100644 --- a/src/vs/editor/common/controller/cursorCollection.ts +++ b/src/vs/editor/common/controller/cursorCollection.ts @@ -328,7 +328,7 @@ export class CursorCollection { }; - let electricCharSupport = LanguageConfigurationRegistry.getElectricCharacterSupport(this.model.getMode()); + let electricCharSupport = LanguageConfigurationRegistry.getElectricCharacterSupport(this.model.getMode().getId()); if (electricCharSupport) { let electricChars: string[] = null; try { @@ -344,7 +344,7 @@ export class CursorCollection { } } - let characterPairSupport = LanguageConfigurationRegistry.getCharacterPairSupport(this.model.getMode()); + let characterPairSupport = LanguageConfigurationRegistry.getCharacterPairSupport(this.model.getMode().getId()); if (characterPairSupport) { let autoClosingPairs: IAutoClosingPair[]; try { diff --git a/src/vs/editor/common/controller/oneCursor.ts b/src/vs/editor/common/controller/oneCursor.ts index 81473d4dbd3..2551c7e4aa3 100644 --- a/src/vs/editor/common/controller/oneCursor.ts +++ b/src/vs/editor/common/controller/oneCursor.ts @@ -1269,7 +1269,7 @@ export class OneCursorOp { return false; } - let characterPairSupport = LanguageConfigurationRegistry.getCharacterPairSupport(cursor.model.getMode()); + let characterPairSupport = LanguageConfigurationRegistry.getCharacterPairSupport(cursor.model.getMode().getId()); if(!characterPairSupport) { return false; @@ -1380,7 +1380,7 @@ export class OneCursorOp { let lineContext = cursor.model.getLineContext(position.lineNumber); let electricAction:IElectricAction; - let electricCharSupport = LanguageConfigurationRegistry.getElectricCharacterSupport(cursor.model.getMode()); + let electricCharSupport = LanguageConfigurationRegistry.getElectricCharacterSupport(cursor.model.getMode().getId()); if (electricCharSupport) { try { electricAction = electricCharSupport.onElectricCharacter(lineContext, position.column - 2); diff --git a/src/vs/editor/common/core/modeTransition.ts b/src/vs/editor/common/core/modeTransition.ts index 33882fa2084..77cfa4b45b6 100644 --- a/src/vs/editor/common/core/modeTransition.ts +++ b/src/vs/editor/common/core/modeTransition.ts @@ -12,10 +12,12 @@ export class ModeTransition { public startIndex:number; public mode:IMode; + public modeId: string; constructor(startIndex:number, mode:IMode) { this.startIndex = startIndex|0; this.mode = mode; + this.modeId = mode.getId(); } public static findIndexInSegmentsArray(arr:ModeTransition[], desiredIndex: number): number { diff --git a/src/vs/editor/common/editorCommon.ts b/src/vs/editor/common/editorCommon.ts index 8c5e1b4b542..f83270ea930 100644 --- a/src/vs/editor/common/editorCommon.ts +++ b/src/vs/editor/common/editorCommon.ts @@ -10,13 +10,14 @@ import {IHTMLContentElement} from 'vs/base/common/htmlContent'; import URI from 'vs/base/common/uri'; import {TPromise} from 'vs/base/common/winjs.base'; import {IInstantiationService, IConstructorSignature1, IConstructorSignature2} from 'vs/platform/instantiation/common/instantiation'; -import {ILineContext, IMode, IModeTransition, IToken} from 'vs/editor/common/modes'; +import {ILineContext, IMode, IToken} from 'vs/editor/common/modes'; import {ViewLineToken} from 'vs/editor/common/core/viewLineToken'; import {ScrollbarVisibility} from 'vs/base/browser/ui/scrollbar/scrollableElementOptions'; import {IDisposable} from 'vs/base/common/lifecycle'; import {Position} from 'vs/editor/common/core/position'; import {Range} from 'vs/editor/common/core/range'; import {Selection} from 'vs/editor/common/core/selection'; +import {ModeTransition} from 'vs/editor/common/core/modeTransition'; /** * @internal @@ -1676,7 +1677,7 @@ export interface ITokenizedModel extends ITextModel { /** * @internal */ - _getLineModeTransitions(lineNumber:number): IModeTransition[]; + _getLineModeTransitions(lineNumber:number): ModeTransition[]; /** * Get the current language mode associated with the model. @@ -1701,7 +1702,7 @@ export interface ITokenizedModel extends ITextModel { * Returns the true (inner-most) language mode at a given position. * @internal */ - getModeAtPosition(lineNumber:number, column:number): IMode; + getModeIdAtPosition(lineNumber:number, column:number): string; /** * Get the word under or besides `position`. diff --git a/src/vs/editor/common/model/mirrorModel.ts b/src/vs/editor/common/model/mirrorModel.ts index f0d67503968..a6772272684 100644 --- a/src/vs/editor/common/model/mirrorModel.ts +++ b/src/vs/editor/common/model/mirrorModel.ts @@ -255,9 +255,9 @@ export class MirrorModel extends AbstractMirrorModel implements editorCommon.IMi } public getEmbeddedAtPosition(position:editorCommon.IPosition):editorCommon.IMirrorModel { - var modeAtPosition = this.getModeAtPosition(position.lineNumber, position.column); - if (this._embeddedModels.hasOwnProperty(modeAtPosition.getId())) { - return this._embeddedModels[modeAtPosition.getId()]; + var modeIdAtPosition = this.getModeIdAtPosition(position.lineNumber, position.column); + if (this._embeddedModels.hasOwnProperty(modeIdAtPosition)) { + return this._embeddedModels[modeIdAtPosition]; } return null; } @@ -299,7 +299,7 @@ export class MirrorModel extends AbstractMirrorModel implements editorCommon.IMi for (var i = 0; i < modeTransitions.length; i++) { var modeTransition = modeTransitions[i]; - if (modeTransition.mode.getId() !== currentModeId) { + if (modeTransition.modeId !== currentModeId) { var modeRange = getOrCreateEmbeddedModeRange(currentModeId, currentMode); modeRange.ranges.push({ @@ -309,7 +309,7 @@ export class MirrorModel extends AbstractMirrorModel implements editorCommon.IMi endColumn: modeTransition.startIndex + 1 }); - currentModeId = modeTransition.mode.getId(); + currentModeId = modeTransition.modeId; currentMode = modeTransition.mode; currentStartLineNumber = lineNumber; currentStartColumn = modeTransition.startIndex + 1; diff --git a/src/vs/editor/common/model/textModelWithTokens.ts b/src/vs/editor/common/model/textModelWithTokens.ts index ac292366d21..ff3c5dc9da8 100644 --- a/src/vs/editor/common/model/textModelWithTokens.ts +++ b/src/vs/editor/common/model/textModelWithTokens.ts @@ -441,7 +441,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke } } - public getModeAtPosition(_lineNumber:number, _column:number): IMode { + public getModeIdAtPosition(_lineNumber:number, _column:number): string { var validPosition = this.validatePosition({ lineNumber: _lineNumber, column: _column @@ -451,13 +451,13 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke var column = validPosition.column; if (column === 1) { - return this.getStateBeforeLine(lineNumber).getMode(); + return this.getStateBeforeLine(lineNumber).getMode().getId(); } else if (column === this.getLineMaxColumn(lineNumber)) { - return this.getStateAfterLine(lineNumber).getMode(); + return this.getStateAfterLine(lineNumber).getMode().getId(); } else { var modeTransitions = this._getLineModeTransitions(lineNumber); var modeTransitionIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, column - 1); - return modeTransitions[modeTransitionIndex].mode; + return modeTransitions[modeTransitionIndex].modeId; } } @@ -762,7 +762,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke let modeTransitions = this._lines[position.lineNumber - 1].getModeTransitions(this._mode); let currentModeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, position.column - 1); let currentMode = modeTransitions[currentModeIndex]; - let currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(currentMode.mode); + let currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(currentMode.modeId); if (!currentModeBrackets) { return null; @@ -792,7 +792,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke let modeTransitions = this._lines[lineNumber - 1].getModeTransitions(this._mode); let currentModeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, position.column - 1); let currentMode = modeTransitions[currentModeIndex]; - let currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(currentMode.mode); + let currentModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(currentMode.modeId); // If position is in between two tokens, try first looking in the previous token if (currentTokenIndex > 0 && currentTokenStart === position.column - 1) { @@ -808,7 +808,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke // check if previous token is in a different mode if (currentModeIndex > 0 && currentMode.startIndex === position.column - 1) { prevMode = modeTransitions[currentModeIndex - 1]; - prevModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(prevMode.mode); + prevModeBrackets = LanguageConfigurationRegistry.getBracketsSupport(prevMode.modeId); } if (prevModeBrackets) { @@ -898,7 +898,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke let modeTransitions = this._lines[lineNumber - 1].getModeTransitions(this._mode); let currentModeIndex = modeTransitions.length - 1; let currentModeStart = modeTransitions[currentModeIndex].startIndex; - let currentModeId = modeTransitions[currentModeIndex].mode.getId(); + let currentModeId = modeTransitions[currentModeIndex].modeId; let tokensLength = lineTokens.getTokenCount() - 1; let currentTokenEnd = lineText.length; @@ -908,7 +908,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke currentModeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, position.column - 1); currentModeStart = modeTransitions[currentModeIndex].startIndex; - currentModeId = modeTransitions[currentModeIndex].mode.getId(); + currentModeId = modeTransitions[currentModeIndex].modeId; } for (let tokenIndex = tokensLength; tokenIndex >= 0; tokenIndex--) { @@ -918,7 +918,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke if (currentTokenStart < currentModeStart) { currentModeIndex--; currentModeStart = modeTransitions[currentModeIndex].startIndex; - currentModeId = modeTransitions[currentModeIndex].mode.getId(); + currentModeId = modeTransitions[currentModeIndex].modeId; } if (currentModeId === modeId && !ignoreBracketsInToken(currentTokenType)) { @@ -965,7 +965,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke let modeTransitions = this._lines[lineNumber - 1].getModeTransitions(this._mode); let currentModeIndex = 0; let nextModeStart = (currentModeIndex + 1 < modeTransitions.length ? modeTransitions[currentModeIndex + 1].startIndex : lineText.length + 1); - let currentModeId = modeTransitions[currentModeIndex].mode.getId(); + let currentModeId = modeTransitions[currentModeIndex].modeId; let startTokenIndex = 0; let currentTokenStart = lineTokens.getTokenStartIndex(startTokenIndex); @@ -975,7 +975,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke currentModeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, position.column - 1); nextModeStart = (currentModeIndex + 1 < modeTransitions.length ? modeTransitions[currentModeIndex + 1].startIndex : lineText.length + 1); - currentModeId = modeTransitions[currentModeIndex].mode.getId(); + currentModeId = modeTransitions[currentModeIndex].modeId; } for (let tokenIndex = startTokenIndex, tokensLength = lineTokens.getTokenCount(); tokenIndex < tokensLength; tokenIndex++) { @@ -985,7 +985,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke if (currentTokenStart >= nextModeStart) { currentModeIndex++; nextModeStart = (currentModeIndex + 1 < modeTransitions.length ? modeTransitions[currentModeIndex + 1].startIndex : lineText.length + 1); - currentModeId = modeTransitions[currentModeIndex].mode.getId(); + currentModeId = modeTransitions[currentModeIndex].modeId; } if (currentModeId === modeId && !ignoreBracketsInToken(currentTokenType)) { diff --git a/src/vs/editor/common/model/textModelWithTokensHelpers.ts b/src/vs/editor/common/model/textModelWithTokensHelpers.ts index b6bfc188424..63016ce25a4 100644 --- a/src/vs/editor/common/model/textModelWithTokensHelpers.ts +++ b/src/vs/editor/common/model/textModelWithTokensHelpers.ts @@ -28,7 +28,7 @@ export interface INonWordTokenMap { export class WordHelper { private static _safeGetWordDefinition(mode:IMode): RegExp { - return LanguageConfigurationRegistry.getWordDefinition(mode); + return LanguageConfigurationRegistry.getWordDefinition(mode.getId()); } public static ensureValidWordDefinition(wordDefinition?:RegExp): RegExp { diff --git a/src/vs/editor/common/modes.ts b/src/vs/editor/common/modes.ts index 04b2b6b7558..b68ebc3a310 100644 --- a/src/vs/editor/common/modes.ts +++ b/src/vs/editor/common/modes.ts @@ -760,41 +760,6 @@ export interface IRichEditBrackets { textIsOpenBracket: {[text:string]:boolean;}; } -/** - * @internal - */ -export interface IRichEditSupport { - /** - * Optional adapter for electric characters. - */ - electricCharacter?:IRichEditElectricCharacter; - - /** - * Optional adapter for comment insertion. - */ - comments?:ICommentsConfiguration; - - /** - * Optional adapter for insertion of character pair. - */ - characterPair?:IRichEditCharacterPair; - - /** - * Optional adapter for classification of tokens. - */ - wordDefinition?: RegExp; - - /** - * Optional adapter for custom Enter handling. - */ - onEnter?: IRichEditOnEnter; - - /** - * Optional adapter for brackets. - */ - brackets?: IRichEditBrackets; -} - // --- feature registries ------ /** diff --git a/src/vs/editor/common/modes/languageConfigurationRegistry.ts b/src/vs/editor/common/modes/languageConfigurationRegistry.ts index 5cb957a44c9..bc629365dbd 100644 --- a/src/vs/editor/common/modes/languageConfigurationRegistry.ts +++ b/src/vs/editor/common/modes/languageConfigurationRegistry.ts @@ -5,8 +5,8 @@ 'use strict'; import {ICommentsConfiguration, IRichEditBrackets, IRichEditCharacterPair, IAutoClosingPair, - IAutoClosingPairConditional, IRichEditOnEnter, IRichEditSupport, CharacterPair, - IMode, IRichEditElectricCharacter, IEnterAction, IndentAction} from 'vs/editor/common/modes'; + IAutoClosingPairConditional, IRichEditOnEnter, CharacterPair, + IRichEditElectricCharacter, IEnterAction, IndentAction} from 'vs/editor/common/modes'; import {NullMode} from 'vs/editor/common/modes/nullMode'; import {CharacterPairSupport} from 'vs/editor/common/modes/supports/characterPair'; import {BracketElectricCharacterSupport, IBracketElectricCharacterContribution} from 'vs/editor/common/modes/supports/electricCharacter'; @@ -35,7 +35,7 @@ export interface IRichLanguageConfiguration { __electricCharacterSupport?: IBracketElectricCharacterContribution; } -export class RichEditSupport implements IRichEditSupport { +export class RichEditSupport { private _conf: IRichLanguageConfiguration; @@ -46,10 +46,10 @@ export class RichEditSupport implements IRichEditSupport { public onEnter: IRichEditOnEnter; public brackets: IRichEditBrackets; - constructor(modeId:string, previous:IRichEditSupport, rawConf:IRichLanguageConfiguration) { + constructor(modeId:string, previous:RichEditSupport, rawConf:IRichLanguageConfiguration) { let prev:IRichLanguageConfiguration = null; - if (previous instanceof RichEditSupport) { + if (previous) { prev = previous._conf; } @@ -150,44 +150,44 @@ export class LanguageConfigurationRegistryImpl { }; } - private _getRichEditSupport(mode:IMode): IRichEditSupport { - return this._entries[mode.getId()]; + private _getRichEditSupport(modeId:string): RichEditSupport { + return this._entries[modeId]; } - public getElectricCharacterSupport(mode:IMode): IRichEditElectricCharacter { - let value = this._getRichEditSupport(mode); + public getElectricCharacterSupport(modeId:string): IRichEditElectricCharacter { + let value = this._getRichEditSupport(modeId); if (!value) { return null; } return value.electricCharacter || null; } - public getComments(mode:IMode): ICommentsConfiguration { - let value = this._getRichEditSupport(mode); + public getComments(modeId:string): ICommentsConfiguration { + let value = this._getRichEditSupport(modeId); if (!value) { return null; } return value.comments || null; } - public getCharacterPairSupport(mode:IMode): IRichEditCharacterPair { - let value = this._getRichEditSupport(mode); + public getCharacterPairSupport(modeId:string): IRichEditCharacterPair { + let value = this._getRichEditSupport(modeId); if (!value) { return null; } return value.characterPair || null; } - public getWordDefinition(mode:IMode): RegExp { - let value = this._getRichEditSupport(mode); + public getWordDefinition(modeId:string): RegExp { + let value = this._getRichEditSupport(modeId); if (!value) { return null; } return value.wordDefinition || null; } - public getOnEnterSupport(mode:IMode): IRichEditOnEnter { - let value = this._getRichEditSupport(mode); + public getOnEnterSupport(modeId:string): IRichEditOnEnter { + let value = this._getRichEditSupport(modeId); if (!value) { return null; } @@ -197,7 +197,7 @@ export class LanguageConfigurationRegistryImpl { public getRawEnterActionAtPosition(model:ITokenizedModel, lineNumber:number, column:number): IEnterAction { let result:IEnterAction; - let onEnterSupport = this.getOnEnterSupport(model.getMode()); + let onEnterSupport = this.getOnEnterSupport(model.getMode().getId()); if (onEnterSupport) { try { @@ -246,8 +246,8 @@ export class LanguageConfigurationRegistryImpl { }; } - public getBracketsSupport(mode:IMode): IRichEditBrackets { - let value = this._getRichEditSupport(mode); + public getBracketsSupport(modeId:string): IRichEditBrackets { + let value = this._getRichEditSupport(modeId); if (!value) { return null; } diff --git a/src/vs/editor/common/modes/supports.ts b/src/vs/editor/common/modes/supports.ts index ad60086e7c6..62f69a3ba33 100644 --- a/src/vs/editor/common/modes/supports.ts +++ b/src/vs/editor/common/modes/supports.ts @@ -45,10 +45,10 @@ export class LineTokens implements modes.ILineTokens { } } -export function handleEvent(context:modes.ILineContext, offset:number, runner:(mode:modes.IMode, newContext:modes.ILineContext, offset:number)=>T):T { +export function handleEvent(context:modes.ILineContext, offset:number, runner:(modeId:string, newContext:modes.ILineContext, offset:number)=>T):T { var modeTransitions = context.modeTransitions; if (modeTransitions.length === 1) { - return runner(modeTransitions[0].mode, context, offset); + return runner(modeTransitions[0].modeId, context, offset); } var modeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, offset); @@ -68,7 +68,7 @@ export function handleEvent(context:modes.ILineContext, offset:number, runner var firstTokenCharacterOffset = context.getTokenStartIndex(firstTokenInModeIndex); var newCtx = new FilteredLineContext(context, nestedMode, firstTokenInModeIndex, nextTokenAfterMode, firstTokenCharacterOffset, nextCharacterAfterModeIndex); - return runner(nestedMode, newCtx, offset - firstTokenCharacterOffset); + return runner(nestedMode.getId(), newCtx, offset - firstTokenCharacterOffset); } export class FilteredLineContext implements modes.ILineContext { diff --git a/src/vs/editor/common/modes/supports/characterPair.ts b/src/vs/editor/common/modes/supports/characterPair.ts index d61d9878232..5ec20e82c0b 100644 --- a/src/vs/editor/common/modes/supports/characterPair.ts +++ b/src/vs/editor/common/modes/supports/characterPair.ts @@ -4,7 +4,7 @@ *--------------------------------------------------------------------------------------------*/ 'use strict'; -import {IAutoClosingPair, IAutoClosingPairConditional, ILineContext, IMode, IRichEditCharacterPair, CharacterPair} from 'vs/editor/common/modes'; +import {IAutoClosingPair, IAutoClosingPairConditional, ILineContext, IRichEditCharacterPair, CharacterPair} from 'vs/editor/common/modes'; import {handleEvent} from 'vs/editor/common/modes/supports'; import {LanguageConfigurationRegistryImpl} from 'vs/editor/common/modes/languageConfigurationRegistry'; @@ -30,8 +30,8 @@ export class CharacterPairSupport implements IRichEditCharacterPair { } public shouldAutoClosePair(character:string, context:ILineContext, offset:number): boolean { - return handleEvent(context, offset, (nestedMode:IMode, context:ILineContext, offset:number) => { - if (this._modeId === nestedMode.getId()) { + return handleEvent(context, offset, (nestedModeId:string, context:ILineContext, offset:number) => { + if (this._modeId === nestedModeId) { // Always complete on empty line if (context.getTokenCount() === 0) { @@ -57,7 +57,7 @@ export class CharacterPairSupport implements IRichEditCharacterPair { return true; } - let characterPairSupport = this._registry.getCharacterPairSupport(nestedMode); + let characterPairSupport = this._registry.getCharacterPairSupport(nestedModeId); if (characterPairSupport) { return characterPairSupport.shouldAutoClosePair(character, context, offset); } diff --git a/src/vs/editor/common/modes/supports/electricCharacter.ts b/src/vs/editor/common/modes/supports/electricCharacter.ts index 56f292c74b7..0cc1f70a177 100644 --- a/src/vs/editor/common/modes/supports/electricCharacter.ts +++ b/src/vs/editor/common/modes/supports/electricCharacter.ts @@ -47,11 +47,11 @@ export class BracketElectricCharacterSupport implements modes.IRichEditElectricC } public onElectricCharacter(context:modes.ILineContext, offset:number): modes.IElectricAction { - return handleEvent(context, offset, (nestedMode:modes.IMode, context:modes.ILineContext, offset:number) => { - if (this._modeId === nestedMode.getId()) { + return handleEvent(context, offset, (nestedModeId:string, context:modes.ILineContext, offset:number) => { + if (this._modeId === nestedModeId) { return this.brackets.onElectricCharacter(context, offset); } - let electricCharacterSupport = this._registry.getElectricCharacterSupport(nestedMode); + let electricCharacterSupport = this._registry.getElectricCharacterSupport(nestedModeId); if (electricCharacterSupport) { return electricCharacterSupport.onElectricCharacter(context, offset); } diff --git a/src/vs/editor/common/modes/supports/onEnter.ts b/src/vs/editor/common/modes/supports/onEnter.ts index 96b1ad215ea..b82d2c02e3f 100644 --- a/src/vs/editor/common/modes/supports/onEnter.ts +++ b/src/vs/editor/common/modes/supports/onEnter.ts @@ -7,7 +7,7 @@ import {onUnexpectedError} from 'vs/base/common/errors'; import * as strings from 'vs/base/common/strings'; import {IPosition, ITextModel, ITokenizedModel} from 'vs/editor/common/editorCommon'; -import {IEnterAction, ILineContext, IMode, IRichEditOnEnter, IndentAction, CharacterPair} from 'vs/editor/common/modes'; +import {IEnterAction, ILineContext, IRichEditOnEnter, IndentAction, CharacterPair} from 'vs/editor/common/modes'; import {handleEvent} from 'vs/editor/common/modes/supports'; import {LanguageConfigurationRegistryImpl} from 'vs/editor/common/modes/languageConfigurationRegistry'; @@ -74,12 +74,12 @@ export class OnEnterSupport implements IRichEditOnEnter { public onEnter(model:ITokenizedModel, position: IPosition): IEnterAction { var context = model.getLineContext(position.lineNumber); - return handleEvent(context, position.column - 1, (nestedMode:IMode, context:ILineContext, offset:number) => { - if (this._modeId === nestedMode.getId()) { + return handleEvent(context, position.column - 1, (nestedModeId:string, context:ILineContext, offset:number) => { + if (this._modeId === nestedModeId) { return this._onEnter(model, position); } - let onEnterSupport = this._registry.getOnEnterSupport(nestedMode); + let onEnterSupport = this._registry.getOnEnterSupport(nestedModeId); if (onEnterSupport) { return onEnterSupport.onEnter(model, position); } diff --git a/src/vs/editor/common/modes/supports/richEditBrackets.ts b/src/vs/editor/common/modes/supports/richEditBrackets.ts index a684e74f3d6..cfe3e9c713a 100644 --- a/src/vs/editor/common/modes/supports/richEditBrackets.ts +++ b/src/vs/editor/common/modes/supports/richEditBrackets.ts @@ -7,14 +7,14 @@ import * as strings from 'vs/base/common/strings'; import {Range} from 'vs/editor/common/core/range'; import {IRichEditBracket} from 'vs/editor/common/editorCommon'; -import * as modes from 'vs/editor/common/modes'; +import {IRichEditBrackets, CharacterPair} from 'vs/editor/common/modes'; interface ISimpleInternalBracket { open: string; close: string; } -export class RichEditBrackets implements modes.IRichEditBrackets { +export class RichEditBrackets implements IRichEditBrackets { public brackets: IRichEditBracket[]; public forwardRegex: RegExp; @@ -23,7 +23,7 @@ export class RichEditBrackets implements modes.IRichEditBrackets { public textIsBracket: {[text:string]:IRichEditBracket;}; public textIsOpenBracket: {[text:string]:boolean;}; - constructor(modeId: string, brackets: modes.CharacterPair[]) { + constructor(modeId: string, brackets: CharacterPair[]) { this.brackets = brackets.map((b) => { return { modeId: modeId, diff --git a/src/vs/editor/contrib/comment/common/blockCommentCommand.ts b/src/vs/editor/contrib/comment/common/blockCommentCommand.ts index d473bd08ce9..36b24d4f79b 100644 --- a/src/vs/editor/contrib/comment/common/blockCommentCommand.ts +++ b/src/vs/editor/contrib/comment/common/blockCommentCommand.ts @@ -122,8 +122,8 @@ export class BlockCommentCommand implements editorCommon.ICommand { var endLineNumber = this._selection.endLineNumber; var endColumn = this._selection.endColumn; - let mode = model.getModeAtPosition(startLineNumber, startColumn); - let config = LanguageConfigurationRegistry.getComments(mode); + let modeId = model.getModeIdAtPosition(startLineNumber, startColumn); + let config = LanguageConfigurationRegistry.getComments(modeId); if (!config || !config.blockCommentStartToken || !config.blockCommentEndToken) { // Mode does not support block comments return; diff --git a/src/vs/editor/contrib/comment/common/lineCommentCommand.ts b/src/vs/editor/contrib/comment/common/lineCommentCommand.ts index 8df30be9e3f..9997968a87a 100644 --- a/src/vs/editor/contrib/comment/common/lineCommentCommand.ts +++ b/src/vs/editor/contrib/comment/common/lineCommentCommand.ts @@ -10,7 +10,7 @@ import {Position} from 'vs/editor/common/core/position'; import {Range} from 'vs/editor/common/core/range'; import {Selection} from 'vs/editor/common/core/selection'; import * as editorCommon from 'vs/editor/common/editorCommon'; -import {ICommentsConfiguration, IMode} from 'vs/editor/common/modes'; +import {ICommentsConfiguration} from 'vs/editor/common/modes'; import {BlockCommentCommand} from './blockCommentCommand'; import {LanguageConfigurationRegistry} from 'vs/editor/common/modes/languageConfigurationRegistry'; @@ -70,19 +70,17 @@ export class LineCommentCommand implements editorCommon.ICommand { i:number, lineCount:number, lineNumber:number, - mode: IMode, modeId: string; for (i = 0, lineCount = endLineNumber - startLineNumber + 1; i < lineCount; i++) { lineNumber = startLineNumber + i; - mode = model.getModeAtPosition(lineNumber, 1); - modeId = mode.getId(); + modeId = model.getModeIdAtPosition(lineNumber, 1); // Find the commentStr for this line, if none is found then bail out: we cannot do line comments if (seenModes[modeId]) { commentStr = seenModes[modeId]; } else { - config = LanguageConfigurationRegistry.getComments(mode); + config = LanguageConfigurationRegistry.getComments(modeId); commentStr = (config ? config.lineCommentToken : null); if (!commentStr) { // Mode does not support line comments @@ -274,8 +272,8 @@ export class LineCommentCommand implements editorCommon.ICommand { * Given an unsuccessful analysis, delegate to the block comment command */ private _executeBlockComment(model:editorCommon.ITokenizedModel, builder:editorCommon.IEditOperationBuilder, s:Selection): void { - let mode = model.getModeAtPosition(s.startLineNumber, s.startColumn); - let config = LanguageConfigurationRegistry.getComments(mode); + let modeId = model.getModeIdAtPosition(s.startLineNumber, s.startColumn); + let config = LanguageConfigurationRegistry.getComments(modeId); if (!config || !config.blockCommentStartToken || !config.blockCommentEndToken) { // Mode does not support block comments return; diff --git a/src/vs/editor/contrib/smartSelect/common/tokenTree.ts b/src/vs/editor/contrib/smartSelect/common/tokenTree.ts index 45a9e860c19..6d542e4015e 100644 --- a/src/vs/editor/contrib/smartSelect/common/tokenTree.ts +++ b/src/vs/editor/contrib/smartSelect/common/tokenTree.ts @@ -7,10 +7,11 @@ import {Position} from 'vs/editor/common/core/position'; import {Range} from 'vs/editor/common/core/range'; import {ILineTokens, IModel, IPosition, IRange, IRichEditBracket} from 'vs/editor/common/editorCommon'; -import {IModeTransition, IRichEditBrackets} from 'vs/editor/common/modes'; +import {IRichEditBrackets} from 'vs/editor/common/modes'; import {ignoreBracketsInToken} from 'vs/editor/common/modes/supports'; import {BracketsUtils} from 'vs/editor/common/modes/supports/richEditBrackets'; import {LanguageConfigurationRegistry} from 'vs/editor/common/modes/languageConfigurationRegistry'; +import {ModeTransition} from 'vs/editor/common/core/modeTransition'; export enum TokenTreeBracket { None = 0, @@ -118,7 +119,7 @@ class TokenScanner { private _currentTokenIndex: number; private _currentTokenStart: number; private _currentLineTokens: ILineTokens; - private _currentLineModeTransitions: IModeTransition[]; + private _currentLineModeTransitions: ModeTransition[]; private _currentModeIndex: number; private _nextModeStart: number; private _currentModeBrackets: IRichEditBrackets; @@ -160,7 +161,7 @@ class TokenScanner { this._currentModeIndex++; this._nextModeStart = (this._currentModeIndex + 1 < this._currentLineModeTransitions.length ? this._currentLineModeTransitions[this._currentModeIndex + 1].startIndex : this._currentLineText.length + 1); let mode = (this._currentModeIndex < this._currentLineModeTransitions.length ? this._currentLineModeTransitions[this._currentModeIndex] : null); - this._currentModeBrackets = (mode ? LanguageConfigurationRegistry.getBracketsSupport(mode.mode) : null); + this._currentModeBrackets = (mode ? LanguageConfigurationRegistry.getBracketsSupport(mode.modeId) : null); } let tokenType = this._currentLineTokens.getTokenType(this._currentTokenIndex); diff --git a/src/vs/editor/test/common/modes/tokenization.test.ts b/src/vs/editor/test/common/modes/tokenization.test.ts index c14fe8fb838..c56db2344f2 100644 --- a/src/vs/editor/test/common/modes/tokenization.test.ts +++ b/src/vs/editor/test/common/modes/tokenization.test.ts @@ -336,8 +336,8 @@ suite('Editor Modes - Tokenization', () => { { startIndex: 5, id: 'B' } ]); - handleEvent(createMockLineContext('abc (def', lineTokens), 0, (mode:modes.IMode, context:modes.ILineContext, offset:number) => { - assert.deepEqual(mode.getId(), 'A'); + handleEvent(createMockLineContext('abc (def', lineTokens), 0, (modeId:string, context:modes.ILineContext, offset:number) => { + assert.deepEqual(modeId, 'A'); assert.equal(context.getTokenCount(), 3); assert.equal(context.getTokenStartIndex(0), 0); assert.equal(context.getTokenType(0), 'A.abc'); @@ -349,8 +349,8 @@ suite('Editor Modes - Tokenization', () => { assert.equal(context.getLineContent(), 'abc ('); }); - handleEvent(createMockLineContext('abc (def', lineTokens), 6, (mode:modes.IMode, context:modes.ILineContext, offset:number) => { - assert.deepEqual(mode.getId(), 'B'); + handleEvent(createMockLineContext('abc (def', lineTokens), 6, (modeId:string, context:modes.ILineContext, offset:number) => { + assert.deepEqual(modeId, 'B'); assert.equal(context.getTokenCount(), 1); assert.equal(context.getTokenStartIndex(0), 0); assert.equal(context.getTokenType(0), 'B.def'); diff --git a/src/vs/languages/css/test/common/css.test.ts b/src/vs/languages/css/test/common/css.test.ts index 999cb367f7c..659dd2a5c6c 100644 --- a/src/vs/languages/css/test/common/css.test.ts +++ b/src/vs/languages/css/test/common/css.test.ts @@ -33,7 +33,7 @@ suite('CSS Colorizing', () => { tokenizationSupport = mode.tokenizationSupport; assertOnEnter = modesUtil.createOnEnterAsserter(mode.getId(), CSSMode.LANG_CONFIG); - wordDefinition = LanguageConfigurationRegistry.getWordDefinition(mode); + wordDefinition = LanguageConfigurationRegistry.getWordDefinition(mode.getId()); })(); test('Skip whitespace', () => { diff --git a/src/vs/languages/html/test/common/html.test.ts b/src/vs/languages/html/test/common/html.test.ts index 1e0b1021acf..c123ed6cd8e 100644 --- a/src/vs/languages/html/test/common/html.test.ts +++ b/src/vs/languages/html/test/common/html.test.ts @@ -113,7 +113,7 @@ suite('Colorizing - HTML', () => { tokenizationSupport = _mode.tokenizationSupport; - onEnterSupport = LanguageConfigurationRegistry.getOnEnterSupport(_mode); + onEnterSupport = LanguageConfigurationRegistry.getOnEnterSupport(_mode.getId()); })(); test('Open Start Tag #1', () => { diff --git a/src/vs/languages/php/test/common/php.test.ts b/src/vs/languages/php/test/common/php.test.ts index 7ac6e7c3933..6b1dc7768a5 100644 --- a/src/vs/languages/php/test/common/php.test.ts +++ b/src/vs/languages/php/test/common/php.test.ts @@ -76,7 +76,7 @@ suite('Syntax Highlighting - PHP', () => { tokenizationSupport = mode.tokenizationSupport; assertOnEnter = modesUtil.createOnEnterAsserter(mode.getId(), PHPMode.LANG_CONFIG); - wordDefinition = LanguageConfigurationRegistry.getWordDefinition(mode); + wordDefinition = LanguageConfigurationRegistry.getWordDefinition(mode.getId()); })(); test('', () => { diff --git a/src/vs/workbench/parts/emmet/node/editorAccessor.ts b/src/vs/workbench/parts/emmet/node/editorAccessor.ts index b979cc74901..6c215106453 100644 --- a/src/vs/workbench/parts/emmet/node/editorAccessor.ts +++ b/src/vs/workbench/parts/emmet/node/editorAccessor.ts @@ -113,8 +113,8 @@ export class EditorAccessor implements emmet.Editor { public getSyntax(): string { let position = this.editor.getSelection().getStartPosition(); - let mode = this.editor.getModel().getModeAtPosition(position.lineNumber, position.column); - let syntax = mode.getId().split('.').pop(); + let modeId = this.editor.getModel().getModeIdAtPosition(position.lineNumber, position.column); + let syntax = modeId.split('.').pop(); if (/\b(razor|handlebars|erb|php|hbs|ejs|twig)\b/.test(syntax)) { // treat like html return 'html'; } -- GitLab