From a5120a166fd3a2c6b9bb3513afb8fa48ed555444 Mon Sep 17 00:00:00 2001 From: karan verma Date: Wed, 21 Nov 2018 17:24:21 +0530 Subject: [PATCH 1/3] fix: #55946 Added comment snippet variable --- .../editor/contrib/snippet/snippetSession.ts | 3 ++- .../contrib/snippet/snippetVariables.ts | 25 ++++++++++++++++++- 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/vs/editor/contrib/snippet/snippetSession.ts b/src/vs/editor/contrib/snippet/snippetSession.ts index 9928428a60cbd8..17bf8b96b3a8a3 100644 --- a/src/vs/editor/contrib/snippet/snippetSession.ts +++ b/src/vs/editor/contrib/snippet/snippetSession.ts @@ -17,7 +17,7 @@ import { ModelDecorationOptions } from 'vs/editor/common/model/textModel'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; import { optional } from 'vs/platform/instantiation/common/instantiation'; import { Choice, Placeholder, SnippetParser, Text, TextmateSnippet } from './snippetParser'; -import { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver } from './snippetVariables'; +import { ClipboardBasedVariableResolver, CompositeSnippetVariableResolver, ModelBasedVariableResolver, SelectionBasedVariableResolver, TimeBasedVariableResolver, CommentBasedVariableResolver } from './snippetVariables'; import { registerThemingParticipant } from 'vs/platform/theme/common/themeService'; import * as colors from 'vs/platform/theme/common/colorRegistry'; @@ -402,6 +402,7 @@ export class SnippetSession { modelBasedVariableResolver, new ClipboardBasedVariableResolver(clipboardService, idx, indexedSelections.length), new SelectionBasedVariableResolver(model, selection), + new CommentBasedVariableResolver(model), new TimeBasedVariableResolver ])); diff --git a/src/vs/editor/contrib/snippet/snippetVariables.ts b/src/vs/editor/contrib/snippet/snippetVariables.ts index 1546872bf31565..6ac0c9730254da 100644 --- a/src/vs/editor/contrib/snippet/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/snippetVariables.ts @@ -8,6 +8,7 @@ import { basename, dirname } from 'vs/base/common/paths'; import { ITextModel } from 'vs/editor/common/model'; import { Selection } from 'vs/editor/common/core/selection'; import { VariableResolver, Variable, Text } from 'vs/editor/contrib/snippet/snippetParser'; +import { LanguageConfigurationRegistry } from 'vs/editor/common/modes/languageConfigurationRegistry'; import { getLeadingWhitespace, commonPrefixLength, isFalsyOrWhitespace, pad } from 'vs/base/common/strings'; import { IClipboardService } from 'vs/platform/clipboard/common/clipboardService'; @@ -34,6 +35,9 @@ export const KnownSnippetVariableNames = Object.freeze({ 'TM_FILENAME_BASE': true, 'TM_DIRECTORY': true, 'TM_FILEPATH': true, + 'BLOCK_COMMENT_START': true, + 'BLOCK_COMMENT_END': true, + 'LINE_COMMENT': true, }); export class CompositeSnippetVariableResolver implements VariableResolver { @@ -180,7 +184,26 @@ export class ClipboardBasedVariableResolver implements VariableResolver { } } } - +export class CommentBasedVariableResolver implements VariableResolver { + constructor( + private readonly _model: ITextModel + ) { + // + } + resolve(variable: Variable): string | undefined { + const { name } = variable; + const language = this._model.getLanguageIdentifier(); + const comments = LanguageConfigurationRegistry.getComments(language.id); + if (name === 'LINE_COMMENT') { + return comments.lineCommentToken; + } else if (name === 'BLOCK_COMMENT_START') { + return comments.blockCommentStartToken; + } else if (name === 'BLOCK_COMMENT_END') { + return comments.blockCommentEndToken; + } + return undefined; + } +} export class TimeBasedVariableResolver implements VariableResolver { private static readonly dayNames = [nls.localize('Sunday', "Sunday"), nls.localize('Monday', "Monday"), nls.localize('Tuesday', "Tuesday"), nls.localize('Wednesday', "Wednesday"), nls.localize('Thursday', "Thursday"), nls.localize('Friday', "Friday"), nls.localize('Saturday', "Saturday")]; From a649ade2b752edf2a18170ac46a24fbc77112648 Mon Sep 17 00:00:00 2001 From: karan verma Date: Wed, 21 Nov 2018 20:08:51 +0530 Subject: [PATCH 2/3] fix: returning undefined to ensure the default value is applied --- src/vs/editor/contrib/snippet/snippetVariables.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/vs/editor/contrib/snippet/snippetVariables.ts b/src/vs/editor/contrib/snippet/snippetVariables.ts index 6ac0c9730254da..5ed841af65a384 100644 --- a/src/vs/editor/contrib/snippet/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/snippetVariables.ts @@ -194,12 +194,13 @@ export class CommentBasedVariableResolver implements VariableResolver { const { name } = variable; const language = this._model.getLanguageIdentifier(); const comments = LanguageConfigurationRegistry.getComments(language.id); + if (name === 'LINE_COMMENT') { - return comments.lineCommentToken; + return comments.lineCommentToken || undefined; } else if (name === 'BLOCK_COMMENT_START') { - return comments.blockCommentStartToken; + return comments.blockCommentStartToken || undefined; } else if (name === 'BLOCK_COMMENT_END') { - return comments.blockCommentEndToken; + return comments.blockCommentEndToken || undefined; } return undefined; } From 4d7ba5255cdb655a2a5b8a9e6f60d5d17c76b431 Mon Sep 17 00:00:00 2001 From: karan Date: Wed, 21 Nov 2018 22:19:44 +0530 Subject: [PATCH 3/3] fix: fixed issue with strict null check --- src/vs/editor/contrib/snippet/snippetVariables.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/vs/editor/contrib/snippet/snippetVariables.ts b/src/vs/editor/contrib/snippet/snippetVariables.ts index 5ed841af65a384..92b27d62f60576 100644 --- a/src/vs/editor/contrib/snippet/snippetVariables.ts +++ b/src/vs/editor/contrib/snippet/snippetVariables.ts @@ -193,14 +193,16 @@ export class CommentBasedVariableResolver implements VariableResolver { resolve(variable: Variable): string | undefined { const { name } = variable; const language = this._model.getLanguageIdentifier(); - const comments = LanguageConfigurationRegistry.getComments(language.id); - + const config = LanguageConfigurationRegistry.getComments(language.id); + if (!config) { + return undefined; + } if (name === 'LINE_COMMENT') { - return comments.lineCommentToken || undefined; + return config.lineCommentToken || undefined; } else if (name === 'BLOCK_COMMENT_START') { - return comments.blockCommentStartToken || undefined; + return config.blockCommentStartToken || undefined; } else if (name === 'BLOCK_COMMENT_END') { - return comments.blockCommentEndToken || undefined; + return config.blockCommentEndToken || undefined; } return undefined; }