Skip to content

Commit 404a7d6

Browse files
authored
Gabritto/semicolons (#46832)
* call formatter in completions * fixes * add test * update api baselines * fix createModifiersFromModifierFlag to not return empty array
1 parent f4e1efb commit 404a7d6

17 files changed

+209
-77
lines changed

src/compiler/emitter.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1940,7 +1940,7 @@ namespace ts {
19401940
emitPlaceholder(hint, node, snippet);
19411941
break;
19421942
case SnippetKind.TabStop:
1943-
emitTabStop(snippet);
1943+
emitTabStop(hint, node, snippet);
19441944
break;
19451945
}
19461946
}
@@ -1952,7 +1952,12 @@ namespace ts {
19521952
// `${2:...}`
19531953
}
19541954

1955-
function emitTabStop(snippet: TabStop) {
1955+
function emitTabStop(hint: EmitHint, node: Node, snippet: TabStop) {
1956+
// A tab stop should only be attached to an empty node, i.e. a node that doesn't emit any text.
1957+
Debug.assert(node.kind === SyntaxKind.EmptyStatement,
1958+
`A tab stop cannot be attached to a node of kind ${Debug.formatSyntaxKind(node.kind)}.`);
1959+
Debug.assert(hint !== EmitHint.EmbeddedStatement,
1960+
`A tab stop cannot be attached to an embedded statement.`);
19561961
nonEscapingWrite(`\$${snippet.order}`);
19571962
}
19581963

src/compiler/factory/nodeFactory.ts

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,7 +1075,7 @@ namespace ts {
10751075
if (flags & ModifierFlags.Override) result.push(createModifier(SyntaxKind.OverrideKeyword));
10761076
if (flags & ModifierFlags.Readonly) result.push(createModifier(SyntaxKind.ReadonlyKeyword));
10771077
if (flags & ModifierFlags.Async) result.push(createModifier(SyntaxKind.AsyncKeyword));
1078-
return result;
1078+
return result.length ? result : undefined;
10791079
}
10801080

10811081
//
@@ -6080,32 +6080,36 @@ namespace ts {
60806080

60816081
function updateModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags): T;
60826082
function updateModifiers(node: HasModifiers, modifiers: readonly Modifier[] | ModifierFlags) {
6083+
let modifierArray;
60836084
if (typeof modifiers === "number") {
6084-
modifiers = createModifiersFromModifierFlags(modifiers);
6085+
modifierArray = createModifiersFromModifierFlags(modifiers);
60856086
}
6086-
return isParameter(node) ? updateParameterDeclaration(node, node.decorators, modifiers, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) :
6087-
isPropertySignature(node) ? updatePropertySignature(node, modifiers, node.name, node.questionToken, node.type) :
6088-
isPropertyDeclaration(node) ? updatePropertyDeclaration(node, node.decorators, modifiers, node.name, node.questionToken ?? node.exclamationToken, node.type, node.initializer) :
6089-
isMethodSignature(node) ? updateMethodSignature(node, modifiers, node.name, node.questionToken, node.typeParameters, node.parameters, node.type) :
6090-
isMethodDeclaration(node) ? updateMethodDeclaration(node, node.decorators, modifiers, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) :
6091-
isConstructorDeclaration(node) ? updateConstructorDeclaration(node, node.decorators, modifiers, node.parameters, node.body) :
6092-
isGetAccessorDeclaration(node) ? updateGetAccessorDeclaration(node, node.decorators, modifiers, node.name, node.parameters, node.type, node.body) :
6093-
isSetAccessorDeclaration(node) ? updateSetAccessorDeclaration(node, node.decorators, modifiers, node.name, node.parameters, node.body) :
6094-
isIndexSignatureDeclaration(node) ? updateIndexSignature(node, node.decorators, modifiers, node.parameters, node.type) :
6095-
isFunctionExpression(node) ? updateFunctionExpression(node, modifiers, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) :
6096-
isArrowFunction(node) ? updateArrowFunction(node, modifiers, node.typeParameters, node.parameters, node.type, node.equalsGreaterThanToken, node.body) :
6097-
isClassExpression(node) ? updateClassExpression(node, node.decorators, modifiers, node.name, node.typeParameters, node.heritageClauses, node.members) :
6098-
isVariableStatement(node) ? updateVariableStatement(node, modifiers, node.declarationList) :
6099-
isFunctionDeclaration(node) ? updateFunctionDeclaration(node, node.decorators, modifiers, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) :
6100-
isClassDeclaration(node) ? updateClassDeclaration(node, node.decorators, modifiers, node.name, node.typeParameters, node.heritageClauses, node.members) :
6101-
isInterfaceDeclaration(node) ? updateInterfaceDeclaration(node, node.decorators, modifiers, node.name, node.typeParameters, node.heritageClauses, node.members) :
6102-
isTypeAliasDeclaration(node) ? updateTypeAliasDeclaration(node, node.decorators, modifiers, node.name, node.typeParameters, node.type) :
6103-
isEnumDeclaration(node) ? updateEnumDeclaration(node, node.decorators, modifiers, node.name, node.members) :
6104-
isModuleDeclaration(node) ? updateModuleDeclaration(node, node.decorators, modifiers, node.name, node.body) :
6105-
isImportEqualsDeclaration(node) ? updateImportEqualsDeclaration(node, node.decorators, modifiers, node.isTypeOnly, node.name, node.moduleReference) :
6106-
isImportDeclaration(node) ? updateImportDeclaration(node, node.decorators, modifiers, node.importClause, node.moduleSpecifier, node.assertClause) :
6107-
isExportAssignment(node) ? updateExportAssignment(node, node.decorators, modifiers, node.expression) :
6108-
isExportDeclaration(node) ? updateExportDeclaration(node, node.decorators, modifiers, node.isTypeOnly, node.exportClause, node.moduleSpecifier, node.assertClause) :
6087+
else {
6088+
modifierArray = modifiers;
6089+
}
6090+
return isParameter(node) ? updateParameterDeclaration(node, node.decorators, modifierArray, node.dotDotDotToken, node.name, node.questionToken, node.type, node.initializer) :
6091+
isPropertySignature(node) ? updatePropertySignature(node, modifierArray, node.name, node.questionToken, node.type) :
6092+
isPropertyDeclaration(node) ? updatePropertyDeclaration(node, node.decorators, modifierArray, node.name, node.questionToken ?? node.exclamationToken, node.type, node.initializer) :
6093+
isMethodSignature(node) ? updateMethodSignature(node, modifierArray, node.name, node.questionToken, node.typeParameters, node.parameters, node.type) :
6094+
isMethodDeclaration(node) ? updateMethodDeclaration(node, node.decorators, modifierArray, node.asteriskToken, node.name, node.questionToken, node.typeParameters, node.parameters, node.type, node.body) :
6095+
isConstructorDeclaration(node) ? updateConstructorDeclaration(node, node.decorators, modifierArray, node.parameters, node.body) :
6096+
isGetAccessorDeclaration(node) ? updateGetAccessorDeclaration(node, node.decorators, modifierArray, node.name, node.parameters, node.type, node.body) :
6097+
isSetAccessorDeclaration(node) ? updateSetAccessorDeclaration(node, node.decorators, modifierArray, node.name, node.parameters, node.body) :
6098+
isIndexSignatureDeclaration(node) ? updateIndexSignature(node, node.decorators, modifierArray, node.parameters, node.type) :
6099+
isFunctionExpression(node) ? updateFunctionExpression(node, modifierArray, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) :
6100+
isArrowFunction(node) ? updateArrowFunction(node, modifierArray, node.typeParameters, node.parameters, node.type, node.equalsGreaterThanToken, node.body) :
6101+
isClassExpression(node) ? updateClassExpression(node, node.decorators, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) :
6102+
isVariableStatement(node) ? updateVariableStatement(node, modifierArray, node.declarationList) :
6103+
isFunctionDeclaration(node) ? updateFunctionDeclaration(node, node.decorators, modifierArray, node.asteriskToken, node.name, node.typeParameters, node.parameters, node.type, node.body) :
6104+
isClassDeclaration(node) ? updateClassDeclaration(node, node.decorators, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) :
6105+
isInterfaceDeclaration(node) ? updateInterfaceDeclaration(node, node.decorators, modifierArray, node.name, node.typeParameters, node.heritageClauses, node.members) :
6106+
isTypeAliasDeclaration(node) ? updateTypeAliasDeclaration(node, node.decorators, modifierArray, node.name, node.typeParameters, node.type) :
6107+
isEnumDeclaration(node) ? updateEnumDeclaration(node, node.decorators, modifierArray, node.name, node.members) :
6108+
isModuleDeclaration(node) ? updateModuleDeclaration(node, node.decorators, modifierArray, node.name, node.body) :
6109+
isImportEqualsDeclaration(node) ? updateImportEqualsDeclaration(node, node.decorators, modifierArray, node.isTypeOnly, node.name, node.moduleReference) :
6110+
isImportDeclaration(node) ? updateImportDeclaration(node, node.decorators, modifierArray, node.importClause, node.moduleSpecifier, node.assertClause) :
6111+
isExportAssignment(node) ? updateExportAssignment(node, node.decorators, modifierArray, node.expression) :
6112+
isExportDeclaration(node) ? updateExportDeclaration(node, node.decorators, modifierArray, node.isTypeOnly, node.exportClause, node.moduleSpecifier, node.assertClause) :
61096113
Debug.assertNever(node);
61106114
}
61116115

src/compiler/transformers/declarations.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1610,7 +1610,7 @@ namespace ts {
16101610
}
16111611

16121612
// Elide "public" modifier, as it is the default
1613-
function maskModifiers(node: Node, modifierMask?: ModifierFlags, modifierAdditions?: ModifierFlags): Modifier[] {
1613+
function maskModifiers(node: Node, modifierMask?: ModifierFlags, modifierAdditions?: ModifierFlags): Modifier[] | undefined {
16141614
return factory.createModifiersFromModifierFlags(maskModifierFlags(node, modifierMask, modifierAdditions));
16151615
}
16161616

src/compiler/types.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7169,7 +7169,7 @@ namespace ts {
71697169
//
71707170

71717171
createModifier<T extends ModifierSyntaxKind>(kind: T): ModifierToken<T>;
7172-
createModifiersFromModifierFlags(flags: ModifierFlags): Modifier[];
7172+
createModifiersFromModifierFlags(flags: ModifierFlags): Modifier[] | undefined;
71737173

71747174
//
71757175
// Names
@@ -7841,7 +7841,7 @@ namespace ts {
78417841
* - *DO NOT USE THIS* if a more appropriate function is available.
78427842
*/
78437843
/* @internal */ cloneNode<T extends Node | undefined>(node: T): T;
7844-
/* @internal */ updateModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags): T;
7844+
/* @internal */ updateModifiers<T extends HasModifiers>(node: T, modifiers: readonly Modifier[] | ModifierFlags | undefined): T;
78457845
}
78467846

78477847
/* @internal */

src/harness/fourslashImpl.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1348,7 +1348,11 @@ namespace FourSlash {
13481348
if (options) {
13491349
this.configure(options);
13501350
}
1351-
return this.languageService.getCompletionsAtPosition(this.activeFile.fileName, this.currentCaretPosition, options);
1351+
return this.languageService.getCompletionsAtPosition(
1352+
this.activeFile.fileName,
1353+
this.currentCaretPosition,
1354+
options,
1355+
this.formatCodeSettings);
13521356
}
13531357

13541358
private getCompletionEntryDetails(entryName: string, source: string | undefined, data: ts.CompletionEntryData | undefined, preferences?: ts.UserPreferences): ts.CompletionEntryDetails | undefined {

src/harness/harnessLanguageService.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,8 +472,8 @@ namespace Harness.LanguageService {
472472
const responseFormat = format || ts.SemanticClassificationFormat.Original;
473473
return unwrapJSONCallResult(this.shim.getEncodedSemanticClassifications(fileName, span.start, span.length, responseFormat));
474474
}
475-
getCompletionsAtPosition(fileName: string, position: number, preferences: ts.UserPreferences | undefined): ts.CompletionInfo {
476-
return unwrapJSONCallResult(this.shim.getCompletionsAtPosition(fileName, position, preferences));
475+
getCompletionsAtPosition(fileName: string, position: number, preferences: ts.UserPreferences | undefined, formattingSettings: ts.FormatCodeSettings | undefined): ts.CompletionInfo {
476+
return unwrapJSONCallResult(this.shim.getCompletionsAtPosition(fileName, position, preferences, formattingSettings));
477477
}
478478
getCompletionEntryDetails(fileName: string, position: number, entryName: string, formatOptions: ts.FormatCodeOptions | undefined, source: string | undefined, preferences: ts.UserPreferences | undefined, data: ts.CompletionEntryData | undefined): ts.CompletionEntryDetails {
479479
return unwrapJSONCallResult(this.shim.getCompletionEntryDetails(fileName, position, entryName, JSON.stringify(formatOptions), source, preferences, data));

src/server/session.ts

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1842,13 +1842,18 @@ namespace ts.server {
18421842
const scriptInfo = this.projectService.getScriptInfoForNormalizedPath(file)!;
18431843
const position = this.getPosition(args, scriptInfo);
18441844

1845-
const completions = project.getLanguageService().getCompletionsAtPosition(file, position, {
1846-
...convertUserPreferences(this.getPreferences(file)),
1847-
triggerCharacter: args.triggerCharacter,
1848-
triggerKind: args.triggerKind as CompletionTriggerKind | undefined,
1849-
includeExternalModuleExports: args.includeExternalModuleExports,
1850-
includeInsertTextCompletions: args.includeInsertTextCompletions
1851-
});
1845+
const completions = project.getLanguageService().getCompletionsAtPosition(
1846+
file,
1847+
position,
1848+
{
1849+
...convertUserPreferences(this.getPreferences(file)),
1850+
triggerCharacter: args.triggerCharacter,
1851+
triggerKind: args.triggerKind as CompletionTriggerKind | undefined,
1852+
includeExternalModuleExports: args.includeExternalModuleExports,
1853+
includeInsertTextCompletions: args.includeInsertTextCompletions,
1854+
},
1855+
project.projectService.getFormatCodeOptions(file),
1856+
);
18521857
if (completions === undefined) return undefined;
18531858

18541859
if (kind === protocol.CommandTypes.CompletionsFull) return completions;

0 commit comments

Comments
 (0)