提交 a86bfc7e 编写于 作者: J Johannes Rieken

proper placeholder sorting

上级 8cc8c3f1
......@@ -5,7 +5,7 @@
'use strict';
import { getLeadingWhitespace, compare } from 'vs/base/common/strings';
import { getLeadingWhitespace } from 'vs/base/common/strings';
import { ICommonCodeEditor, IModel, TrackedRangeStickiness, IIdentifiedSingleEditOperation } from 'vs/editor/common/editorCommon';
import { EditOperation } from 'vs/editor/common/core/editOperation';
import { TextmateSnippet, Placeholder, SnippetParser } from '../common/snippetParser';
......@@ -77,7 +77,7 @@ class OneSnippet {
this._placeholderGroupsIdx = -1;
this._placeholderGroups = [];
let lastBucket: Placeholder[];
this._snippet.getPlaceholders().sort((a, b) => compare(a.name, b.name)).reverse().forEach(a => {
this._snippet.getPlaceholders().sort(Placeholder.compare).forEach(a => {
if (!lastBucket || lastBucket[0].name !== a.name) {
lastBucket = [a];
this._placeholderGroups.push(lastBucket);
......
......@@ -161,18 +161,35 @@ export class Text extends Marker {
}
export class Placeholder extends Marker {
static compare(a: Placeholder, b: Placeholder): number {
if (a.name === b.name) {
return 0;
} else if (a.isFinalTabstop) {
return 1;
} else if (b.isFinalTabstop) {
return -1;
} else if (a.name < b.name) {
return -1;
} else if (a.name > b.name) {
return 1;
} else {
return 0;
}
}
constructor(public name: string = '', public defaultValue: Marker[]) {
super();
}
get isFinalTabstop() {
return this.name === '0';
}
toString() {
return Marker.toString(this.defaultValue);
}
with(defaultValue: Marker[]): Placeholder {
return new Placeholder(this.name, defaultValue);
}
toString() {
return Marker.toString(this.defaultValue);
}
}
export class Variable extends Marker {
......
......@@ -73,7 +73,7 @@ suite('SnippetInsertion', function () {
test('snippets, selections -> next/prev', () => {
const session = new SnippetSession(editor, 'f$2oo${1:bar}foo$0');
const session = new SnippetSession(editor, 'f$1oo${2:bar}foo$0');
// @ $2
assertSelections(editor, new Selection(1, 2, 1, 2), new Selection(2, 6, 2, 6));
......@@ -92,7 +92,7 @@ suite('SnippetInsertion', function () {
});
test('snippets, selections & typing', function () {
const session = new SnippetSession(editor, 'f${2:oo}_$1_$0');
const session = new SnippetSession(editor, 'f${1:oo}_$2_$0');
editor.trigger('test', 'type', { text: 'X' });
session.next();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册