diff --git a/src/compiler/emitter.ts b/src/compiler/emitter.ts index f612ff3c62..8cd877b61d 100644 --- a/src/compiler/emitter.ts +++ b/src/compiler/emitter.ts @@ -1953,6 +1953,7 @@ namespace ts { } function emitTabStop(hint: EmitHint, node: Node, snippet: TabStop) { + // A tab stop should only be attached to an empty node, i.e. a node that doesn't emit any text. Debug.assert(node.kind === SyntaxKind.EmptyStatement, `A tab stop cannot be attached to a node of kind ${Debug.formatSyntaxKind(node.kind)}.`); Debug.assert(hint !== EmitHint.EmbeddedStatement, diff --git a/src/services/textChanges.ts b/src/services/textChanges.ts index 11b355e244..bb1b21aa20 100644 --- a/src/services/textChanges.ts +++ b/src/services/textChanges.ts @@ -1052,15 +1052,6 @@ namespace ts.textChanges { ? "" : options.suffix); } - export function getFormatCodeSettingsForWriting({ options }: formatting.FormatContext, sourceFile: SourceFile): FormatCodeSettings { - const shouldAutoDetectSemicolonPreference = !options.semicolons || options.semicolons === SemicolonPreference.Ignore; - const shouldRemoveSemicolons = options.semicolons === SemicolonPreference.Remove || shouldAutoDetectSemicolonPreference && !probablyUsesSemicolons(sourceFile); - return { - ...options, - semicolons: shouldRemoveSemicolons ? SemicolonPreference.Remove : SemicolonPreference.Ignore, - }; - } - /** Note: this may mutate `nodeIn`. */ function getFormattedTextOfNode(nodeIn: Node, sourceFile: SourceFile, pos: number, { indentation, prefix, delta }: InsertNodeOptions, newLineCharacter: string, formatContext: formatting.FormatContext, validate: ValidateNonFormattedText | undefined): string { const { node, text } = getNonformattedText(nodeIn, sourceFile, newLineCharacter); diff --git a/src/services/utilities.ts b/src/services/utilities.ts index 30552aa9b9..19fffd796e 100644 --- a/src/services/utilities.ts +++ b/src/services/utilities.ts @@ -3290,5 +3290,17 @@ namespace ts { : getLocaleSpecificMessage(diag); } + /** + * Get format code settings for a code writing context (e.g. when formatting text changes or completions code). + */ + export function getFormatCodeSettingsForWriting({ options }: formatting.FormatContext, sourceFile: SourceFile): FormatCodeSettings { + const shouldAutoDetectSemicolonPreference = !options.semicolons || options.semicolons === SemicolonPreference.Ignore; + const shouldRemoveSemicolons = options.semicolons === SemicolonPreference.Remove || shouldAutoDetectSemicolonPreference && !probablyUsesSemicolons(sourceFile); + return { + ...options, + semicolons: shouldRemoveSemicolons ? SemicolonPreference.Remove : SemicolonPreference.Ignore, + }; + } + // #endregion }