Skip to content

Commit fd18728

Browse files
committed
fix circular imports
1 parent c2af0ca commit fd18728

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+1181
-1041
lines changed

src/compiler/checker.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { Diagnostics } from "./diagnosticInformationMap.generated";
1515
import { createPrinter } from "./emitter";
1616
import { createBinaryExpressionTrampoline } from "./factory/binaryExpressionStateMachine";
1717
import { addSyntheticLeadingComment, setCommentRange, setEmitFlags, setSyntheticLeadingComments } from "./factory/emitNode";
18-
import { factory, setOriginalNode } from "./factory/nodeFactory";
18+
import { factory } from "./factory/nodeFactory";
1919
import {
2020
isArrayBindingPattern, isArrayLiteralExpression, isArrowFunction, isBinaryExpression, isBindingElement, isBlock,
2121
isCallExpression, isCallSignatureDeclaration, isCatchClause, isClassDeclaration, isClassExpression, isClassStaticBlockDeclaration,
@@ -38,10 +38,9 @@ import {
3838
isTypeQueryNode, isTypeReferenceNode, isVariableDeclaration, isVariableDeclarationList, isVariableStatement,
3939
} from "./factory/nodeTests";
4040
import {
41-
canHaveIllegalDecorators, canHaveIllegalModifiers, createEmptyExports,
42-
findUseStrictPrologue, getJSDocTypeAssertionType, isCommaSequence, isJSDocTypeAssertion, skipOuterExpressions,
41+
canHaveIllegalModifiers, createEmptyExports, getJSDocTypeAssertionType, isCommaSequence,
4342
} from "./factory/utilities";
44-
import { canHaveDecorators, canHaveModifiers, setTextRange } from "./factory/utilitiesPublic";
43+
import { canHaveDecorators, canHaveModifiers, setOriginalNode, setTextRange } from "./factory/utilitiesPublic";
4544
import { getTypesPackageName, mangleScopedPackageName } from "./moduleNameResolver";
4645
import { countPathComponents, getModuleSpecifiers } from "./moduleSpecifiers";
4746
import { forEachChild, forEachChildRecursively, isExternalModule, parseIsolatedEntityName, parseNodeFactory } from "./parser";
@@ -111,12 +110,12 @@ import {
111110
Visitor, VisitResult, VoidExpression, WhileStatement, WideningContext, WithStatement, YieldExpression,
112111
} from "./types";
113112
import {
114-
addRelatedInfo, arrayIsHomogeneous, AssignmentKind, canHaveExportModifier, chainDiagnosticMessages, compareDiagnostics,
113+
addRelatedInfo, arrayIsHomogeneous, AssignmentKind, canHaveExportModifier, canHaveIllegalDecorators, chainDiagnosticMessages, compareDiagnostics,
115114
concatenateDiagnosticMessageChains, containsParseError, copyEntries, createCompilerDiagnostic, createDiagnosticCollection,
116115
createDiagnosticForFileFromMessageChain, createDiagnosticForNode, createDiagnosticForNodeArray, createDiagnosticForNodeFromMessageChain,
117116
createDiagnosticMessageChainFromDiagnostic, createFileDiagnostic, createPropertyNameNodeForIdentifierOrLiteral, createSymbolTable,
118117
createTextWriter, declarationNameToString, defaultMaximumTruncationLength, entityNameToString, escapeString, exportAssignmentIsAlias,
119-
expressionResultIsUnused, externalHelpersModuleNameText, forEachEnclosingBlockScopeContainer, forEachEntry, forEachImportClauseDeclaration,
118+
expressionResultIsUnused, externalHelpersModuleNameText, findUseStrictPrologue, forEachEnclosingBlockScopeContainer, forEachEntry, forEachImportClauseDeclaration,
120119
forEachKey, forEachReturnStatement, forEachYieldExpression, formatMessage, FunctionFlags, getAliasDeclarationFromName,
121120
getAllAccessorDeclarations, getAllowSyntheticDefaultImports, getAncestor, getAssignedExpandoInitializer, getAssignmentDeclarationKind,
122121
getAssignmentDeclarationPropertyAccessKind, getAssignmentTargetKind, getCheckFlags, getClassExtendsHeritageElement,
@@ -150,7 +149,7 @@ import {
150149
isExternalModuleAugmentation, isExternalModuleImportEqualsDeclaration, isExternalOrCommonJsModule, isFunctionExpressionOrArrowFunction,
151150
isGlobalScopeAugmentation, isIdentifierTypePredicate, isIdentifierTypeReference, isImportCall, isInExpressionContext,
152151
isInfinityOrNaNString, isInJSDoc, isInJSFile, isInJsonFile, isInternalModuleImportEqualsDeclaration, isInTopLevelContext,
153-
isIntrinsicJsxName, isJSDocConstructSignature, isJSDocIndexSignature, isJSDocTypeAlias, isJsonSourceFile, isJSXTagName, isKnownSymbol,
152+
isIntrinsicJsxName, isJSDocConstructSignature, isJSDocIndexSignature, isJSDocTypeAlias, isJSDocTypeAssertion, isJsonSourceFile, isJSXTagName, isKnownSymbol,
154153
isLateVisibilityPaintedStatement, isLet, isLiteralComputedPropertyDeclarationName, isLiteralImportTypeNode, isModuleExportsAccessExpression,
155154
isModuleIdentifier, isModuleWithStringLiteralName, isNamespaceReexportDeclaration, isNightly, isNodeDescendantOf, isNumericLiteralName,
156155
isObjectLiteralMethod, isObjectLiteralOrClassExpressionMethodOrAccessor, isOptionalJSDocPropertyLikeTag, isParameterDeclaration,
@@ -167,7 +166,7 @@ import {
167166
nodeStartsNewLexicalEnvironment, noTruncationMaximumTruncationLength, objectAllocator, outFile, parameterIsThisKeyword,
168167
parsePseudoBigInt, pseudoBigIntToString, rangeOfNode, rangeOfTypeParameters, removeExtension, resolutionExtensionIsTSOrJson,
169168
resolvingEmptyArray, setNodeFlags, setParent, setTextRangePosEnd, setValueDeclaration, shouldPreserveConstEnums,
170-
signatureHasLiteralTypes, signatureHasRestParameter, skipParentheses, skipTypeChecking,
169+
signatureHasLiteralTypes, signatureHasRestParameter, skipOuterExpressions, skipParentheses, skipTypeChecking,
171170
stripQuotes, tryExtractTSExtension, tryGetClassImplementingOrExtendingExpressionWithTypeArguments, tryGetExtensionFromPath,
172171
tryGetModuleSpecifierFromDeclaration, tryGetPropertyAccessOrIdentifierToString, usingSingleLineStringWriter,
173172
walkUpParenthesizedExpressions, walkUpParenthesizedTypes, walkUpParenthesizedTypesAndGetParentAndChild,

src/compiler/emitter.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import {
1616
getCommentRange, getConstantValue, getEmitHelpers, getSnippetElement, getSourceMapRange, getStartsOnNewLine,
1717
getSyntheticLeadingComments, getSyntheticTrailingComments, getTypeNode,
1818
} from "./factory/emitNode";
19-
import { createInputFilesWithFileTexts, factory, setOriginalNode } from "./factory/nodeFactory";
19+
import { createInputFilesWithFileTexts, factory } from "./factory/nodeFactory";
2020
import {
2121
isArrowFunction, isBinaryExpression, isBlock, isBundle, isDecorator, isEmptyStatement, isExportAssignment, isExportSpecifier,
2222
isIdentifier, isJsxClosingElement, isJsxOpeningElement, isModuleDeclaration, isNumericLiteral, isParenthesizedExpression,
@@ -27,7 +27,7 @@ import {
2727
formatGeneratedName, formatGeneratedNamePart, getExternalHelpersModuleName,
2828
getNodeForGeneratedName, hasRecordedExternalHelpers,
2929
} from "./factory/utilities";
30-
import { setTextRange } from "./factory/utilitiesPublic";
30+
import { setOriginalNode, setTextRange } from "./factory/utilitiesPublic";
3131
import { forEachChild, isDeclarationFileName, isJSDocLikeText } from "./parser";
3232
import {
3333
combinePaths, comparePaths, directorySeparator, ensurePathIsNonModuleName, ensureTrailingDirectorySeparator,

src/compiler/factory/emitHelpers.ts

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,17 @@
11
import { arrayToMap, compareValues, memoize } from "../core";
22
import { Comparison } from "../corePublic";
33
import { Debug } from "../debug";
4-
import { PrivateIdentifierKind } from "../transformers/classFields";
54
import {
65
__String, ArrayLiteralExpression, BindingOrAssignmentElement, Block, EmitFlags, EmitHelper,
76
EmitHelperUniqueNameCallback, EmitNode, EntityName, Expression, FunctionExpression, GeneratedIdentifierFlags,
8-
Identifier, ScriptTarget, SyntaxKind, TextRange, TransformationContext, UnscopedEmitHelper
7+
Identifier, ScriptTarget, SyntaxKind, TextRange, TransformationContext, UnscopedEmitHelper, PrivateIdentifierKind, EmitHelperFactory
98
} from "../types";
109
import { getEmitFlags, getEmitScriptTarget } from "../utilities";
1110
import { setEmitFlags } from "./emitNode";
1211
import { isCallExpression, isComputedPropertyName, isIdentifier } from "./nodeTests";
1312
import { createExpressionFromEntityName, getPropertyNameOfBindingOrAssignmentElement } from "./utilities";
1413
import { setTextRange } from "./utilitiesPublic";
1514

16-
/** @internal */
17-
export interface EmitHelperFactory {
18-
getUnscopedHelperName(name: string): Identifier;
19-
// TypeScript Helpers
20-
createDecorateHelper(decoratorExpressions: readonly Expression[], target: Expression, memberName?: Expression, descriptor?: Expression): Expression;
21-
createMetadataHelper(metadataKey: string, metadataValue: Expression): Expression;
22-
createParamHelper(expression: Expression, parameterOffset: number): Expression;
23-
// ES2018 Helpers
24-
createAssignHelper(attributesSegments: readonly Expression[]): Expression;
25-
createAwaitHelper(expression: Expression): Expression;
26-
createAsyncGeneratorHelper(generatorFunc: FunctionExpression, hasLexicalThis: boolean): Expression;
27-
createAsyncDelegatorHelper(expression: Expression): Expression;
28-
createAsyncValuesHelper(expression: Expression): Expression;
29-
// ES2018 Destructuring Helpers
30-
createRestHelper(value: Expression, elements: readonly BindingOrAssignmentElement[], computedTempVariables: readonly Expression[] | undefined, location: TextRange): Expression;
31-
// ES2017 Helpers
32-
createAwaiterHelper(hasLexicalThis: boolean, hasLexicalArguments: boolean, promiseConstructor: EntityName | Expression | undefined, body: Block): Expression;
33-
// ES2015 Helpers
34-
createExtendsHelper(name: Identifier): Expression;
35-
createTemplateObjectHelper(cooked: ArrayLiteralExpression, raw: ArrayLiteralExpression): Expression;
36-
createSpreadArrayHelper(to: Expression, from: Expression, packFrom: boolean): Expression;
37-
// ES2015 Destructuring Helpers
38-
createValuesHelper(expression: Expression): Expression;
39-
createReadHelper(iteratorRecord: Expression, count: number | undefined): Expression;
40-
// ES2015 Generator Helpers
41-
createGeneratorHelper(body: FunctionExpression): Expression;
42-
// ES Module Helpers
43-
createCreateBindingHelper(module: Expression, inputName: Expression, outputName: Expression | undefined): Expression;
44-
createImportStarHelper(expression: Expression): Expression;
45-
createImportStarCallbackHelper(): Expression;
46-
createImportDefaultHelper(expression: Expression): Expression;
47-
createExportStarHelper(moduleExpression: Expression, exportsExpression?: Expression): Expression;
48-
// Class Fields Helpers
49-
createClassPrivateFieldGetHelper(receiver: Expression, state: Identifier, kind: PrivateIdentifierKind, f: Identifier | undefined): Expression;
50-
createClassPrivateFieldSetHelper(receiver: Expression, state: Identifier, value: Expression, kind: PrivateIdentifierKind, f: Identifier | undefined): Expression;
51-
createClassPrivateFieldInHelper(state: Identifier, receiver: Expression): Expression;
52-
}
53-
5415
/** @internal */
5516
export function createEmitHelperFactory(context: TransformationContext): EmitHelperFactory {
5617
const factory = context.factory;

src/compiler/factory/nodeConverters.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,11 @@ import {
77
} from "../types";
88
import { isBindingPattern, isExpression, isObjectLiteralElementLike } from "../utilitiesPublic";
99
import { getStartsOnNewLine, setStartsOnNewLine } from "./emitNode";
10-
import { setOriginalNode } from "./nodeFactory";
1110
import {
1211
isArrayBindingPattern, isArrayLiteralExpression, isBindingElement, isBlock,
1312
isIdentifier, isObjectBindingPattern, isObjectLiteralExpression
1413
} from "./nodeTests";
15-
import { setTextRange } from "./utilitiesPublic";
14+
import { setTextRange, setOriginalNode } from "./utilitiesPublic";
1615

1716
/** @internal */
1817
export function createNodeConverters(factory: NodeFactory): NodeConverters {

src/compiler/factory/nodeFactory.ts

Lines changed: 8 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { getNodeId } from "../checkerUtilities";
22
import {
3-
addRange, append, appendIfUnique, cast, emptyArray, every, forEach, hasProperty, isArray, isString,
3+
addRange, append, cast, emptyArray, every, forEach, hasProperty, isArray, isString,
44
lastOrUndefined, map, memoize, memoizeOne, reduceLeft, returnTrue, sameFlatMap, singleOrUndefined, some, startsWith,
55
} from "../core";
66
import { Push } from "../corePublic";
@@ -50,18 +50,19 @@ import {
5050
SourceMapSource, SpreadAssignment, SpreadElement, Statement, StringLiteral, StringLiteralLike, SuperExpression, SwitchStatement,
5151
SyntaxKind, SyntaxList, SyntheticExpression, SyntheticReferenceExpression, TaggedTemplateExpression, TemplateExpression, TemplateHead,
5252
TemplateLiteral, TemplateLiteralLikeNode, TemplateLiteralToken, TemplateLiteralTypeNode, TemplateLiteralTypeSpan, TemplateMiddle,
53-
TemplateSpan, TemplateTail, TextRange, ThisExpression, ThisTypeNode, ThrowStatement, Token, TokenFlags, TransformFlags, TrueLiteral,
53+
TemplateSpan, TemplateTail, ThisExpression, ThisTypeNode, ThrowStatement, Token, TokenFlags, TransformFlags, TrueLiteral,
5454
TryStatement, TupleTypeNode, Type, TypeAliasDeclaration, TypeAssertion, TypeElement, TypeLiteralNode, TypeNode, TypeOfExpression,
5555
TypeOfTag, TypeOperatorNode, TypeParameterDeclaration, TypePredicateNode, TypeQueryNode, TypeReferenceNode, UnionOrIntersectionTypeNode,
5656
UnionTypeNode, UnparsedNode, UnparsedPrepend, UnparsedPrologue, UnparsedSource, UnparsedSourceText, UnparsedSyntheticReference,
5757
UnparsedTextLike, UnscopedEmitHelper, VariableDeclaration, VariableDeclarationList, VariableStatement, VisitResult, VoidExpression,
5858
WhileStatement, WithStatement, YieldExpression,
5959
} from "../types";
6060
import {
61+
findUseStrictPrologue,
6162
getEmitFlags, getTextOfIdentifierOrLiteral, hasInvalidEscape, hasStaticModifier, hasSyntacticModifier,
62-
isCustomPrologue, isHoistedFunction, isHoistedVariableStatement, isLogicalOrCoalescingAssignmentOperator, isPrologueDirective,
63+
isCustomPrologue, isHoistedFunction, isHoistedVariableStatement, isLogicalOrCoalescingAssignmentOperator, isOuterExpression, isPrologueDirective,
6364
isSuperProperty, isThisIdentifier, modifiersToFlags, Mutable, nodeIsSynthesized, objectAllocator, pseudoBigIntToString,
64-
setEachParent, setParent, setTextRangePosEnd, setTextRangePosWidth, skipParentheses,
65+
setEachParent, setParent, setTextRangePosEnd, setTextRangePosWidth, skipOuterExpressions, skipParentheses,
6566
} from "../utilities";
6667
import {
6768
escapeLeadingUnderscores, getNameOfDeclaration, idText, isAssignmentPattern, isCallChain, isElementAccessChain,
@@ -87,10 +88,10 @@ import {
8788
} from "./nodeTests";
8889
import { createParenthesizerRules, nullParenthesizerRules } from "./parenthesizerRules";
8990
import {
90-
findUseStrictPrologue, formatGeneratedName, getElementsOfBindingOrAssignmentPattern, getJSDocTypeAliasName,
91-
getTargetOfBindingOrAssignmentElement, isLocalName, isOuterExpression, skipOuterExpressions, startOnNewLine,
91+
formatGeneratedName, getElementsOfBindingOrAssignmentPattern, getJSDocTypeAliasName,
92+
getTargetOfBindingOrAssignmentElement, isLocalName, startOnNewLine,
9293
} from "./utilities";
93-
import { canHaveModifiers, setTextRange } from "./utilitiesPublic";
94+
import { canHaveModifiers, setTextRange, setOriginalNode } from "./utilitiesPublic";
9495

9596
let nextAutoGenerateId = 0;
9697

@@ -6980,54 +6981,3 @@ let SourceMapSource: new (fileName: string, text: string, skipTrivia?: (pos: num
69806981
export function createSourceMapSource(fileName: string, text: string, skipTrivia?: (pos: number) => number): SourceMapSource {
69816982
return new (SourceMapSource || (SourceMapSource = objectAllocator.getSourceMapSourceConstructor()))(fileName, text, skipTrivia);
69826983
}
6983-
6984-
// Utilities
6985-
6986-
export function setOriginalNode<T extends Node>(node: T, original: Node | undefined): T {
6987-
node.original = original;
6988-
if (original) {
6989-
const emitNode = original.emitNode;
6990-
if (emitNode) node.emitNode = mergeEmitNode(emitNode, node.emitNode);
6991-
}
6992-
return node;
6993-
}
6994-
6995-
function mergeEmitNode(sourceEmitNode: EmitNode, destEmitNode: EmitNode | undefined) {
6996-
const {
6997-
flags,
6998-
leadingComments,
6999-
trailingComments,
7000-
commentRange,
7001-
sourceMapRange,
7002-
tokenSourceMapRanges,
7003-
constantValue,
7004-
helpers,
7005-
startsOnNewLine,
7006-
snippetElement,
7007-
} = sourceEmitNode;
7008-
if (!destEmitNode) destEmitNode = {} as EmitNode;
7009-
// We are using `.slice()` here in case `destEmitNode.leadingComments` is pushed to later.
7010-
if (leadingComments) destEmitNode.leadingComments = addRange(leadingComments.slice(), destEmitNode.leadingComments);
7011-
if (trailingComments) destEmitNode.trailingComments = addRange(trailingComments.slice(), destEmitNode.trailingComments);
7012-
if (flags) destEmitNode.flags = flags & ~EmitFlags.Immutable;
7013-
if (commentRange) destEmitNode.commentRange = commentRange;
7014-
if (sourceMapRange) destEmitNode.sourceMapRange = sourceMapRange;
7015-
if (tokenSourceMapRanges) destEmitNode.tokenSourceMapRanges = mergeTokenSourceMapRanges(tokenSourceMapRanges, destEmitNode.tokenSourceMapRanges!);
7016-
if (constantValue !== undefined) destEmitNode.constantValue = constantValue;
7017-
if (helpers) {
7018-
for (const helper of helpers) {
7019-
destEmitNode.helpers = appendIfUnique(destEmitNode.helpers, helper);
7020-
}
7021-
}
7022-
if (startsOnNewLine !== undefined) destEmitNode.startsOnNewLine = startsOnNewLine;
7023-
if (snippetElement !== undefined) destEmitNode.snippetElement = snippetElement;
7024-
return destEmitNode;
7025-
}
7026-
7027-
function mergeTokenSourceMapRanges(sourceRanges: (TextRange | undefined)[], destRanges: (TextRange | undefined)[]) {
7028-
if (!destRanges) destRanges = [];
7029-
for (const key in sourceRanges) {
7030-
destRanges[key] = sourceRanges[key];
7031-
}
7032-
return destRanges;
7033-
}

0 commit comments

Comments
 (0)