- Notifications
You must be signed in to change notification settings - Fork13.2k
Update type-only import semantics to allow type queries#36092
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
Show all changes
27 commits Select commitHold shift + click to select a range
b40284c Change type-only semantics to allow type queries
andrewbranch2ae9edc Don’t error using type-only import in ambient context
andrewbranchdb93eb2 Fix default import
andrewbrancha2548c8 Fix namespace import
andrewbranch8d3f167 Update more baselines
andrewbranchb56ad7d Prevent circular resolution
andrewbranch0547a3d Track const enum expression usage
andrewbranch124dcd6 Update baselines
andrewbranch2dd3690 Perf tuning 1
andrewbrancheefa335 Test commit for perf impact
andrewbranch9a24cba Weave type-only alias declaration finding into alias resolution
andrewbranch875349d Fix namespace import of type-only exported symbols
andrewbranch171e314 type-only exports do not contribute to the module object type
andrewbranch910dd84 Update APIs
andrewbranch2a7c472 Fix enum casing, remove type-only conversion suggestion
andrewbranch11ba11a Short circuit type-only checks in resolveEntityName faster
andrewbranch0c28994 Fix casing in API
andrewbranch40a2c3c Remove unused parameter
andrewbranch1cbfb81 Merge branch 'master' into type-only-2
andrewbranch124d746 Fix error on qualified names in type queries
andrewbranchbbbcbd5 Merge branch 'master' into type-only-2
andrewbranch1044c5c Allow type-only imports in computed property names
andrewbrancha5ca492 Fix computed property names of types and abstract members
andrewbranch8571a8a Remove unused util
andrewbranch8b4c235 Commit missing baselines
andrewbranchbe5f50f Merge branch master into type-only-2
andrewbranch19b3206 Rename “check” functions so as not to overload the word “check”
andrewbranchFile filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
287 changes: 131 additions & 156 deletionssrc/compiler/checker.ts
Large diffs are not rendered by default.
Oops, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
6 changes: 3 additions & 3 deletionssrc/compiler/commandLineParser.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
22 changes: 15 additions & 7 deletionssrc/compiler/diagnosticMessages.json
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
6 changes: 3 additions & 3 deletionssrc/compiler/transformers/ts.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
9 changes: 6 additions & 3 deletionssrc/compiler/types.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
52 changes: 44 additions & 8 deletionssrc/compiler/utilities.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -44,14 +44,6 @@ namespace ts { | ||
| return (symbol.flags & SymbolFlags.Transient) !== 0; | ||
| } | ||
| const stringWriter = createSingleLineStringWriter(); | ||
| function createSingleLineStringWriter(): EmitTextWriter { | ||
| @@ -1779,6 +1771,27 @@ namespace ts { | ||
| } | ||
| } | ||
| export function isPartOfTypeQuery(node: Node) { | ||
| while (node.kind === SyntaxKind.QualifiedName || node.kind === SyntaxKind.Identifier) { | ||
andrewbranch marked this conversation as resolved. Show resolvedHide resolvedUh oh!There was an error while loading.Please reload this page. | ||
| node = node.parent; | ||
| } | ||
| return node.kind === SyntaxKind.TypeQuery; | ||
| } | ||
| export function isPartOfPossiblyValidTypeOrAbstractComputedPropertyName(node: Node) { | ||
| while (node.kind === SyntaxKind.Identifier || node.kind === SyntaxKind.PropertyAccessExpression) { | ||
| node = node.parent; | ||
| } | ||
| if (node.kind !== SyntaxKind.ComputedPropertyName) { | ||
| return false; | ||
| } | ||
| if (hasModifier(node.parent, ModifierFlags.Abstract)) { | ||
| return true; | ||
| } | ||
| const containerKind = node.parent.parent.kind; | ||
| return containerKind === SyntaxKind.InterfaceDeclaration || containerKind === SyntaxKind.TypeLiteral; | ||
| } | ||
| export function isExternalModuleImportEqualsDeclaration(node: Node): node is ImportEqualsDeclaration & { moduleReference: ExternalModuleReference } { | ||
| return node.kind === SyntaxKind.ImportEqualsDeclaration && (<ImportEqualsDeclaration>node).moduleReference.kind === SyntaxKind.ExternalModuleReference; | ||
| } | ||
| @@ -2285,6 +2298,19 @@ namespace ts { | ||
| return node.kind === SyntaxKind.ImportDeclaration && !!node.importClause && !!node.importClause.name; | ||
| } | ||
| export function forEachImportClauseDeclaration<T>(node: ImportClause, action: (declaration: ImportClause | NamespaceImport | ImportSpecifier) => T | undefined): T | undefined { | ||
| if (node.name) { | ||
| const result = action(node); | ||
| if (result) return result; | ||
| } | ||
| if (node.namedBindings) { | ||
| const result = isNamespaceImport(node.namedBindings) | ||
| ? action(node.namedBindings) | ||
| : forEach(node.namedBindings.elements, action); | ||
| if (result) return result; | ||
| } | ||
| } | ||
| export function hasQuestionToken(node: Node) { | ||
| if (node) { | ||
| switch (node.kind) { | ||
| @@ -2734,6 +2760,16 @@ namespace ts { | ||
| node.kind === SyntaxKind.PropertyAssignment && isAliasableExpression((node as PropertyAssignment).initializer); | ||
| } | ||
| export function getTypeOnlyCompatibleAliasDeclarationFromName(node: Identifier): TypeOnlyCompatibleAliasDeclaration | undefined { | ||
| switch (node.parent.kind) { | ||
| case SyntaxKind.ImportClause: | ||
| case SyntaxKind.ImportSpecifier: | ||
| case SyntaxKind.NamespaceImport: | ||
| case SyntaxKind.ExportSpecifier: | ||
| return node.parent as TypeOnlyCompatibleAliasDeclaration; | ||
| } | ||
| } | ||
| function isAliasableExpression(e: Expression) { | ||
| return isEntityNameExpression(e) || isClassExpression(e); | ||
| } | ||
13 changes: 6 additions & 7 deletionssrc/compiler/utilitiesPublic.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
9 changes: 0 additions & 9 deletionssrc/services/symbolDisplay.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
25 changes: 25 additions & 0 deletionstests/baselines/reference/ambient.js
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,25 @@ | ||
| //// [tests/cases/conformance/externalModules/typeOnly/ambient.ts] //// | ||
| //// [a.ts] | ||
| export class A { a!: string } | ||
| //// [b.ts] | ||
| import type { A } from './a'; | ||
| declare class B extends A {} | ||
| declare namespace ns { | ||
| class C extends A {} | ||
| } | ||
| //// [a.js] | ||
| "use strict"; | ||
| exports.__esModule = true; | ||
| var A = /** @class */ (function () { | ||
| function A() { | ||
| } | ||
| return A; | ||
| }()); | ||
| exports.A = A; | ||
| //// [b.js] | ||
| "use strict"; | ||
| exports.__esModule = true; |
21 changes: 21 additions & 0 deletionstests/baselines/reference/ambient.symbols
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| === /a.ts === | ||
| export class A { a!: string } | ||
| >A : Symbol(A, Decl(a.ts, 0, 0)) | ||
| >a : Symbol(A.a, Decl(a.ts, 0, 16)) | ||
| === /b.ts === | ||
| import type { A } from './a'; | ||
| >A : Symbol(A, Decl(b.ts, 0, 13)) | ||
| declare class B extends A {} | ||
| >B : Symbol(B, Decl(b.ts, 0, 29)) | ||
| >A : Symbol(A, Decl(b.ts, 0, 13)) | ||
| declare namespace ns { | ||
| >ns : Symbol(ns, Decl(b.ts, 1, 28)) | ||
| class C extends A {} | ||
| >C : Symbol(C, Decl(b.ts, 2, 22)) | ||
| >A : Symbol(A, Decl(b.ts, 0, 13)) | ||
| } | ||
21 changes: 21 additions & 0 deletionstests/baselines/reference/ambient.types
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,21 @@ | ||
| === /a.ts === | ||
| export class A { a!: string } | ||
| >A : A | ||
| >a : string | ||
| === /b.ts === | ||
| import type { A } from './a'; | ||
| >A : A | ||
| declare class B extends A {} | ||
| >B : B | ||
| >A : A | ||
| declare namespace ns { | ||
| >ns : typeof ns | ||
| class C extends A {} | ||
| >C : C | ||
| >A : A | ||
| } | ||
7 changes: 4 additions & 3 deletionstests/baselines/reference/api/tsserverlibrary.d.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
7 changes: 4 additions & 3 deletionstests/baselines/reference/api/typescript.d.ts
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Oops, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.