Skip to content

Commit 80ce1df

Browse files
committed
Allow preferinfer modifier on type parameters
1 parent 8586c99 commit 80ce1df

File tree

7 files changed

+15
-2
lines changed

7 files changed

+15
-2
lines changed

src/compiler/factory/nodeFactory.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1331,6 +1331,7 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
13311331
case SyntaxKind.InKeyword:
13321332
case SyntaxKind.OutKeyword:
13331333
case SyntaxKind.OverrideKeyword:
1334+
case SyntaxKind.PreferInferKeyword:
13341335
case SyntaxKind.StringKeyword:
13351336
case SyntaxKind.BooleanKeyword:
13361337
case SyntaxKind.SymbolKeyword:
@@ -1417,6 +1418,7 @@ export function createNodeFactory(flags: NodeFactoryFlags, baseFactory: BaseNode
14171418
if (flags & ModifierFlags.Async) result.push(createModifier(SyntaxKind.AsyncKeyword));
14181419
if (flags & ModifierFlags.In) result.push(createModifier(SyntaxKind.InKeyword));
14191420
if (flags & ModifierFlags.Out) result.push(createModifier(SyntaxKind.OutKeyword));
1421+
if (flags & ModifierFlags.PreferInfer) result.push(createModifier(SyntaxKind.PreferInferKeyword));
14201422
return result.length ? result : undefined;
14211423
}
14221424

src/compiler/program.ts

+1
Original file line numberDiff line numberDiff line change
@@ -3016,6 +3016,7 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
30163016
case SyntaxKind.OverrideKeyword:
30173017
case SyntaxKind.InKeyword:
30183018
case SyntaxKind.OutKeyword:
3019+
case SyntaxKind.PreferInferKeyword:
30193020
diagnostics.push(createDiagnosticForNode(modifier, Diagnostics.The_0_modifier_can_only_be_used_in_TypeScript_files, tokenToString(modifier.kind)));
30203021
break;
30213022

src/compiler/scanner.ts

