Skip to content

Commit 1d27384

Browse files
committed
Merge branch 'main' into textrange-to-original-node
2 parents e85543f + bbfc1aa commit 1d27384

File tree

108 files changed

+1749
-774
lines changed

Some content is hidden

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

108 files changed

+1749
-774
lines changed

.dprint.jsonc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@
5959
// Note: if adding new languages, make sure settings.template.json is updated too.
6060
// Also, if updating typescript, update the one in package.json.
6161
"plugins": [
62-
"https://plugins.dprint.dev/typescript-0.90.5.wasm",
63-
"https://plugins.dprint.dev/json-0.19.2.wasm",
62+
"https://plugins.dprint.dev/typescript-0.91.0.wasm",
63+
"https://plugins.dprint.dev/json-0.19.3.wasm",
6464
"https://plugins.dprint.dev/prettier-0.40.0.json@68c668863ec834d4be0f6f5ccaab415df75336a992aceb7eeeb14fdf096a9e9c"
6565
]
6666
}

package-lock.json

Lines changed: 432 additions & 427 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
],
4141
"devDependencies": {
4242
"@dprint/formatter": "^0.3.0",
43-
"@dprint/typescript": "0.90.5",
43+
"@dprint/typescript": "0.91.0",
4444
"@esfx/canceltoken": "^1.0.0",
4545
"@octokit/rest": "^20.1.1",
4646
"@types/chai": "^4.3.16",
@@ -51,30 +51,30 @@
5151
"@types/node": "latest",
5252
"@types/source-map-support": "^0.5.10",
5353
"@types/which": "^3.0.3",
54-
"@typescript-eslint/eslint-plugin": "^7.8.0",
55-
"@typescript-eslint/parser": "^7.8.0",
56-
"@typescript-eslint/utils": "^7.8.0",
54+
"@typescript-eslint/eslint-plugin": "^7.11.0",
55+
"@typescript-eslint/parser": "^7.11.0",
56+
"@typescript-eslint/utils": "^7.11.0",
5757
"azure-devops-node-api": "^13.0.0",
5858
"c8": "^9.1.0",
5959
"chai": "^4.4.1",
6060
"chalk": "^4.1.2",
6161
"chokidar": "^3.6.0",
6262
"diff": "^5.2.0",
63-
"dprint": "^0.45.1",
64-
"esbuild": "^0.21.1",
63+
"dprint": "^0.46.1",
64+
"esbuild": "^0.21.4",
6565
"eslint": "^8.57.0",
6666
"eslint-formatter-autolinkable-stylish": "^1.3.0",
6767
"eslint-plugin-local": "^4.2.2",
68-
"fast-xml-parser": "^4.3.6",
69-
"glob": "^10.3.12",
68+
"fast-xml-parser": "^4.4.0",
69+
"glob": "^10.4.1",
7070
"hereby": "^1.8.9",
7171
"jsonc-parser": "^3.2.1",
7272
"minimist": "^1.2.8",
7373
"mocha": "^10.4.0",
7474
"mocha-fivemat-progress-reporter": "^0.1.0",
7575
"ms": "^2.1.3",
7676
"node-fetch": "^3.3.2",
77-
"playwright": "^1.44.0",
77+
"playwright": "^1.44.1",
7878
"source-map-support": "^0.5.21",
7979
"tslib": "^2.6.2",
8080
"typescript": "^5.4.5",

src/compiler/checker.ts

Lines changed: 207 additions & 41 deletions
Large diffs are not rendered by default.

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -778,7 +778,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [
778778
showInSimplifiedHelpView: false,
779779
category: Diagnostics.Compiler_Diagnostics,
780780
description: Diagnostics.Disable_full_type_checking_only_critical_parse_and_emit_errors_will_be_reported,
781-
transpileOptionValue: undefined,
781+
transpileOptionValue: true,
782782
defaultValueDescription: false,
783783
affectsSemanticDiagnostics: true,
784784
affectsBuildInfo: true,

src/compiler/debug.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ import {
6464
ModifierFlags,
6565
Node,
6666
NodeArray,
67+
NodeCheckFlags,
6768
NodeFlags,
6869
nodeIsSynthesized,
6970
noop,
@@ -455,6 +456,10 @@ export namespace Debug {
455456
return formatEnum(flags, (ts as any).NodeFlags, /*isFlags*/ true);
456457
}
457458

459+
export function formatNodeCheckFlags(flags: NodeCheckFlags | undefined): string {
460+
return formatEnum(flags, (ts as any).NodeCheckFlags, /*isFlags*/ true);
461+
}
462+
458463
export function formatModifierFlags(flags: ModifierFlags | undefined): string {
459464
return formatEnum(flags, (ts as any).ModifierFlags, /*isFlags*/ true);
460465
}

src/compiler/emitter.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,7 @@ import {
207207
isGeneratedPrivateIdentifier,
208208
isIdentifier,
209209
isImportAttributes,
210+
isImportEqualsDeclaration,
210211
isIncrementalCompilation,
211212
isInJsonFile,
212213
isJSDocLikeText,
@@ -798,6 +799,11 @@ export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFi
798799
emitSkipped = true;
799800
return;
800801
}
802+
803+
if (compilerOptions.noCheck) {
804+
(isSourceFile(sourceFileOrBundle) ? [sourceFileOrBundle] : filter(sourceFileOrBundle.sourceFiles, isSourceFileNotJson)).forEach(markLinkedReferences);
805+
}
806+
801807
// Transform the source files
802808
const transform = transformNodes(resolver, host, factory, compilerOptions, [sourceFileOrBundle], scriptTransformers, /*allowDtsFiles*/ false);
803809

@@ -933,6 +939,14 @@ export function emitFiles(resolver: EmitResolver, host: EmitHost, targetSourceFi
933939
forEachChild(node, collectLinkedAliases);
934940
}
935941

942+
function markLinkedReferences(file: SourceFile) {
943+
ts.forEachChildRecursively(file, n => {
944+
if (isImportEqualsDeclaration(n) && !(ts.getSyntacticModifierFlags(n) & ts.ModifierFlags.Export)) return "skip"; // These are deferred and marked in a chain when referenced
945+
if (ts.isImportDeclaration(n)) return "skip"; // likewise, these are ultimately what get marked by calls on other nodes - we want to skip them
946+
resolver.markLinkedReferences(n);
947+
});
948+
}
949+
936950
function printSourceFileOrBundle(jsFilePath: string, sourceMapFilePath: string | undefined, transform: TransformationResult<SourceFile | Bundle>, printer: Printer, mapOptions: SourceMapOptions) {
937951
const sourceFileOrBundle = transform.transformed[0];
938952
const bundle = sourceFileOrBundle.kind === SyntaxKind.Bundle ? sourceFileOrBundle : undefined;
@@ -1099,10 +1113,11 @@ export const notImplementedResolver: EmitResolver = {
10991113
isValueAliasDeclaration: notImplemented,
11001114
isReferencedAliasDeclaration: notImplemented,
11011115
isTopLevelValueImportEqualsWithEntityName: notImplemented,
1102-
getNodeCheckFlags: notImplemented,
1116+
hasNodeCheckFlag: notImplemented,
11031117
isDeclarationVisible: notImplemented,
11041118
isLateBound: (_node): _node is LateBoundDeclaration => false,
11051119
collectLinkedAliases: notImplemented,
1120+
markLinkedReferences: notImplemented,
11061121
isImplementationOfOverload: notImplemented,
11071122
requiresAddingImplicitUndefined: notImplemented,
11081123
isExpandoFunctionDeclaration: notImplemented,

src/compiler/factory/emitHelpers.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1395,16 +1395,18 @@ export const addDisposableResourceHelper: UnscopedEmitHelper = {
13951395
var __addDisposableResource = (this && this.__addDisposableResource) || function (env, value, async) {
13961396
if (value !== null && value !== void 0) {
13971397
if (typeof value !== "object" && typeof value !== "function") throw new TypeError("Object expected.");
1398-
var dispose;
1398+
var dispose, inner;
13991399
if (async) {
14001400
if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
14011401
dispose = value[Symbol.asyncDispose];
14021402
}
14031403
if (dispose === void 0) {
14041404
if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
14051405
dispose = value[Symbol.dispose];
1406+
if (async) inner = dispose;
14061407
}
14071408
if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
1409+
if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };
14081410
env.stack.push({ value: value, dispose: dispose, async: async });
14091411
}
14101412
else if (async) {

src/compiler/program.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4464,9 +4464,6 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
44644464
if (options.noEmit) {
44654465
createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_with_option_1, "noCheck", "noEmit");
44664466
}
4467-
if (!options.emitDeclarationOnly) {
4468-
createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1, "noCheck", "emitDeclarationOnly");
4469-
}
44704467
}
44714468

44724469
if (

src/compiler/transformers/classFields.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1754,7 +1754,7 @@ export function transformClassFields(context: TransformationContext): (x: Source
17541754
}
17551755
else if (isPrivateIdentifierClassElementDeclaration(member)) {
17561756
containsInstancePrivateElements = true;
1757-
if (resolver.getNodeCheckFlags(member) & NodeCheckFlags.ContainsConstructorReference) {
1757+
if (resolver.hasNodeCheckFlag(member, NodeCheckFlags.ContainsConstructorReference)) {
17581758
facts |= ClassFacts.NeedsClassConstructorReference;
17591759
}
17601760
}
@@ -1888,7 +1888,7 @@ export function transformClassFields(context: TransformationContext): (x: Source
18881888
getClassLexicalEnvironment().classThis = node.emitNode.classThis;
18891889
}
18901890

1891-
const isClassWithConstructorReference = resolver.getNodeCheckFlags(node) & NodeCheckFlags.ContainsConstructorReference;
1891+
const isClassWithConstructorReference = resolver.hasNodeCheckFlag(node, NodeCheckFlags.ContainsConstructorReference);
18921892
const isExport = hasSyntacticModifier(node, ModifierFlags.Export);
18931893
const isDefault = hasSyntacticModifier(node, ModifierFlags.Default);
18941894
let modifiers = visitNodes(node.modifiers, modifierVisitor, isModifier);
@@ -1964,8 +1964,8 @@ export function transformClassFields(context: TransformationContext): (x: Source
19641964
// these statements after the class expression variable statement.
19651965
const isDecoratedClassDeclaration = !!(facts & ClassFacts.ClassWasDecorated);
19661966
const staticPropertiesOrClassStaticBlocks = getStaticPropertiesAndClassStaticBlock(node);
1967-
const classCheckFlags = resolver.getNodeCheckFlags(node);
1968-
const isClassWithConstructorReference = classCheckFlags & NodeCheckFlags.ContainsConstructorReference;
1967+
const isClassWithConstructorReference = resolver.hasNodeCheckFlag(node, NodeCheckFlags.ContainsConstructorReference);
1968+
const requiresBlockScopedVar = resolver.hasNodeCheckFlag(node, NodeCheckFlags.BlockScopedBindingInLoop);
19691969

19701970
let temp: Identifier | undefined;
19711971
function createClassTempVar() {
@@ -1982,7 +1982,6 @@ export function transformClassFields(context: TransformationContext): (x: Source
19821982
return getClassLexicalEnvironment().classConstructor = node.emitNode.classThis;
19831983
}
19841984

1985-
const requiresBlockScopedVar = classCheckFlags & NodeCheckFlags.BlockScopedBindingInLoop;
19861985
const temp = factory.createTempVariable(requiresBlockScopedVar ? addBlockScopedVariable : hoistVariableDeclaration, /*reservedInNestedScopes*/ true);
19871986
getClassLexicalEnvironment().classConstructor = factory.cloneNode(temp);
19881987
return temp;
@@ -2711,7 +2710,7 @@ export function transformClassFields(context: TransformationContext): (x: Source
27112710
const alreadyTransformed = !!cacheAssignment || isAssignmentExpression(innerExpression) && isGeneratedIdentifier(innerExpression.left);
27122711
if (!alreadyTransformed && !inlinable && shouldHoist) {
27132712
const generatedName = factory.getGeneratedNameForNode(name);
2714-
if (resolver.getNodeCheckFlags(name) & NodeCheckFlags.BlockScopedBindingInLoop) {
2713+
if (resolver.hasNodeCheckFlag(name, NodeCheckFlags.BlockScopedBindingInLoop)) {
27152714
addBlockScopedVariable(generatedName);
27162715
}
27172716
else {
@@ -2959,7 +2958,7 @@ export function transformClassFields(context: TransformationContext): (x: Source
29592958
typeof name === "string" ? factory.createUniqueName(name, GeneratedIdentifierFlags.Optimistic, prefix, suffix) :
29602959
factory.createTempVariable(/*recordTempVariable*/ undefined, /*reservedInNestedScopes*/ true, prefix, suffix);
29612960

2962-
if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.BlockScopedBindingInLoop) {
2961+
if (resolver.hasNodeCheckFlag(node, NodeCheckFlags.BlockScopedBindingInLoop)) {
29632962
addBlockScopedVariable(identifier);
29642963
}
29652964
else {
@@ -3294,7 +3293,7 @@ export function transformClassFields(context: TransformationContext): (x: Source
32943293

32953294
function trySubstituteClassAlias(node: Identifier): Expression | undefined {
32963295
if (enabledSubstitutions & ClassPropertySubstitutionFlags.ClassAliases) {
3297-
if (resolver.getNodeCheckFlags(node) & NodeCheckFlags.ConstructorReference) {
3296+
if (resolver.hasNodeCheckFlag(node, NodeCheckFlags.ConstructorReference)) {
32983297
// Due to the emit for class decorators, any reference to the class from inside of the class body
32993298
// must instead be rewritten to point to a temporary variable to avoid issues with the double-bind
33003299
// behavior of class names in ES6.

src/compiler/transformers/es2015.ts

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2867,9 +2867,8 @@ export function transformES2015(context: TransformationContext): (x: SourceFile
28672867
// * Why loop initializer is excluded?
28682868
// - Since we've introduced a fresh name it already will be undefined.
28692869

2870-
const flags = resolver.getNodeCheckFlags(node);
2871-
const isCapturedInFunction = flags & NodeCheckFlags.CapturedBlockScopedBinding;
2872-
const isDeclaredInLoop = flags & NodeCheckFlags.BlockScopedBindingInLoop;
2870+
const isCapturedInFunction = resolver.hasNodeCheckFlag(node, NodeCheckFlags.CapturedBlockScopedBinding);
2871+
const isDeclaredInLoop = resolver.hasNodeCheckFlag(node, NodeCheckFlags.BlockScopedBindingInLoop);
28732872
const emittedAsTopLevel = (hierarchyFacts & HierarchyFacts.TopLevel) !== 0
28742873
|| (isCapturedInFunction
28752874
&& isDeclaredInLoop
@@ -3373,7 +3372,7 @@ export function transformES2015(context: TransformationContext): (x: SourceFile
33733372
}
33743373

33753374
function shouldConvertPartOfIterationStatement(node: Node) {
3376-
return (resolver.getNodeCheckFlags(node) & NodeCheckFlags.ContainsCapturedBlockScopeBinding) !== 0;
3375+
return resolver.hasNodeCheckFlag(node, NodeCheckFlags.ContainsCapturedBlockScopeBinding);
33773376
}
33783377

33793378
function shouldConvertInitializerOfForStatement(node: IterationStatement): node is ForStatementWithConvertibleInitializer {
@@ -3394,7 +3393,7 @@ export function transformES2015(context: TransformationContext): (x: SourceFile
33943393
}
33953394

33963395
function shouldConvertBodyOfIterationStatement(node: IterationStatement): boolean {
3397-
return (resolver.getNodeCheckFlags(node) & NodeCheckFlags.LoopWithCapturedBlockScopedBinding) !== 0;
3396+
return resolver.hasNodeCheckFlag(node, NodeCheckFlags.LoopWithCapturedBlockScopedBinding);
33983397
}
33993398

34003399
/**
@@ -4057,11 +4056,11 @@ export function transformES2015(context: TransformationContext): (x: SourceFile
40574056
}
40584057
else {
40594058
loopParameters.push(factory.createParameterDeclaration(/*modifiers*/ undefined, /*dotDotDotToken*/ undefined, name));
4060-
const checkFlags = resolver.getNodeCheckFlags(decl);
4061-
if (checkFlags & NodeCheckFlags.NeedsLoopOutParameter || hasCapturedBindingsInForHead) {
4059+
const needsOutParam = resolver.hasNodeCheckFlag(decl, NodeCheckFlags.NeedsLoopOutParameter);
4060+
if (needsOutParam || hasCapturedBindingsInForHead) {
40624061
const outParamName = factory.createUniqueName("out_" + idText(name));
40634062
let flags = LoopOutParameterFlags.None;
4064-
if (checkFlags & NodeCheckFlags.NeedsLoopOutParameter) {
4063+
if (needsOutParam) {
40654064
flags |= LoopOutParameterFlags.Body;
40664065
}
40674066
if (isForStatement(container)) {

0 commit comments

Comments
 (0)