@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/package.json
CHANGED
package/transform.js
CHANGED
|
@@ -2117,10 +2117,10 @@ var TypeCheckerUtils = Tag("TypeCheckerUtils");
|
|
|
2117
2117
|
var nanoLayer2 = (fa) => pipe(
|
|
2118
2118
|
service(TypeScriptApi),
|
|
2119
2119
|
flatMap2(
|
|
2120
|
-
(ts) => flatMap2(service(TypeCheckerApi), (typeChecker) => pipe(fa, provideService(TypeCheckerUtils, makeTypeCheckerUtils(ts, typeChecker))))
|
|
2120
|
+
(ts) => flatMap2(service(TypeCheckerApi), (typeChecker) => flatMap2(service(TypeScriptUtils), (typeScriptUtils) => pipe(fa, provideService(TypeCheckerUtils, makeTypeCheckerUtils(ts, typeChecker, typeScriptUtils)))))
|
|
2121
2121
|
)
|
|
2122
2122
|
);
|
|
2123
|
-
function makeTypeCheckerUtils(ts, typeChecker) {
|
|
2123
|
+
function makeTypeCheckerUtils(ts, typeChecker, tsUtils) {
|
|
2124
2124
|
function isUnion(type) {
|
|
2125
2125
|
return !!(type.flags & ts.TypeFlags.Union);
|
|
2126
2126
|
}
|
|
@@ -2360,6 +2360,74 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2360
2360
|
expectedAndRealTypeCache.set(sourceFile, result);
|
|
2361
2361
|
return result;
|
|
2362
2362
|
};
|
|
2363
|
+
function typeToSimplifiedTypeNode(type, enclosingNode, flags) {
|
|
2364
|
+
const fallbackStandard = () => {
|
|
2365
|
+
const typeNode = typeChecker.typeToTypeNode(type, enclosingNode, flags);
|
|
2366
|
+
if (!typeNode) return void 0;
|
|
2367
|
+
return tsUtils.simplifyTypeNode(typeNode);
|
|
2368
|
+
};
|
|
2369
|
+
const members = unrollUnionMembers(type);
|
|
2370
|
+
if (members.length > 1) {
|
|
2371
|
+
const typeNodes = [];
|
|
2372
|
+
members.sort(deterministicTypeOrder);
|
|
2373
|
+
for (const member of members) {
|
|
2374
|
+
const memberNode = typeToSimplifiedTypeNode(member, enclosingNode, flags);
|
|
2375
|
+
if (!memberNode) return fallbackStandard();
|
|
2376
|
+
typeNodes.push(memberNode);
|
|
2377
|
+
}
|
|
2378
|
+
return tsUtils.simplifyTypeNode(ts.factory.createUnionTypeNode(typeNodes));
|
|
2379
|
+
}
|
|
2380
|
+
if (type.flags & ts.TypeFlags.Intersection) {
|
|
2381
|
+
const intersectionType = type;
|
|
2382
|
+
const typeNodes = [];
|
|
2383
|
+
for (const member of intersectionType.types) {
|
|
2384
|
+
const memberNode = typeToSimplifiedTypeNode(member, enclosingNode, flags);
|
|
2385
|
+
if (!memberNode) return fallbackStandard();
|
|
2386
|
+
typeNodes.push(memberNode);
|
|
2387
|
+
}
|
|
2388
|
+
return tsUtils.simplifyTypeNode(ts.factory.createIntersectionTypeNode(typeNodes));
|
|
2389
|
+
}
|
|
2390
|
+
if (type.flags & ts.TypeFlags.Object && type.objectFlags & ts.ObjectFlags.Reference) {
|
|
2391
|
+
const typeReference = type;
|
|
2392
|
+
const standard2 = fallbackStandard();
|
|
2393
|
+
if (!standard2) return void 0;
|
|
2394
|
+
if (!ts.isTypeReferenceNode(standard2)) return standard2;
|
|
2395
|
+
if (typeReference.target.typeParameters?.length !== typeReference.typeArguments?.length) return standard2;
|
|
2396
|
+
if (standard2.typeArguments?.length !== typeReference.typeArguments?.length) return standard2;
|
|
2397
|
+
const typeParametersCount = (typeReference.target.typeParameters || []).length;
|
|
2398
|
+
for (let i = typeParametersCount - 1; i >= 0; i--) {
|
|
2399
|
+
const typeParameter = typeReference.target.typeParameters[i];
|
|
2400
|
+
const typeArgument = typeReference.typeArguments[i];
|
|
2401
|
+
const defaultType = typeChecker.getDefaultFromTypeParameter(typeParameter);
|
|
2402
|
+
if (defaultType !== typeArgument || i === 0) {
|
|
2403
|
+
return tsUtils.simplifyTypeNode(ts.factory.updateTypeReferenceNode(
|
|
2404
|
+
standard2,
|
|
2405
|
+
standard2.typeName,
|
|
2406
|
+
ts.factory.createNodeArray((standard2.typeArguments || []).slice(0, Math.min(typeParametersCount, i + 1)))
|
|
2407
|
+
));
|
|
2408
|
+
}
|
|
2409
|
+
}
|
|
2410
|
+
return standard2;
|
|
2411
|
+
}
|
|
2412
|
+
if (type.flags & ts.TypeFlags.Object) {
|
|
2413
|
+
const standard2 = fallbackStandard();
|
|
2414
|
+
if (!standard2) return void 0;
|
|
2415
|
+
if (!ts.isFunctionTypeNode(standard2)) return standard2;
|
|
2416
|
+
const signatures = typeChecker.getSignaturesOfType(type, ts.SignatureKind.Call);
|
|
2417
|
+
if (signatures.length !== 1) return standard2;
|
|
2418
|
+
const returnType = typeChecker.getReturnTypeOfSignature(signatures[0]);
|
|
2419
|
+
if (!returnType) return standard2;
|
|
2420
|
+
const returnTypeNode = typeToSimplifiedTypeNode(returnType, enclosingNode, flags);
|
|
2421
|
+
if (!returnTypeNode) return standard2;
|
|
2422
|
+
return tsUtils.simplifyTypeNode(ts.factory.updateFunctionTypeNode(
|
|
2423
|
+
standard2,
|
|
2424
|
+
standard2.typeParameters,
|
|
2425
|
+
standard2.parameters,
|
|
2426
|
+
returnTypeNode
|
|
2427
|
+
));
|
|
2428
|
+
}
|
|
2429
|
+
return fallbackStandard();
|
|
2430
|
+
}
|
|
2363
2431
|
return {
|
|
2364
2432
|
isUnion,
|
|
2365
2433
|
getTypeParameterAtPosition,
|
|
@@ -2368,7 +2436,8 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2368
2436
|
appendToUniqueTypesMap,
|
|
2369
2437
|
deterministicTypeOrder,
|
|
2370
2438
|
getInferredReturnType,
|
|
2371
|
-
expectedAndRealType
|
|
2439
|
+
expectedAndRealType,
|
|
2440
|
+
typeToSimplifiedTypeNode
|
|
2372
2441
|
};
|
|
2373
2442
|
}
|
|
2374
2443
|
|