Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
7a05f24
feat(53656): Add support for the revised import attributes proposal
a-tarasyuk Aug 25, 2023
6489c39
update diagnostic message
a-tarasyuk Aug 25, 2023
4c8bad1
update baseline
a-tarasyuk Aug 25, 2023
1a0fb93
mark util function as internal
a-tarasyuk Aug 26, 2023
642667e
emit import attributes
a-tarasyuk Aug 26, 2023
fc2093c
update baseline
a-tarasyuk Aug 26, 2023
4a16bf2
add deprecation diagnostic message
a-tarasyuk Aug 29, 2023
dbd7eb5
update baseline
a-tarasyuk Aug 29, 2023
bebf687
update diagnostic message
a-tarasyuk Sep 12, 2023
a387700
remove the nightly-only restriction of resolution mode override
a-tarasyuk Sep 14, 2023
78a01bd
Merge branch 'main' of https://github.com/microsoft/TypeScript into f…
a-tarasyuk Sep 14, 2023
0113dfe
remove unused diagnostic message
a-tarasyuk Sep 14, 2023
14c6226
AssertClause -> ImportAttributes
a-tarasyuk Sep 21, 2023
2569ec3
fix formatting
a-tarasyuk Sep 21, 2023
8482633
fix tests
a-tarasyuk Sep 21, 2023
ba1f979
baseline update
a-tarasyuk Sep 21, 2023
11d556a
remove token param from public API
a-tarasyuk Sep 21, 2023
e0afc4a
fix factory api signatures
a-tarasyuk Sep 21, 2023
3d3939a
update diagnostic messages
a-tarasyuk Sep 22, 2023
bf36343
rid of ImportTypeAttributes interface
a-tarasyuk Sep 22, 2023
a990ddd
remove deprecation diagnostic message
a-tarasyuk Sep 22, 2023
de897d4
update baseline
a-tarasyuk Sep 22, 2023
82e078f
Merge branch 'main' of https://github.com/microsoft/TypeScript into f…
a-tarasyuk Sep 23, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 7 additions & 37 deletions src/compiler/checker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,6 @@ import {
isNamespaceExportDeclaration,
isNamespaceReexportDeclaration,
isNewExpression,
isNightly,
isNodeDescendantOf,
isNonNullAccess,
isNullishCoalesce,
Expand Down Expand Up @@ -7905,7 +7904,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
factory.createStringLiteral("import"),
),
])));
context.tracker.reportImportTypeNodeResolutionModeOverride?.();
}
}
if (!specifier) {
Expand All @@ -7929,7 +7927,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
factory.createStringLiteral(swappedMode === ModuleKind.ESNext ? "import" : "require"),
),
])));
context.tracker.reportImportTypeNodeResolutionModeOverride?.();
}
}

Expand Down Expand Up @@ -39600,26 +39597,15 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
if (node.assertions || node.attributes) {
const override = getResolutionModeOverride(node.assertions?.assertClause || node.attributes?.attributes, grammarErrorOnNode);
const errorNode = node.assertions?.assertClause || node.attributes?.attributes;
if (override && errorNode) {
if (!isNightly()) {
grammarErrorOnNode(
errorNode,
node.assertions?.assertClause
? Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next
: Diagnostics.resolution_mode_attributes_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next,
);
}
if (getEmitModuleResolutionKind(compilerOptions) !== ModuleResolutionKind.Node16 && getEmitModuleResolutionKind(compilerOptions) !== ModuleResolutionKind.NodeNext) {
grammarErrorOnNode(
errorNode,
node.assertions?.assertClause
? Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext
: Diagnostics.resolution_mode_attribute_are_only_supported_when_moduleResolution_is_node16_or_nodenext,
);
}
if (override && errorNode && getEmitModuleResolutionKind(compilerOptions) !== ModuleResolutionKind.Node16 && getEmitModuleResolutionKind(compilerOptions) !== ModuleResolutionKind.NodeNext) {
grammarErrorOnNode(
errorNode,
node.assertions?.assertClause
? Diagnostics.resolution_mode_assertions_are_only_supported_when_moduleResolution_is_node16_or_nodenext
: Diagnostics.resolution_mode_attribute_are_only_supported_when_moduleResolution_is_node16_or_nodenext,
);
}
}

checkTypeReferenceOrImport(node);
}

