src/vs/editor/contrib/snippet/snippetSession.ts/SnippetSession/merge
class SnippetSession:	merge(template: string, options: ISnippetSessionInsertOptions = _defaultOptions): void {
		if (!this._editor.hasModel()) {
			return;
		}
		this._templateMerges.push([this._snippets[0]._nestingLevel, this._snippets[0]._placeholderGroupsIdx, template]);
		const { edits, snippets } = SnippetSession.createEditsAndSnippets(this._editor, template, options.overwriteBefore, options.overwriteAfter, true, options.adjustWhitespace, options.clipboardText, options.overtypingCapturer);

		this._editor.executeEdits('snippet', edits, undoEdits => {
			for (const snippet of this._snippets) {
				snippet.merge(snippets);
			}
			console.assert(snippets.length === 0);

			if (this._snippets[0].hasPlaceholder) {
				return this._move(undefined);
			} else {
				return (
					undoEdits
						.filter(edit => !!edit.identifier) // only use our undo edits
						.map(edit => Selection.fromPositions(edit.range.getEndPosition()))
				);
			}
		});
	}