From e7fd412de4ffe236d87ff7994d5fdcd98e5f742d Mon Sep 17 00:00:00 2001 From: Johannes Rieken Date: Wed, 31 May 2017 12:07:26 +0200 Subject: [PATCH] fix #27541 * return `undefined` when current word or selection is falsy * use editor selection, not snippet selection, when resolving variables --- src/vs/editor/contrib/snippet/browser/snippetSession.ts | 2 +- src/vs/editor/contrib/snippet/browser/snippetVariables.ts | 4 ++-- .../contrib/snippet/test/browser/snippetVariables.test.ts | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/contrib/snippet/browser/snippetSession.ts b/src/vs/editor/contrib/snippet/browser/snippetSession.ts index c4fcdaa3e41..4a5d4cc9e41 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetSession.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetSession.ts @@ -253,7 +253,7 @@ export class SnippetSession { const start = snippetSelection.getStartPosition(); const adjustedTemplate = SnippetSession.adjustWhitespace(model, start, this._template); - const snippet = SnippetParser.parse(adjustedTemplate).resolveVariables(new EditorSnippetVariableResolver(model, snippetSelection)); + const snippet = SnippetParser.parse(adjustedTemplate).resolveVariables(new EditorSnippetVariableResolver(model, selection)); // rewrite final-tabstop to some other placeholder because this // snippet sits inside another snippet diff --git a/src/vs/editor/contrib/snippet/browser/snippetVariables.ts b/src/vs/editor/contrib/snippet/browser/snippetVariables.ts index ab345893eac..2953ee8bfc3 100644 --- a/src/vs/editor/contrib/snippet/browser/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/browser/snippetVariables.ts @@ -32,7 +32,7 @@ export class EditorSnippetVariableResolver { resolve(name: string): string { if (name === 'SELECTION' || name === 'TM_SELECTED_TEXT') { - return this._model.getValueInRange(this._selection); + return this._model.getValueInRange(this._selection) || undefined; } else if (name === 'TM_CURRENT_LINE') { return this._model.getLineContent(this._selection.positionLineNumber); @@ -42,7 +42,7 @@ export class EditorSnippetVariableResolver { lineNumber: this._selection.positionLineNumber, column: this._selection.positionColumn }); - return info ? info.word : ''; + return info && info.word || undefined; } else if (name === 'TM_LINE_INDEX') { return String(this._selection.positionLineNumber - 1); diff --git a/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts b/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts index fa0bb4034f9..926bb6f424e 100644 --- a/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts +++ b/src/vs/editor/contrib/snippet/test/browser/snippetVariables.test.ts @@ -78,12 +78,12 @@ suite('Snippet Variables Resolver', function () { assert.equal(resolver.resolve('TM_LINE_NUMBER'), '1'); resolver = new EditorSnippetVariableResolver(model, new Selection(1, 2, 1, 2)); - assert.equal(resolver.resolve('TM_SELECTED_TEXT'), ''); + assert.equal(resolver.resolve('TM_SELECTED_TEXT'), undefined); assert.equal(resolver.resolve('TM_CURRENT_WORD'), 'this'); resolver = new EditorSnippetVariableResolver(model, new Selection(3, 1, 3, 1)); - assert.equal(resolver.resolve('TM_CURRENT_WORD'), ''); + assert.equal(resolver.resolve('TM_CURRENT_WORD'), undefined); });