@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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/language-service",
3
- "version": "0.47.1",
3
+ "version": "0.47.3",
4
4
  "description": "A Language-Service Plugin to Refactor and Diagnostic effect-ts projects",
5
5
  "main": "index.cjs",
6
6
  "bin": {
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
 
@@ -3557,6 +3626,10 @@ var makeKeyBuilder = fn("KeyBuilder")(
3557
3626
  );
3558
3627
  var keyBuilderCache = /* @__PURE__ */ new Map();
3559
3628
  var getOrMakeKeyBuilder = fn("getOrMakeKeyBuilder")(function* (sourceFile) {
3629
+ while (keyBuilderCache.size > 5) {
3630
+ const oldest = keyBuilderCache.keys().next().value;
3631
+ if (oldest) keyBuilderCache.delete(oldest);
3632
+ }
3560
3633
  const keyBuilder = keyBuilderCache.get(sourceFile.fileName) || (yield* makeKeyBuilder(sourceFile));
3561
3634
  keyBuilderCache.set(sourceFile.fileName, keyBuilder);
3562
3635
  return keyBuilder;