diff --git a/src/vs/editor/contrib/snippet/snippetSession.ts b/src/vs/editor/contrib/snippet/snippetSession.ts index 91cf566e74284b1390abe4e101be9281034b13ac..c479ffa78b36b199ca06c1ef852263ac78ecb540 100644 --- a/src/vs/editor/contrib/snippet/snippetSession.ts +++ b/src/vs/editor/contrib/snippet/snippetSession.ts @@ -18,7 +18,7 @@ import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; import { optional } from 'vs/platform/instantiation/common/instantiation'; import { Choice, Placeholder, SnippetParser, Text, TextmateSnippet, Marker } from './snippetParser'; -import { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, CommentBasedVariableResolver, WorkspaceBasedVariableResolver } from './snippetVariables'; +import { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, CommentBasedVariableResolver, WorkspaceBasedVariableResolver, RandomBasedVariableResolver } from './snippetVariables'; import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; import * as colors from 'vs/platform/theme/common/colorRegistry'; import { withNullAsUndefined } from 'vs/base/common/types'; @@ -450,6 +450,7 @@ export class SnippetSession { new CommentBasedVariableResolver(model), new TimeBasedVariableResolver, new WorkspaceBasedVariableResolver(workspaceService), + new RandomBasedVariableResolver, ])); const offset = model.getOffsetAt(start) + delta; diff --git a/src/vs/editor/contrib/snippet/snippetVariables.ts b/src/vs/editor/contrib/snippet/snippetVariables.ts index db6700822a4e342c81de81b4ca8ed213d558469e..09fd3ca980616ea489ef9a5b8e44399190b7b39f 100644 --- a/src/vs/editor/contrib/snippet/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/snippetVariables.ts @@ -46,6 +46,8 @@ export const KnownSnippetVariableNames: { [key: string]: true } = Object.freeze( 'LINE_COMMENT': true, 'WORKSPACE_NAME': true, 'WORKSPACE_FOLDER': true, + 'RANDOM': true, + 'RANDOM_HEX': true, }); export class CompositeSnippetVariableResolver implements VariableResolver { @@ -316,3 +318,18 @@ export class WorkspaceBasedVariableResolver implements VariableResolver { return (folderpath ? normalizeDriveLetter(folderpath) : '/'); } } + +export class RandomBasedVariableResolver implements VariableResolver { + resolve(variable: Variable): string | undefined { + const { name } = variable; + + if (name === 'RANDOM') { + return Math.random().toString().slice(-6); + } + else if (name === 'RANDOM_HEX') { + return Math.random().toString(16).slice(-6); + } + + return undefined; + } +}