TextEditor.insertSnippet extension API.

More robust type validation on ext side of insertSnippet.
Position/range check for snippet insertion was inverted.
Adding insertSnippet to vscode.d.ts. (Should it be in vscode.proposed.d.ts?)
Adding extension API tests for insertSnippet.
This commit is contained in:
Joel Day
2016-12-20 14:33:37 -08:00
parent 75840d1f74
commit 40522e28f8
4 changed files with 55 additions and 6 deletions

View File

@@ -13,7 +13,7 @@ import { TPromise } from 'vs/base/common/winjs.base';
import { IThreadService } from 'vs/workbench/services/thread/common/threadService';
import { ExtHostDocuments, ExtHostDocumentData } from 'vs/workbench/api/node/extHostDocuments';
import { Selection, Range, Position, EndOfLine, TextEditorRevealType, TextEditorSelectionChangeKind, TextEditorLineNumbersStyle } from './extHostTypes';
import { ISingleEditOperation, TextEditorCursorStyle } from 'vs/editor/common/editorCommon';
import { ISingleEditOperation, TextEditorCursorStyle, IPosition, IRange } from 'vs/editor/common/editorCommon';
import { IResolvedTextEditorConfiguration, ISelectionChangeEvent, ITextEditorConfigurationUpdate } from 'vs/workbench/api/node/mainThreadEditorsTracker';
import * as TypeConverters from './extHostTypeConverters';
import { MainContext, MainThreadEditorsShape, ExtHostEditorsShape, ITextEditorAddData, ITextEditorPositionData } from './extHost.protocol';
@@ -621,8 +621,17 @@ class ExtHostTextEditor implements vscode.TextEditor {
}
insertSnippet(template: string, posOrRange: Position | Range) {
const convertedPosOrRange = posOrRange instanceof Position ?
TypeConverters.fromPosition(posOrRange) : TypeConverters.fromRange(posOrRange);
let convertedPosOrRange: IPosition | IRange;
if (Position.isPosition(posOrRange)) {
convertedPosOrRange = TypeConverters.fromPosition(posOrRange);
}
else if (Range.isRange(posOrRange)) {
convertedPosOrRange = TypeConverters.fromRange(posOrRange);
}
else {
return TPromise.wrapError(new Error('Unrecognized value for posOrRange'));
}
return this._proxy.$tryInsertSnippet(this._id, template, convertedPosOrRange);
}

View File

@@ -400,10 +400,10 @@ export class MainThreadTextEditor {
this._codeEditor.focus();
if (range) {
snippetController.insertSnippet(template, 0, 0);
snippetController.insertSnippetWithReplaceRange(template, range);
}
else {
snippetController.insertSnippetWithReplaceRange(template, range);
snippetController.insertSnippet(template, 0, 0);
}
return true;