Skip to content

Commit d3e6165

Browse files
committed
Merge branch 'main' into feat/esnext-float16
2 parents aa66212 + d85767a commit d3e6165

File tree

122 files changed

+1916
-708
lines changed

Some content is hidden

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

122 files changed

+1916
-708
lines changed

src/compiler/checker.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3458,10 +3458,10 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
34583458
if (containerKind === SyntaxKind.InterfaceDeclaration && heritageKind === SyntaxKind.ExtendsKeyword) {
34593459
error(errorLocation, Diagnostics.An_interface_cannot_extend_a_primitive_type_like_0_It_can_only_extend_other_named_object_types, unescapeLeadingUnderscores(name));
34603460
}
3461-
else if (containerKind === SyntaxKind.ClassDeclaration && heritageKind === SyntaxKind.ExtendsKeyword) {
3461+
else if (isClassLike(grandparent.parent) && heritageKind === SyntaxKind.ExtendsKeyword) {
34623462
error(errorLocation, Diagnostics.A_class_cannot_extend_a_primitive_type_like_0_Classes_can_only_extend_constructable_values, unescapeLeadingUnderscores(name));
34633463
}
3464-
else if (containerKind === SyntaxKind.ClassDeclaration && heritageKind === SyntaxKind.ImplementsKeyword) {
3464+
else if (isClassLike(grandparent.parent) && heritageKind === SyntaxKind.ImplementsKeyword) {
34653465
error(errorLocation, Diagnostics.A_class_cannot_implement_a_primitive_type_like_0_It_can_only_implement_other_named_object_types, unescapeLeadingUnderscores(name));
34663466
}
34673467
}
@@ -6193,8 +6193,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
61936193
enterNewScope(context, node) {
61946194
if (isFunctionLike(node) || isJSDocSignature(node)) {
61956195
const signature = getSignatureFromDeclaration(node);
6196-
const expandedParams = getExpandedParameters(signature, /*skipUnionExpanding*/ true)[0];
6197-
return enterNewScope(context as NodeBuilderContext, node, expandedParams, signature.typeParameters);
6196+
return enterNewScope(context as NodeBuilderContext, node, signature.parameters, signature.typeParameters);
61986197
}
61996198
else {
62006199
const typeParameters = isConditionalTypeNode(node) ? getInferTypeParameters(node) :

src/compiler/expressionToTypeNode.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -969,14 +969,16 @@ export function createSyntacticTypeNodeBuilder(
969969
return failed;
970970
}
971971
function typeFromFunctionLikeExpression(fnNode: FunctionExpression | ArrowFunction, context: SyntacticTypeNodeBuilderContext) {
972-
// Disable any inference fallback since we won't actually use the resulting type and we don't want to generate errors
973-
const oldNoInferenceFallback = context.noInferenceFallback;
974-
context.noInferenceFallback = true;
975-
createReturnFromSignature(fnNode, /*symbol*/ undefined, context);
976-
reuseTypeParameters(fnNode.typeParameters, context);
977-
fnNode.parameters.map(p => ensureParameter(p, context));
978-
context.noInferenceFallback = oldNoInferenceFallback;
979-
return notImplemented;
972+
const returnType = createReturnFromSignature(fnNode, /*symbol*/ undefined, context);
973+
const typeParameters = reuseTypeParameters(fnNode.typeParameters, context);
974+
const parameters = fnNode.parameters.map(p => ensureParameter(p, context));
975+
return syntacticResult(
976+
factory.createFunctionTypeNode(
977+
typeParameters,
978+
parameters,
979+
returnType,
980+
),
981+
);
980982
}
981983
function canGetTypeFromArrayLiteral(arrayLiteral: ArrayLiteralExpression, context: SyntacticTypeNodeBuilderContext, isConstContext: boolean) {
982984
if (!isConstContext) {

src/harness/client.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -801,7 +801,6 @@ export class SessionClient implements LanguageService {
801801
}
802802

803803
mapCode: typeof notImplemented = notImplemented;
804-
getImports: typeof notImplemented = notImplemented;
805804

806805
private createFileLocationOrRangeRequestArgs(positionOrRange: number | TextRange, fileName: string): protocol.FileLocationOrRangeRequestArgs {
807806
return typeof positionOrRange === "number"

src/harness/fourslashImpl.ts

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -4652,28 +4652,6 @@ ${changes.join("\n// ---\n")}
46524652
${after}`;
46534653
this.baseline("mapCode", baseline, ".mapCode.ts");
46544654
}
4655-
4656-
public verifyGetImports(fileName: string, expectedImports: string[]): void {
4657-
const actualImports = this.languageService.getImports(fileName);
4658-
if (actualImports.length !== expectedImports.length) {
4659-
throw new Error(`Expected ${expectedImports.length} imports for ${fileName}, got ${actualImports.length}
4660-
Expected:
4661-
${expectedImports}
4662-
Actual:
4663-
${actualImports}
4664-
`);
4665-
}
4666-
for (let i = 0; i < expectedImports.length; i++) {
4667-
if (actualImports[i] !== expectedImports[i]) {
4668-
throw new Error(`Expected at ${fileName} index ${i}: ${expectedImports[i]}, got ${actualImports[i]}
4669-
Expected:
4670-
${expectedImports}
4671-
Actual:
4672-
${actualImports}
4673-
`);
4674-
}
4675-
}
4676-
}
46774655
}
46784656

46794657
function updateTextRangeForTextChanges({ pos, end }: ts.TextRange, textChanges: readonly ts.TextChange[]): ts.TextRange {

src/harness/fourslashInterfaceImpl.ts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -257,10 +257,6 @@ export class VerifyNegatable {
257257
public baselineMapCode(ranges: FourSlash.Range[][], changes: string[] = []): void {
258258
this.state.baselineMapCode(ranges, changes);
259259
}
260-
261-
public getImports(fileName: string, imports: string[]): void {
262-
return this.state.verifyGetImports(fileName, imports);
263-
}
264260
}
265261

266262
export interface CompletionsResult {
@@ -2051,8 +2047,3 @@ export interface RenameOptions {
20512047
readonly providePrefixAndSuffixTextForRename?: boolean;
20522048
readonly quotePreference?: "auto" | "double" | "single";
20532049
}
2054-
2055-
export interface VerifyGetImportsOptions {
2056-
fileName: string;
2057-
imports: string[];
2058-
}

src/server/protocol.ts

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ export const enum CommandTypes {
202202
ProvideInlayHints = "provideInlayHints",
203203
WatchChange = "watchChange",
204204
MapCode = "mapCode",
205+
/** @internal */
205206
CopilotRelated = "copilotRelated",
206207
}
207208

@@ -2417,18 +2418,6 @@ export interface MapCodeResponse extends Response {
24172418
body: readonly FileCodeEdits[];
24182419
}
24192420

2420-
export interface CopilotRelatedRequest extends FileRequest {
2421-
command: CommandTypes.CopilotRelated;
2422-
arguments: FileRequestArgs;
2423-
}
2424-
2425-
export interface CopilotRelatedItems {
2426-
relatedFiles: readonly string[];
2427-
}
2428-
2429-
export interface CopilotRelatedResponse extends Response {
2430-
body: CopilotRelatedItems;
2431-
}
24322421
/**
24332422
* Synchronous request for semantic diagnostics of one file.
24342423
*/

src/server/session.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2052,11 +2052,9 @@ export class Session<TMessage = string> implements EventSender {
20522052
return this.mapTextChangesToCodeEdits(changes);
20532053
}
20542054

2055-
private getCopilotRelatedInfo(args: protocol.FileRequestArgs): protocol.CopilotRelatedItems {
2056-
const { file, project } = this.getFileAndProject(args);
2057-
2055+
private getCopilotRelatedInfo(): { relatedFiles: never[]; } {
20582056
return {
2059-
relatedFiles: project.getLanguageService().getImports(file),
2057+
relatedFiles: [],
20602058
};
20612059
}
20622060

@@ -3802,8 +3800,8 @@ export class Session<TMessage = string> implements EventSender {
38023800
[protocol.CommandTypes.MapCode]: (request: protocol.MapCodeRequest) => {
38033801
return this.requiredResponse(this.mapCode(request.arguments));
38043802
},
3805-
[protocol.CommandTypes.CopilotRelated]: (request: protocol.CopilotRelatedRequest) => {
3806-
return this.requiredResponse(this.getCopilotRelatedInfo(request.arguments));
3803+
[protocol.CommandTypes.CopilotRelated]: () => {
3804+
return this.requiredResponse(this.getCopilotRelatedInfo());
38073805
},
38083806
}));
38093807

src/services/codefixes/helpers.ts

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -606,12 +606,10 @@ export function typeToAutoImportableTypeNode(checker: TypeChecker, importAdder:
606606

607607
/** @internal */
608608
export function typeNodeToAutoImportableTypeNode(typeNode: TypeNode, importAdder: ImportAdder, scriptTarget: ScriptTarget): TypeNode | undefined {
609-
if (typeNode && isImportTypeNode(typeNode)) {
610-
const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget);
611-
if (importableReference) {
612-
importSymbols(importAdder, importableReference.symbols);
613-
typeNode = importableReference.typeNode;
614-
}
609+
const importableReference = tryGetAutoImportableReferenceFromTypeNode(typeNode, scriptTarget);
610+
if (importableReference) {
611+
importSymbols(importAdder, importableReference.symbols);
612+
typeNode = importableReference.typeNode;
615613
}
616614

617615
// Ensure nodes are fresh so they can have different positions when going through formatting.

src/services/refactors/moveToFile.ts

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import {
2626
emptyArray,
2727
EnumDeclaration,
2828
escapeLeadingUnderscores,
29+
every,
2930
ExportDeclaration,
3031
ExportKind,
3132
Expression,
@@ -885,24 +886,23 @@ export function getUsageInfo(oldFile: SourceFile, toMove: readonly Statement[],
885886
const unusedImportsFromOldFile = new Set<Symbol>();
886887
for (const statement of toMove) {
887888
forEachReference(statement, checker, enclosingRange, (symbol, isValidTypeOnlyUseSite) => {
888-
if (!symbol.declarations || isGlobalType(checker, symbol)) {
889+
if (!symbol.declarations) {
889890
return;
890891
}
891892
if (existingTargetLocals.has(skipAlias(symbol, checker))) {
892893
unusedImportsFromOldFile.add(symbol);
893894
return;
894895
}
895-
for (const decl of symbol.declarations) {
896-
if (isInImport(decl)) {
897-
const prevIsTypeOnly = oldImportsNeededByTargetFile.get(symbol);
898-
oldImportsNeededByTargetFile.set(symbol, [
899-
prevIsTypeOnly === undefined ? isValidTypeOnlyUseSite : prevIsTypeOnly && isValidTypeOnlyUseSite,
900-
tryCast(decl, (d): d is codefix.ImportOrRequireAliasDeclaration => isImportSpecifier(d) || isImportClause(d) || isNamespaceImport(d) || isImportEqualsDeclaration(d) || isBindingElement(d) || isVariableDeclaration(d)),
901-
]);
902-
}
903-
else if (isTopLevelDeclaration(decl) && sourceFileOfTopLevelDeclaration(decl) === oldFile && !movedSymbols.has(symbol)) {
904-
targetFileImportsFromOldFile.set(symbol, isValidTypeOnlyUseSite);
905-
}
896+
const importedDeclaration = find(symbol.declarations, isInImport);
897+
if (importedDeclaration) {
898+
const prevIsTypeOnly = oldImportsNeededByTargetFile.get(symbol);
899+
oldImportsNeededByTargetFile.set(symbol, [
900+
prevIsTypeOnly === undefined ? isValidTypeOnlyUseSite : prevIsTypeOnly && isValidTypeOnlyUseSite,
901+
tryCast(importedDeclaration, (d): d is codefix.ImportOrRequireAliasDeclaration => isImportSpecifier(d) || isImportClause(d) || isNamespaceImport(d) || isImportEqualsDeclaration(d) || isBindingElement(d) || isVariableDeclaration(d)),
902+
]);
903+
}
904+
else if (!movedSymbols.has(symbol) && every(symbol.declarations, decl => isTopLevelDeclaration(decl) && sourceFileOfTopLevelDeclaration(decl) === oldFile)) {
905+
targetFileImportsFromOldFile.set(symbol, isValidTypeOnlyUseSite);
906906
}
907907
});
908908
}
@@ -946,10 +946,6 @@ export function getUsageInfo(oldFile: SourceFile, toMove: readonly Statement[],
946946
}
947947
}
948948

949-
function isGlobalType(checker: TypeChecker, symbol: Symbol) {
950-
return !!checker.resolveName(symbol.name, /*location*/ undefined, SymbolFlags.Type, /*excludeGlobals*/ false);
951-
}
952-
953949
function makeUniqueFilename(proposedFilename: string, extension: string, inDirectory: string, host: LanguageServiceHost): string {
954950
let newFilename = proposedFilename;
955951
for (let i = 1;; i++) {

src/services/services.ts

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import {
22
__String,
33
ApplicableRefactorInfo,
44
ApplyCodeActionCommandResult,
5-
arrayFrom,
65
AssignmentDeclarationKind,
76
BaseType,
87
BinaryExpression,
@@ -234,7 +233,6 @@ import {
234233
Node,
235234
NodeArray,
236235
NodeFlags,
237-
nodeIsSynthesized,
238236
noop,
239237
normalizePath,
240238
normalizeSpans,
@@ -1604,7 +1602,6 @@ const invalidOperationsInPartialSemanticMode: readonly (keyof LanguageService)[]
16041602
"provideInlayHints",
16051603
"getSupportedCodeFixes",
16061604
"getPasteEdits",
1607-
"getImports",
16081605
];
16091606

16101607
const invalidOperationsInSyntacticMode: readonly (keyof LanguageService)[] = [
@@ -3381,18 +3378,6 @@ export function createLanguageService(
33813378
);
33823379
}
33833380

3384-
function getImports(fileName: string): readonly string[] {
3385-
synchronizeHostData();
3386-
const file = getValidSourceFile(fileName);
3387-
let imports: Set<string> | undefined;
3388-
for (const specifier of file.imports) {
3389-
if (nodeIsSynthesized(specifier)) continue;
3390-
const name = program.getResolvedModuleFromModuleSpecifier(specifier, file)?.resolvedModule?.resolvedFileName;
3391-
if (name) (imports ??= new Set()).add(name);
3392-
}
3393-
return imports ? arrayFrom(imports) : emptyArray;
3394-
}
3395-
33963381
const ls: LanguageService = {
33973382
dispose,
33983383
cleanupSemanticCache,
@@ -3467,7 +3452,6 @@ export function createLanguageService(
34673452
preparePasteEditsForFile,
34683453
getPasteEdits,
34693454
mapCode,
3470-
getImports,
34713455
};
34723456

34733457
switch (languageServiceMode) {

0 commit comments

Comments
 (0)