@effect/language-service 0.47.1 → 0.47.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli.js +76 -3
- package/cli.js.map +1 -1
- package/effect-lsp-patch-utils.js +76 -3
- package/effect-lsp-patch-utils.js.map +1 -1
- package/index.js +90 -11
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +76 -3
- package/transform.js.map +1 -1
package/index.js
CHANGED
|
@@ -1861,6 +1861,10 @@ var makeKeyBuilder = fn("KeyBuilder")(
|
|
|
1861
1861
|
);
|
|
1862
1862
|
var keyBuilderCache = /* @__PURE__ */ new Map();
|
|
1863
1863
|
var getOrMakeKeyBuilder = fn("getOrMakeKeyBuilder")(function* (sourceFile) {
|
|
1864
|
+
while (keyBuilderCache.size > 5) {
|
|
1865
|
+
const oldest = keyBuilderCache.keys().next().value;
|
|
1866
|
+
if (oldest) keyBuilderCache.delete(oldest);
|
|
1867
|
+
}
|
|
1864
1868
|
const keyBuilder = keyBuilderCache.get(sourceFile.fileName) || (yield* makeKeyBuilder(sourceFile));
|
|
1865
1869
|
keyBuilderCache.set(sourceFile.fileName, keyBuilder);
|
|
1866
1870
|
return keyBuilder;
|
|
@@ -2247,10 +2251,10 @@ var TypeCheckerUtils = Tag("TypeCheckerUtils");
|
|
|
2247
2251
|
var nanoLayer2 = (fa) => pipe(
|
|
2248
2252
|
service(TypeScriptApi),
|
|
2249
2253
|
flatMap2(
|
|
2250
|
-
(ts) => flatMap2(service(TypeCheckerApi), (typeChecker) => pipe(fa, provideService(TypeCheckerUtils, makeTypeCheckerUtils(ts, typeChecker))))
|
|
2254
|
+
(ts) => flatMap2(service(TypeCheckerApi), (typeChecker) => flatMap2(service(TypeScriptUtils), (typeScriptUtils) => pipe(fa, provideService(TypeCheckerUtils, makeTypeCheckerUtils(ts, typeChecker, typeScriptUtils)))))
|
|
2251
2255
|
)
|
|
2252
2256
|
);
|
|
2253
|
-
function makeTypeCheckerUtils(ts, typeChecker) {
|
|
2257
|
+
function makeTypeCheckerUtils(ts, typeChecker, tsUtils) {
|
|
2254
2258
|
function isUnion(type) {
|
|
2255
2259
|
return !!(type.flags & ts.TypeFlags.Union);
|
|
2256
2260
|
}
|
|
@@ -2490,6 +2494,74 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2490
2494
|
expectedAndRealTypeCache.set(sourceFile, result);
|
|
2491
2495
|
return result;
|
|
2492
2496
|
};
|
|
2497
|
+
function typeToSimplifiedTypeNode(type, enclosingNode, flags) {
|
|
2498
|
+
const fallbackStandard = () => {
|
|
2499
|
+
const typeNode = typeChecker.typeToTypeNode(type, enclosingNode, flags);
|
|
2500
|
+
if (!typeNode) return void 0;
|
|
2501
|
+
return tsUtils.simplifyTypeNode(typeNode);
|
|
2502
|
+
};
|
|
2503
|
+
const members = unrollUnionMembers(type);
|
|
2504
|
+
if (members.length > 1) {
|
|
2505
|
+
const typeNodes = [];
|
|
2506
|
+
members.sort(deterministicTypeOrder);
|
|
2507
|
+
for (const member of members) {
|
|
2508
|
+
const memberNode = typeToSimplifiedTypeNode(member, enclosingNode, flags);
|
|
2509
|
+
if (!memberNode) return fallbackStandard();
|
|
2510
|
+
typeNodes.push(memberNode);
|
|
2511
|
+
}
|
|
2512
|
+
return tsUtils.simplifyTypeNode(ts.factory.createUnionTypeNode(typeNodes));
|
|
2513
|
+
}
|
|
2514
|
+
if (type.flags & ts.TypeFlags.Intersection) {
|
|
2515
|
+
const intersectionType = type;
|
|
2516
|
+
const typeNodes = [];
|
|
2517
|
+
for (const member of intersectionType.types) {
|
|
2518
|
+
const memberNode = typeToSimplifiedTypeNode(member, enclosingNode, flags);
|
|
2519
|
+
if (!memberNode) return fallbackStandard();
|
|
2520
|
+
typeNodes.push(memberNode);
|
|
2521
|
+
}
|
|
2522
|
+
return tsUtils.simplifyTypeNode(ts.factory.createIntersectionTypeNode(typeNodes));
|
|
2523
|
+
}
|
|
2524
|
+
if (type.flags & ts.TypeFlags.Object && type.objectFlags & ts.ObjectFlags.Reference) {
|
|
2525
|
+
const typeReference = type;
|
|
2526
|
+
const standard2 = fallbackStandard();
|
|
2527
|
+
if (!standard2) return void 0;
|
|
2528
|
+
if (!ts.isTypeReferenceNode(standard2)) return standard2;
|
|
2529
|
+
if (typeReference.target.typeParameters?.length !== typeReference.typeArguments?.length) return standard2;
|
|
2530
|
+
if (standard2.typeArguments?.length !== typeReference.typeArguments?.length) return standard2;
|
|
2531
|
+
const typeParametersCount = (typeReference.target.typeParameters || []).length;
|
|
2532
|
+
for (let i = typeParametersCount - 1; i >= 0; i--) {
|
|
2533
|
+
const typeParameter = typeReference.target.typeParameters[i];
|
|
2534
|
+
const typeArgument = typeReference.typeArguments[i];
|
|
2535
|
+
const defaultType = typeChecker.getDefaultFromTypeParameter(typeParameter);
|
|
2536
|
+
if (defaultType !== typeArgument || i === 0) {
|
|
2537
|
+
return tsUtils.simplifyTypeNode(ts.factory.updateTypeReferenceNode(
|
|
2538
|
+
standard2,
|
|
2539
|
+
standard2.typeName,
|
|
2540
|
+
ts.factory.createNodeArray((standard2.typeArguments || []).slice(0, Math.min(typeParametersCount, i + 1)))
|
|
2541
|
+
));
|
|
2542
|
+
}
|
|
2543
|
+
}
|
|
2544
|
+
return standard2;
|
|
2545
|
+
}
|
|
2546
|
+
if (type.flags & ts.TypeFlags.Object) {
|
|
2547
|
+
const standard2 = fallbackStandard();
|
|
2548
|
+
if (!standard2) return void 0;
|
|
2549
|
+
if (!ts.isFunctionTypeNode(standard2)) return standard2;
|
|
2550
|
+
const signatures = typeChecker.getSignaturesOfType(type, ts.SignatureKind.Call);
|
|
2551
|
+
if (signatures.length !== 1) return standard2;
|
|
2552
|
+
const returnType = typeChecker.getReturnTypeOfSignature(signatures[0]);
|
|
2553
|
+
if (!returnType) return standard2;
|
|
2554
|
+
const returnTypeNode = typeToSimplifiedTypeNode(returnType, enclosingNode, flags);
|
|
2555
|
+
if (!returnTypeNode) return standard2;
|
|
2556
|
+
return tsUtils.simplifyTypeNode(ts.factory.updateFunctionTypeNode(
|
|
2557
|
+
standard2,
|
|
2558
|
+
standard2.typeParameters,
|
|
2559
|
+
standard2.parameters,
|
|
2560
|
+
returnTypeNode
|
|
2561
|
+
));
|
|
2562
|
+
}
|
|
2563
|
+
return fallbackStandard();
|
|
2564
|
+
}
|
|
2493
2565
|
return {
|
|
2494
2566
|
isUnion,
|
|
2495
2567
|
getTypeParameterAtPosition,
|
|
@@ -2498,7 +2570,8 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2498
2570
|
appendToUniqueTypesMap,
|
|
2499
2571
|
deterministicTypeOrder,
|
|
2500
2572
|
getInferredReturnType,
|
|
2501
|
-
expectedAndRealType
|
|
2573
|
+
expectedAndRealType,
|
|
2574
|
+
typeToSimplifiedTypeNode
|
|
2502
2575
|
};
|
|
2503
2576
|
}
|
|
2504
2577
|
|
|
@@ -6538,6 +6611,10 @@ var makeAutoImportProvider = fn("TypeScriptApi")(function* (fromSourceFile) {
|
|
|
6538
6611
|
});
|
|
6539
6612
|
var importProvidersCache = /* @__PURE__ */ new Map();
|
|
6540
6613
|
var getOrMakeAutoImportProvider = fn("getOrMakeAutoImportProvider")(function* (sourceFile) {
|
|
6614
|
+
while (importProvidersCache.size > 5) {
|
|
6615
|
+
const oldest = importProvidersCache.keys().next().value;
|
|
6616
|
+
if (oldest) importProvidersCache.delete(oldest);
|
|
6617
|
+
}
|
|
6541
6618
|
const autoImportProvider = importProvidersCache.get(sourceFile.fileName) || (yield* makeAutoImportProvider(sourceFile));
|
|
6542
6619
|
importProvidersCache.set(sourceFile.fileName, autoImportProvider);
|
|
6543
6620
|
return autoImportProvider;
|
|
@@ -13041,7 +13118,6 @@ var toggleReturnTypeAnnotation = createRefactor({
|
|
|
13041
13118
|
apply: fn("toggleReturnTypeAnnotation.apply")(function* (sourceFile, textRange) {
|
|
13042
13119
|
const ts = yield* service(TypeScriptApi);
|
|
13043
13120
|
const tsUtils = yield* service(TypeScriptUtils);
|
|
13044
|
-
const typeChecker = yield* service(TypeCheckerApi);
|
|
13045
13121
|
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
13046
13122
|
function addReturnTypeAnnotation(sourceFile2, changeTracker, declaration, typeNode) {
|
|
13047
13123
|
const closeParen = ts.findChildOfKind(declaration, ts.SyntaxKind.CloseParenToken, sourceFile2);
|
|
@@ -13092,7 +13168,7 @@ var toggleReturnTypeAnnotation = createRefactor({
|
|
|
13092
13168
|
}
|
|
13093
13169
|
const returnType = typeCheckerUtils.getInferredReturnType(node);
|
|
13094
13170
|
if (!returnType) return yield* fail(new RefactorNotApplicableError());
|
|
13095
|
-
const returnTypeNode =
|
|
13171
|
+
const returnTypeNode = typeCheckerUtils.typeToSimplifiedTypeNode(
|
|
13096
13172
|
returnType,
|
|
13097
13173
|
node,
|
|
13098
13174
|
ts.NodeBuilderFlags.NoTruncation
|
|
@@ -13103,9 +13179,7 @@ var toggleReturnTypeAnnotation = createRefactor({
|
|
|
13103
13179
|
description: "Toggle return type annotation",
|
|
13104
13180
|
apply: pipe(
|
|
13105
13181
|
service(ChangeTracker),
|
|
13106
|
-
map5(
|
|
13107
|
-
(changeTracker) => addReturnTypeAnnotation(sourceFile, changeTracker, node, tsUtils.simplifyTypeNode(returnTypeNode))
|
|
13108
|
-
)
|
|
13182
|
+
map5((changeTracker) => addReturnTypeAnnotation(sourceFile, changeTracker, node, returnTypeNode))
|
|
13109
13183
|
)
|
|
13110
13184
|
};
|
|
13111
13185
|
})
|
|
@@ -13119,6 +13193,7 @@ var toggleTypeAnnotation = createRefactor({
|
|
|
13119
13193
|
const ts = yield* service(TypeScriptApi);
|
|
13120
13194
|
const tsUtils = yield* service(TypeScriptUtils);
|
|
13121
13195
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
13196
|
+
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
13122
13197
|
const maybeNode = pipe(
|
|
13123
13198
|
tsUtils.getAncestorNodesInRange(sourceFile, textRange),
|
|
13124
13199
|
filter((node2) => ts.isVariableDeclaration(node2) || ts.isPropertyDeclaration(node2)),
|
|
@@ -13140,13 +13215,13 @@ var toggleTypeAnnotation = createRefactor({
|
|
|
13140
13215
|
}
|
|
13141
13216
|
const initializer = node.initializer;
|
|
13142
13217
|
const initializerType = typeChecker.getTypeAtLocation(initializer);
|
|
13143
|
-
const initializerTypeNode = fromNullable(
|
|
13218
|
+
const initializerTypeNode = fromNullable(typeCheckerUtils.typeToSimplifiedTypeNode(
|
|
13144
13219
|
initializerType,
|
|
13145
13220
|
node,
|
|
13146
13221
|
ts.NodeBuilderFlags.NoTruncation
|
|
13147
13222
|
)).pipe(
|
|
13148
13223
|
orElse(
|
|
13149
|
-
() => fromNullable(
|
|
13224
|
+
() => fromNullable(typeCheckerUtils.typeToSimplifiedTypeNode(
|
|
13150
13225
|
initializerType,
|
|
13151
13226
|
void 0,
|
|
13152
13227
|
ts.NodeBuilderFlags.NoTruncation
|
|
@@ -13158,7 +13233,7 @@ var toggleTypeAnnotation = createRefactor({
|
|
|
13158
13233
|
changeTracker.insertNodeAt(
|
|
13159
13234
|
sourceFile,
|
|
13160
13235
|
node.name.end,
|
|
13161
|
-
|
|
13236
|
+
initializerTypeNode,
|
|
13162
13237
|
{
|
|
13163
13238
|
prefix: ": "
|
|
13164
13239
|
}
|
|
@@ -13878,6 +13953,10 @@ var init = (modules) => {
|
|
|
13878
13953
|
const effectCodeFixesForFile = /* @__PURE__ */ new Map();
|
|
13879
13954
|
const runDiagnosticsAndCacheCodeFixes = (fileName) => {
|
|
13880
13955
|
const program = languageService.getProgram();
|
|
13956
|
+
while (effectCodeFixesForFile.size > 5) {
|
|
13957
|
+
const oldest = effectCodeFixesForFile.keys().next().value;
|
|
13958
|
+
if (oldest) effectCodeFixesForFile.delete(oldest);
|
|
13959
|
+
}
|
|
13881
13960
|
if (languageServicePluginOptions.diagnostics && program) {
|
|
13882
13961
|
effectCodeFixesForFile.delete(fileName);
|
|
13883
13962
|
const sourceFile = program.getSourceFile(fileName);
|