Expand Down Expand Up @@ -45065,15 +45051,6 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
const validForTypeAttributes = isExclusivelyTypeOnlyImportOrExport(declaration);
const override = getResolutionModeOverride(node, validForTypeAttributes ? grammarErrorOnNode : undefined);
if (validForTypeAttributes && override) {
if (!isNightly()) {
grammarErrorOnNode(
node,
declaration.attributes
? Diagnostics.resolution_mode_attributes_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next
: Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next,
);
}

if (getEmitModuleResolutionKind(compilerOptions) !== ModuleResolutionKind.Node16 && getEmitModuleResolutionKind(compilerOptions) !== ModuleResolutionKind.NodeNext) {
return grammarErrorOnNode(
node,
Expand Down Expand Up @@ -50109,13 +50086,6 @@ class SymbolTrackerImpl implements SymbolTracker {
}
}

reportImportTypeNodeResolutionModeOverride(): void {
if (this.inner?.reportImportTypeNodeResolutionModeOverride) {
this.onDiagnosticReported();
this.inner.reportImportTypeNodeResolutionModeOverride();
}
}

private onDiagnosticReported() {
this.context.reportedDiagnostic = true;
}
Expand Down
8 changes: 0 additions & 8 deletions src/compiler/diagnosticMessages.json
Original file line number Diff line number Diff line change
Expand Up @@ -4132,14 +4132,6 @@
"category": "Error",
"code": 4124
},
"'resolution-mode' assertions are unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.": {
"category": "Error",
"code": 4125
},
"'resolution-mode' attributes are unstable. Use nightly TypeScript to silence this error. Try updating with 'npm install -D typescript@next'.": {
"category": "Error",
"code": 4126
},

"The current host does not support the '{0}' option.": {
"category": "Error",
Expand Down
48 changes: 14 additions & 34 deletions src/compiler/transformers/declarations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ import {
isIdentifier,
isIdentifierANonContextualKeyword,
isIdentifierText,
isImportAttributes,
isImportDeclaration,
isImportEqualsDeclaration,
isIndexSignatureDeclaration,
Expand All @@ -132,7 +131,6 @@ import {
isMethodSignature,
isModifier,
isModuleDeclaration,
isNightly,
isOmittedExpression,
isPrivateIdentifier,
isPropertyAccessExpression,
Expand Down Expand Up @@ -316,7 +314,6 @@ export function transformDeclarations(context: TransformationContext) {
trackExternalModuleSymbolOfImportTypeNode,
reportNonlocalAugmentation,
reportNonSerializableProperty,
reportImportTypeNodeResolutionModeOverride,
};
let errorNameNode: DeclarationName | undefined;
let errorFallbackNode: Declaration | undefined;
Expand Down Expand Up @@ -460,12 +457,6 @@ export function transformDeclarations(context: TransformationContext) {
}
}

function reportImportTypeNodeResolutionModeOverride() {
if (!isNightly() && (errorNameNode || errorFallbackNode)) {
context.addDiagnostic(createDiagnosticForNode((errorNameNode || errorFallbackNode)!, Diagnostics.The_type_of_this_expression_cannot_be_named_without_a_resolution_mode_assertion_which_is_an_unstable_feature_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next));
}
}

function transformDeclarationsForJS(sourceFile: SourceFile, bundled?: boolean) {
const oldDiag = getSymbolAccessibilityDiagnostic;
getSymbolAccessibilityDiagnostic = s => (s.errorNode && canProduceDiagnostics(s.errorNode) ? createGetSymbolAccessibilityDiagnosticForNode(s.errorNode)(s) : ({
Expand Down Expand Up @@ -986,8 +977,8 @@ export function transformDeclarations(context: TransformationContext) {
decl.modifiers,
decl.importClause,
rewriteModuleSpecifier(decl, decl.moduleSpecifier),
getResolutionModeOverrideInNightly(decl.assertClause),
getResolutionModeOverrideInNightly(decl.attributes),
tryGetResolutionModeOverride(decl.assertClause),
tryGetResolutionModeOverride(decl.attributes),
);
}
// The `importClause` visibility corresponds to the default's visibility.
Expand All @@ -1004,8 +995,8 @@ export function transformDeclarations(context: TransformationContext) {
/*namedBindings*/ undefined,
),
rewriteModuleSpecifier(decl, decl.moduleSpecifier),
getResolutionModeOverrideInNightly(decl.assertClause),
getResolutionModeOverrideInNightly(decl.attributes),
tryGetResolutionModeOverride(decl.assertClause),
tryGetResolutionModeOverride(decl.attributes),
);
}
if (decl.importClause.namedBindings.kind === SyntaxKind.NamespaceImport) {
Expand All @@ -1021,8 +1012,8 @@ export function transformDeclarations(context: TransformationContext) {
namedBindings,
),
rewriteModuleSpecifier(decl, decl.moduleSpecifier),
getResolutionModeOverrideInNightly(decl.assertClause),
getResolutionModeOverrideInNightly(decl.attributes),
tryGetResolutionModeOverride(decl.assertClause),
tryGetResolutionModeOverride(decl.attributes),
) : undefined;
}
// Named imports (optionally with visible default)
Expand All @@ -1038,8 +1029,8 @@ export function transformDeclarations(context: TransformationContext) {
bindingList && bindingList.length ? factory.updateNamedImports(decl.importClause.namedBindings, bindingList) : undefined,
),
rewriteModuleSpecifier(decl, decl.moduleSpecifier),
getResolutionModeOverrideInNightly(decl.assertClause),
getResolutionModeOverrideInNightly(decl.attributes),
tryGetResolutionModeOverride(decl.assertClause),
tryGetResolutionModeOverride(decl.attributes),
);
}
// Augmentation of export depends on import
Expand All @@ -1049,27 +1040,16 @@ export function transformDeclarations(context: TransformationContext) {
decl.modifiers,
/*importClause*/ undefined,
rewriteModuleSpecifier(decl, decl.moduleSpecifier),
getResolutionModeOverrideInNightly(decl.assertClause),
getResolutionModeOverrideInNightly(decl.attributes),
tryGetResolutionModeOverride(decl.assertClause),
tryGetResolutionModeOverride(decl.attributes),
);
}
// Nothing visible
}

