mirror of
https://github.com/Microsoft/vscode
synced 2024-10-13 14:57:14 +00:00
Fixes Microsoft/monaco-editor#133: Brackets are case-insensitive
This commit is contained in:
parent
daf411d8d2
commit
e07e2b015b
|
@ -716,8 +716,10 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
|
|||
return result;
|
||||
}
|
||||
|
||||
public findMatchingBracketUp(bracket:string, _position:editorCommon.IPosition): Range {
|
||||
public findMatchingBracketUp(_bracket:string, _position:editorCommon.IPosition): Range {
|
||||
let bracket = _bracket.toLowerCase();
|
||||
let position = this.validatePosition(_position);
|
||||
|
||||
let modeTransitions = this._lines[position.lineNumber - 1].getModeTransitions(this.getModeId());
|
||||
let currentModeIndex = ModeTransition.findIndexInSegmentsArray(modeTransitions, position.column - 1);
|
||||
let currentMode = modeTransitions[currentModeIndex];
|
||||
|
@ -779,6 +781,8 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
|
|||
// check that we didn't hit a bracket too far away from position
|
||||
if (foundBracket && foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {
|
||||
let foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);
|
||||
foundBracketText = foundBracketText.toLowerCase();
|
||||
|
||||
let r = this._matchFoundBracket(foundBracket, prevModeBrackets.textIsBracket[foundBracketText], prevModeBrackets.textIsOpenBracket[foundBracketText]);
|
||||
|
||||
// check that we can actually match this bracket
|
||||
|
@ -812,6 +816,8 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
|
|||
// check that we didn't hit a bracket too far away from position
|
||||
if (foundBracket.startColumn <= position.column && position.column <= foundBracket.endColumn) {
|
||||
let foundBracketText = lineText.substring(foundBracket.startColumn - 1, foundBracket.endColumn - 1);
|
||||
foundBracketText = foundBracketText.toLowerCase();
|
||||
|
||||
let r = this._matchFoundBracket(foundBracket, currentModeBrackets.textIsBracket[foundBracketText], currentModeBrackets.textIsOpenBracket[foundBracketText]);
|
||||
|
||||
// check that we can actually match this bracket
|
||||
|
@ -889,6 +895,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
|
|||
}
|
||||
|
||||
let hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1);
|
||||
hitText = hitText.toLowerCase();
|
||||
|
||||
if (hitText === bracket.open) {
|
||||
count++;
|
||||
|
@ -955,6 +962,7 @@ export class TextModelWithTokens extends TextModel implements editorCommon.IToke
|
|||
}
|
||||
|
||||
let hitText = lineText.substring(r.startColumn - 1, r.endColumn - 1);
|
||||
hitText = hitText.toLowerCase();
|
||||
|
||||
if (hitText === bracket.open) {
|
||||
count++;
|
||||
|
|
|
@ -143,6 +143,8 @@ export class Brackets {
|
|||
let r = BracketsUtils.findPrevBracketInToken(reversedBracketRegex, 1, lineText, tokenStart, tokenEnd);
|
||||
if (r) {
|
||||
let text = lineText.substring(r.startColumn - 1, r.endColumn - 1);
|
||||
text = text.toLowerCase();
|
||||
|
||||
let isOpen = this._richEditBrackets.textIsOpenBracket[text];
|
||||
if (!isOpen) {
|
||||
return {
|
||||
|
|
|
@ -40,10 +40,10 @@ export class RichEditBrackets implements IRichEditBrackets {
|
|||
this.textIsOpenBracket = {};
|
||||
this.maxBracketLength = 0;
|
||||
this.brackets.forEach((b) => {
|
||||
this.textIsBracket[b.open] = b;
|
||||
this.textIsBracket[b.close] = b;
|
||||
this.textIsOpenBracket[b.open] = true;
|
||||
this.textIsOpenBracket[b.close] = false;
|
||||
this.textIsBracket[b.open.toLowerCase()] = b;
|
||||
this.textIsBracket[b.close.toLowerCase()] = b;
|
||||
this.textIsOpenBracket[b.open.toLowerCase()] = true;
|
||||
this.textIsOpenBracket[b.close.toLowerCase()] = false;
|
||||
this.maxBracketLength = Math.max(this.maxBracketLength, b.open.length);
|
||||
this.maxBracketLength = Math.max(this.maxBracketLength, b.close.length);
|
||||
});
|
||||
|
|
|
@ -187,6 +187,8 @@ class TokenScanner {
|
|||
let bracketIsOpen: boolean = false;
|
||||
if (nextBracket) {
|
||||
let bracketText = this._currentLineText.substring(nextBracket.startColumn - 1, nextBracket.endColumn - 1);
|
||||
bracketText = bracketText.toLowerCase();
|
||||
|
||||
bracketData = this._currentModeBrackets.textIsBracket[bracketText];
|
||||
bracketIsOpen = this._currentModeBrackets.textIsOpenBracket[bracketText];
|
||||
}
|
||||
|
|
|
@ -297,7 +297,34 @@ suite('TextModelWithTokens regression tests', () => {
|
|||
model.dispose();
|
||||
});
|
||||
|
||||
// test('Microsoft/monaco-editor#133: Error: Cannot read property \'modeId\' of undefined', () => {
|
||||
test('Microsoft/monaco-editor#133: Error: Cannot read property \'modeId\' of undefined', () => {
|
||||
class BracketMode extends MockMode {
|
||||
constructor() {
|
||||
super();
|
||||
LanguageConfigurationRegistry.register(this.getId(), {
|
||||
brackets: [
|
||||
['module','end module'],
|
||||
['sub','end sub']
|
||||
]
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
// });
|
||||
let model = Model.createFromString([
|
||||
'Imports System',
|
||||
'Imports System.Collections.Generic',
|
||||
'',
|
||||
'Module m1',
|
||||
'',
|
||||
'\tSub Main()',
|
||||
'\tEnd Sub',
|
||||
'',
|
||||
'End Module',
|
||||
].join('\n'), undefined, new BracketMode());
|
||||
|
||||
let actual = model.matchBracket(new Position(4,1));
|
||||
assert.deepEqual(actual, [new Range(4,1,4,7), new Range(9,1,9,11)]);
|
||||
|
||||
model.dispose();
|
||||
});
|
||||
});
|
Loading…
Reference in a new issue