diff --git a/src/vs/editor/contrib/snippet/common/snippet.ts b/src/vs/editor/contrib/snippet/common/snippet.ts index e5c7d545109..ee25c003b84 100644 --- a/src/vs/editor/contrib/snippet/common/snippet.ts +++ b/src/vs/editor/contrib/snippet/common/snippet.ts @@ -474,7 +474,7 @@ function _fillCodeSnippetFromMarker(snippet: CodeSnippet, marker: Marker[]) { snippet.lines.push(...lines); } else if (marker instanceof Placeholder) { - + // TODO - not every variable is a placeholder let placeHolder = placeHolders[marker.name]; if (!placeHolder) { placeHolders[marker.name] = placeHolder = { @@ -495,7 +495,14 @@ function _fillCodeSnippetFromMarker(snippet: CodeSnippet, marker: Marker[]) { endColumn: column + Marker.toString(marker.value).length // TODO multiline placeholders! }); - stack.unshift(...marker.value); + if (marker.value.length === 0 && marker.isVariable) { + // HACK this is here because we falsy advertise + // ${foo} as placeholder in our own snippets + stack.unshift(new Text(marker.name)); + + } else { + stack.unshift(...marker.value); + } } } diff --git a/src/vs/editor/contrib/snippet/test/common/snippet.test.ts b/src/vs/editor/contrib/snippet/test/common/snippet.test.ts index 78df31697ed..0940373182b 100644 --- a/src/vs/editor/contrib/snippet/test/common/snippet.test.ts +++ b/src/vs/editor/contrib/snippet/test/common/snippet.test.ts @@ -73,7 +73,7 @@ suite('Editor Contrib - Snippets', () => { assertInternalAndTextmate( '{{first}}-{{2:}}-{{second}}-{{1:}}', - '${first:first}-${2}-${second:second}-${1}', + '${first}-${2}-${second}-${1}', snippet => { assert.deepEqual(snippet.lines, ['first--second-']); assert.equal(snippet.placeHolders.length, 4);