function getResolutionModeOverrideInNightly<T extends AssertClause | ImportAttributes>(node: T | undefined) {
function tryGetResolutionModeOverride<T extends AssertClause | ImportAttributes>(node: T | undefined) {
const mode = getResolutionModeOverride(node);
if (node && mode !== undefined) {
if (!isNightly()) {
context.addDiagnostic(createDiagnosticForNode(
node,
isImportAttributes(node)
? Diagnostics.resolution_mode_attributes_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next
: Diagnostics.resolution_mode_assertions_are_unstable_Use_nightly_TypeScript_to_silence_this_error_Try_updating_with_npm_install_D_typescript_next,
));
}
return node;
}
return undefined;
return node && mode !== undefined ? node : undefined;
}

function transformAndReplaceLatePaintedStatements(statements: NodeArray<Statement>): NodeArray<Statement> {
Expand Down Expand Up @@ -1403,8 +1383,8 @@ export function transformDeclarations(context: TransformationContext) {
input.isTypeOnly,
input.exportClause,
rewriteModuleSpecifier(input, input.moduleSpecifier),
getResolutionModeOverrideInNightly(input.assertClause) ? input.assertClause : undefined,
getResolutionModeOverrideInNightly(input.attributes) ? input.attributes : undefined,
tryGetResolutionModeOverride(input.assertClause),
tryGetResolutionModeOverride(input.attributes),
);
}
case SyntaxKind.ExportAssignment: {
Expand Down
1 change: 0 additions & 1 deletion src/compiler/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9673,7 +9673,6 @@ export interface SymbolTracker {
trackExternalModuleSymbolOfImportTypeNode?(symbol: Symbol): void;
reportNonlocalAugmentation?(containingFile: SourceFile, parentSymbol: Symbol, augmentingSymbol: Symbol): void;
reportNonSerializableProperty?(propertyName: string): void;
reportImportTypeNodeResolutionModeOverride?(): void;
}

export interface TextSpan {
Expand Down
6 changes: 0 additions & 6 deletions src/compiler/utilities.ts
Original file line number Diff line number Diff line change
Expand Up @@ -556,7 +556,6 @@ import {
VariableDeclarationList,
VariableLikeDeclaration,
VariableStatement,
version,
WhileStatement,
WithStatement,
WrappedExpression,
Expand Down Expand Up @@ -6006,11 +6005,6 @@ export function getIndentSize() {
return indentStrings[1].length;
}

/** @internal */
export function isNightly() {
return stringContains(version, "-dev") || stringContains(version, "-insiders");
}
Comment thread
andrewbranch marked this conversation as resolved.

/** @internal */
export function createTextWriter(newLine: string): EmitTextWriter {
// Why var? It avoids TDZ checks in the runtime which can be costly.
Expand Down