@effect/language-service 0.47.2 → 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 +72 -3
- package/cli.js.map +1 -1
- package/effect-lsp-patch-utils.js +72 -3
- package/effect-lsp-patch-utils.js.map +1 -1
- package/index.js +78 -11
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +72 -3
- package/transform.js.map +1 -1
package/index.js
CHANGED
|
@@ -2251,10 +2251,10 @@ var TypeCheckerUtils = Tag("TypeCheckerUtils");
|
|
|
2251
2251
|
var nanoLayer2 = (fa) => pipe(
|
|
2252
2252
|
service(TypeScriptApi),
|
|
2253
2253
|
flatMap2(
|
|
2254
|
-
(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)))))
|
|
2255
2255
|
)
|
|
2256
2256
|
);
|
|
2257
|
-
function makeTypeCheckerUtils(ts, typeChecker) {
|
|
2257
|
+
function makeTypeCheckerUtils(ts, typeChecker, tsUtils) {
|
|
2258
2258
|
function isUnion(type) {
|
|
2259
2259
|
return !!(type.flags & ts.TypeFlags.Union);
|
|
2260
2260
|
}
|
|
@@ -2494,6 +2494,74 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2494
2494
|
expectedAndRealTypeCache.set(sourceFile, result);
|
|
2495
2495
|
return result;
|
|
2496
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
|
+
}
|
|
2497
2565
|
return {
|
|
2498
2566
|
isUnion,
|
|
2499
2567
|
getTypeParameterAtPosition,
|
|
@@ -2502,7 +2570,8 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2502
2570
|
appendToUniqueTypesMap,
|
|
2503
2571
|
deterministicTypeOrder,
|
|
2504
2572
|
getInferredReturnType,
|
|
2505
|
-
expectedAndRealType
|
|
2573
|
+
expectedAndRealType,
|
|
2574
|
+
typeToSimplifiedTypeNode
|
|
2506
2575
|
};
|
|
2507
2576
|
}
|
|
2508
2577
|
|
|
@@ -13049,7 +13118,6 @@ var toggleReturnTypeAnnotation = createRefactor({
|
|
|
13049
13118
|
apply: fn("toggleReturnTypeAnnotation.apply")(function* (sourceFile, textRange) {
|
|
13050
13119
|
const ts = yield* service(TypeScriptApi);
|
|
13051
13120
|
const tsUtils = yield* service(TypeScriptUtils);
|
|
13052
|
-
const typeChecker = yield* service(TypeCheckerApi);
|
|
13053
13121
|
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
13054
13122
|
function addReturnTypeAnnotation(sourceFile2, changeTracker, declaration, typeNode) {
|
|
13055
13123
|
const closeParen = ts.findChildOfKind(declaration, ts.SyntaxKind.CloseParenToken, sourceFile2);
|
|
@@ -13100,7 +13168,7 @@ var toggleReturnTypeAnnotation = createRefactor({
|
|
|
13100
13168
|
}
|
|
13101
13169
|
const returnType = typeCheckerUtils.getInferredReturnType(node);
|
|
13102
13170
|
if (!returnType) return yield* fail(new RefactorNotApplicableError());
|
|
13103
|
-
const returnTypeNode =
|
|
13171
|
+
const returnTypeNode = typeCheckerUtils.typeToSimplifiedTypeNode(
|
|
13104
13172
|
returnType,
|
|
13105
13173
|
node,
|
|
13106
13174
|
ts.NodeBuilderFlags.NoTruncation
|
|
@@ -13111,9 +13179,7 @@ var toggleReturnTypeAnnotation = createRefactor({
|
|
|
13111
13179
|
description: "Toggle return type annotation",
|
|
13112
13180
|
apply: pipe(
|
|
13113
13181
|
service(ChangeTracker),
|
|
13114
|
-
map5(
|
|
13115
|
-
(changeTracker) => addReturnTypeAnnotation(sourceFile, changeTracker, node, tsUtils.simplifyTypeNode(returnTypeNode))
|
|
13116
|
-
)
|
|
13182
|
+
map5((changeTracker) => addReturnTypeAnnotation(sourceFile, changeTracker, node, returnTypeNode))
|
|
13117
13183
|
)
|
|
13118
13184
|
};
|
|
13119
13185
|
})
|
|
@@ -13127,6 +13193,7 @@ var toggleTypeAnnotation = createRefactor({
|
|
|
13127
13193
|
const ts = yield* service(TypeScriptApi);
|
|
13128
13194
|
const tsUtils = yield* service(TypeScriptUtils);
|
|
13129
13195
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
13196
|
+
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
13130
13197
|
const maybeNode = pipe(
|
|
13131
13198
|
tsUtils.getAncestorNodesInRange(sourceFile, textRange),
|
|
13132
13199
|
filter((node2) => ts.isVariableDeclaration(node2) || ts.isPropertyDeclaration(node2)),
|
|
@@ -13148,13 +13215,13 @@ var toggleTypeAnnotation = createRefactor({
|
|
|
13148
13215
|
}
|
|
13149
13216
|
const initializer = node.initializer;
|
|
13150
13217
|
const initializerType = typeChecker.getTypeAtLocation(initializer);
|
|
13151
|
-
const initializerTypeNode = fromNullable(
|
|
13218
|
+
const initializerTypeNode = fromNullable(typeCheckerUtils.typeToSimplifiedTypeNode(
|
|
13152
13219
|
initializerType,
|
|
13153
13220
|
node,
|
|
13154
13221
|
ts.NodeBuilderFlags.NoTruncation
|
|
13155
13222
|
)).pipe(
|
|
13156
13223
|
orElse(
|
|
13157
|
-
() => fromNullable(
|
|
13224
|
+
() => fromNullable(typeCheckerUtils.typeToSimplifiedTypeNode(
|
|
13158
13225
|
initializerType,
|
|
13159
13226
|
void 0,
|
|
13160
13227
|
ts.NodeBuilderFlags.NoTruncation
|
|
@@ -13166,7 +13233,7 @@ var toggleTypeAnnotation = createRefactor({
|
|
|
13166
13233
|
changeTracker.insertNodeAt(
|
|
13167
13234
|
sourceFile,
|
|
13168
13235
|
node.name.end,
|
|
13169
|
-
|
|
13236
|
+
initializerTypeNode,
|
|
13170
13237
|
{
|
|
13171
13238
|
prefix: ": "
|
|
13172
13239
|
}
|