+1
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ export const textToKeywordObj: MapLike<KeywordSyntaxKind> = {
156156
number: SyntaxKind.NumberKeyword,
157157
object: SyntaxKind.ObjectKeyword,
158158
package: SyntaxKind.PackageKeyword,
159+
preferinfer: SyntaxKind.PreferInferKeyword,
159160
private: SyntaxKind.PrivateKeyword,
160161
protected: SyntaxKind.ProtectedKeyword,
161162
public: SyntaxKind.PublicKeyword,

src/compiler/transformers/ts.ts

+1
Original file line numberDiff line numberDiff line change
@@ -602,6 +602,7 @@ export function transformTypeScript(context: TransformationContext) {
602602
case SyntaxKind.ReadonlyKeyword:
603603
case SyntaxKind.InKeyword:
604604
case SyntaxKind.OutKeyword:
605+
case SyntaxKind.PreferInferKeyword:
605606
// TypeScript accessibility and readonly modifiers are elided
606607
// falls through
607608
case SyntaxKind.ArrayType:

src/compiler/types.ts

+8-2
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ export const enum SyntaxKind {
198198
NamespaceKeyword,
199199
NeverKeyword,
200200
OutKeyword,
201+
PreferInferKeyword,
201202
ReadonlyKeyword,
202203
RequireKeyword,
203204
NumberKeyword,
@@ -625,6 +626,7 @@ export type KeywordSyntaxKind =
625626
| SyntaxKind.ObjectKeyword
626627
| SyntaxKind.OfKeyword
627628
| SyntaxKind.PackageKeyword
629+
| SyntaxKind.PreferInferKeyword
628630
| SyntaxKind.PrivateKeyword
629631
| SyntaxKind.ProtectedKeyword
630632
| SyntaxKind.PublicKeyword
@@ -665,6 +667,7 @@ export type ModifierSyntaxKind =
665667
| SyntaxKind.DefaultKeyword
666668
| SyntaxKind.ExportKeyword
667669
| SyntaxKind.InKeyword
670+
| SyntaxKind.PreferInferKeyword
668671
| SyntaxKind.PrivateKeyword
669672
| SyntaxKind.ProtectedKeyword
670673
| SyntaxKind.PublicKeyword
@@ -858,16 +861,17 @@ export const enum ModifierFlags {
858861
In = 1 << 15, // Contravariance modifier
859862
Out = 1 << 16, // Covariance modifier
860863
Decorator = 1 << 17, // Contains a decorator.
864+
PreferInfer = 1 << 18, // preferinfer modifier on type params to allow partial inference
861865
HasComputedFlags = 1 << 29, // Modifier flags have been computed
862866

863867
AccessibilityModifier = Public | Private | Protected,
864868
// Accessibility modifiers and 'readonly' can be attached to a parameter in a constructor to make it a property.
865869
ParameterPropertyModifier = AccessibilityModifier | Readonly | Override,
866870
NonPublicAccessibilityModifier = Private | Protected,
867871

868-
TypeScriptModifier = Ambient | Public | Private | Protected | Readonly | Abstract | Const | Override | In | Out,
872+
TypeScriptModifier = Ambient | Public | Private | Protected | Readonly | Abstract | Const | Override | In | Out | PreferInfer,
869873
ExportDefault = Export | Default,
870-
All = Export | Ambient | Public | Private | Protected | Static | Readonly | Abstract | Accessor | Async | Default | Const | Deprecated | Override | In | Out | Decorator,
874+
All = ExportDefault | Static | Accessor | Async | Deprecated | Decorator | TypeScriptModifier,
871875
Modifier = All & ~Decorator
872876
}
873877

@@ -1606,6 +1610,7 @@ export type DeclareKeyword = ModifierToken<SyntaxKind.DeclareKeyword>;
16061610
export type DefaultKeyword = ModifierToken<SyntaxKind.DefaultKeyword>;
16071611
export type ExportKeyword = ModifierToken<SyntaxKind.ExportKeyword>;
16081612
export type InKeyword = ModifierToken<SyntaxKind.InKeyword>;
1613+
export type PreferInferKeyword = ModifierToken<SyntaxKind.PreferInferKeyword>;
16091614
export type PrivateKeyword = ModifierToken<SyntaxKind.PrivateKeyword>;
16101615
export type ProtectedKeyword = ModifierToken<SyntaxKind.ProtectedKeyword>;
16111616
export type PublicKeyword = ModifierToken<SyntaxKind.PublicKeyword>;
@@ -1626,6 +1631,7 @@ export type Modifier =
16261631
| DefaultKeyword
16271632
| ExportKeyword
16281633
| InKeyword
1634+
| PreferInferKeyword
16291635
| PrivateKeyword
16301636
| ProtectedKeyword
16311637
| PublicKeyword

src/compiler/utilities.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6238,6 +6238,7 @@ export function modifierToFlag(token: SyntaxKind): ModifierFlags {
62386238
case SyntaxKind.OverrideKeyword: return ModifierFlags.Override;
62396239
case SyntaxKind.InKeyword: return ModifierFlags.In;
62406240
case SyntaxKind.OutKeyword: return ModifierFlags.Out;
6241+
case SyntaxKind.PreferInferKeyword: return ModifierFlags.PreferInfer;
62416242
case SyntaxKind.Decorator: return ModifierFlags.Decorator;
62426243
}
62436244
return ModifierFlags.None;

src/compiler/utilitiesPublic.ts

+1
Original file line numberDiff line numberDiff line change
@@ -1523,6 +1523,7 @@ export function isModifierKind(token: SyntaxKind): token is Modifier["kind"] {
15231523
case SyntaxKind.ExportKeyword:
15241524
case SyntaxKind.InKeyword:
15251525
case SyntaxKind.PublicKeyword:
1526+
case SyntaxKind.PreferInferKeyword:
15261527
case SyntaxKind.PrivateKeyword:
15271528
case SyntaxKind.ProtectedKeyword:
15281529
case SyntaxKind.ReadonlyKeyword:

0 commit comments

Comments
 (0)