@effect/language-service 0.47.2 → 0.48.0
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/README.md +4 -0
- package/cli.js +80 -6
- package/cli.js.map +1 -1
- package/effect-lsp-patch-utils.js +80 -6
- package/effect-lsp-patch-utils.js.map +1 -1
- package/index.js +152 -83
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +80 -6
- package/transform.js.map +1 -1
package/package.json
CHANGED
package/transform.js
CHANGED
|
@@ -1210,7 +1210,7 @@ function parseKeyPatterns(patterns) {
|
|
|
1210
1210
|
if (!isObject(entry)) continue;
|
|
1211
1211
|
result.push({
|
|
1212
1212
|
target: hasProperty(entry, "target") && isString(entry.target) && ["service", "error", "custom"].includes(entry.target.toLowerCase()) ? entry.target.toLowerCase() : "service",
|
|
1213
|
-
pattern: hasProperty(entry, "pattern") && isString(entry.pattern) && ["package-identifier", "default"].includes(entry.pattern.toLowerCase()) ? entry.pattern.toLowerCase() : "default",
|
|
1213
|
+
pattern: hasProperty(entry, "pattern") && isString(entry.pattern) && ["package-identifier", "default", "default-hashed"].includes(entry.pattern.toLowerCase()) ? entry.pattern.toLowerCase() : "default",
|
|
1214
1214
|
skipLeadingPath: hasProperty(entry, "skipLeadingPath") && isArray(entry.skipLeadingPath) && entry.skipLeadingPath.every(isString) ? entry.skipLeadingPath : ["src/"]
|
|
1215
1215
|
});
|
|
1216
1216
|
}
|
|
@@ -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,78 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2360
2360
|
expectedAndRealTypeCache.set(sourceFile, result);
|
|
2361
2361
|
return result;
|
|
2362
2362
|
};
|
|
2363
|
+
function typeToSimplifiedTypeNode(type, enclosingNode, flags) {
|
|
2364
|
+
return typeToSimplifiedTypeNodeWorker(type, enclosingNode, flags, 0);
|
|
2365
|
+
}
|
|
2366
|
+
function typeToSimplifiedTypeNodeWorker(type, enclosingNode, flags, depth) {
|
|
2367
|
+
const fallbackStandard = () => {
|
|
2368
|
+
const typeNode = typeChecker.typeToTypeNode(type, enclosingNode, flags);
|
|
2369
|
+
if (!typeNode) return void 0;
|
|
2370
|
+
return tsUtils.simplifyTypeNode(typeNode);
|
|
2371
|
+
};
|
|
2372
|
+
if (depth > 20) return fallbackStandard();
|
|
2373
|
+
const members = unrollUnionMembers(type);
|
|
2374
|
+
if (members.length > 1 && !(type.flags & ts.TypeFlags.Boolean)) {
|
|
2375
|
+
const typeNodes = [];
|
|
2376
|
+
members.sort(deterministicTypeOrder);
|
|
2377
|
+
for (const member of members) {
|
|
2378
|
+
const memberNode = typeToSimplifiedTypeNodeWorker(member, enclosingNode, flags, depth + 1);
|
|
2379
|
+
if (!memberNode) return fallbackStandard();
|
|
2380
|
+
typeNodes.push(memberNode);
|
|
2381
|
+
}
|
|
2382
|
+
return tsUtils.simplifyTypeNode(ts.factory.createUnionTypeNode(typeNodes));
|
|
2383
|
+
}
|
|
2384
|
+
if (type.flags & ts.TypeFlags.Intersection) {
|
|
2385
|
+
const intersectionType = type;
|
|
2386
|
+
const typeNodes = [];
|
|
2387
|
+
for (const member of intersectionType.types) {
|
|
2388
|
+
const memberNode = typeToSimplifiedTypeNodeWorker(member, enclosingNode, flags, depth + 1);
|
|
2389
|
+
if (!memberNode) return fallbackStandard();
|
|
2390
|
+
typeNodes.push(memberNode);
|
|
2391
|
+
}
|
|
2392
|
+
return tsUtils.simplifyTypeNode(ts.factory.createIntersectionTypeNode(typeNodes));
|
|
2393
|
+
}
|
|
2394
|
+
if (type.flags & ts.TypeFlags.Object && type.objectFlags & ts.ObjectFlags.Reference) {
|
|
2395
|
+
const typeReference = type;
|
|
2396
|
+
const standard2 = fallbackStandard();
|
|
2397
|
+
if (!standard2) return void 0;
|
|
2398
|
+
if (!ts.isTypeReferenceNode(standard2)) return standard2;
|
|
2399
|
+
if (typeReference.target.typeParameters?.length !== typeReference.typeArguments?.length) return standard2;
|
|
2400
|
+
if (standard2.typeArguments?.length !== typeReference.typeArguments?.length) return standard2;
|
|
2401
|
+
const typeParametersCount = (typeReference.target.typeParameters || []).length;
|
|
2402
|
+
for (let i = typeParametersCount - 1; i >= 0; i--) {
|
|
2403
|
+
const typeParameter = typeReference.target.typeParameters[i];
|
|
2404
|
+
const typeArgument = typeReference.typeArguments[i];
|
|
2405
|
+
const defaultType = typeChecker.getDefaultFromTypeParameter(typeParameter);
|
|
2406
|
+
if (defaultType !== typeArgument || i === 0) {
|
|
2407
|
+
return tsUtils.simplifyTypeNode(ts.factory.updateTypeReferenceNode(
|
|
2408
|
+
standard2,
|
|
2409
|
+
standard2.typeName,
|
|
2410
|
+
ts.factory.createNodeArray((standard2.typeArguments || []).slice(0, Math.min(typeParametersCount, i + 1)))
|
|
2411
|
+
));
|
|
2412
|
+
}
|
|
2413
|
+
}
|
|
2414
|
+
return standard2;
|
|
2415
|
+
}
|
|
2416
|
+
if (type.flags & ts.TypeFlags.Object) {
|
|
2417
|
+
const standard2 = fallbackStandard();
|
|
2418
|
+
if (!standard2) return void 0;
|
|
2419
|
+
if (!ts.isFunctionTypeNode(standard2)) return standard2;
|
|
2420
|
+
const signatures = typeChecker.getSignaturesOfType(type, ts.SignatureKind.Call);
|
|
2421
|
+
if (signatures.length !== 1) return standard2;
|
|
2422
|
+
const returnType = typeChecker.getReturnTypeOfSignature(signatures[0]);
|
|
2423
|
+
if (!returnType) return standard2;
|
|
2424
|
+
const returnTypeNode = typeToSimplifiedTypeNodeWorker(returnType, enclosingNode, flags, depth + 1);
|
|
2425
|
+
if (!returnTypeNode) return standard2;
|
|
2426
|
+
return tsUtils.simplifyTypeNode(ts.factory.updateFunctionTypeNode(
|
|
2427
|
+
standard2,
|
|
2428
|
+
standard2.typeParameters,
|
|
2429
|
+
standard2.parameters,
|
|
2430
|
+
returnTypeNode
|
|
2431
|
+
));
|
|
2432
|
+
}
|
|
2433
|
+
return fallbackStandard();
|
|
2434
|
+
}
|
|
2363
2435
|
return {
|
|
2364
2436
|
isUnion,
|
|
2365
2437
|
getTypeParameterAtPosition,
|
|
@@ -2368,7 +2440,8 @@ function makeTypeCheckerUtils(ts, typeChecker) {
|
|
|
2368
2440
|
appendToUniqueTypesMap,
|
|
2369
2441
|
deterministicTypeOrder,
|
|
2370
2442
|
getInferredReturnType,
|
|
2371
|
-
expectedAndRealType
|
|
2443
|
+
expectedAndRealType,
|
|
2444
|
+
typeToSimplifiedTypeNode
|
|
2372
2445
|
};
|
|
2373
2446
|
}
|
|
2374
2447
|
|
|
@@ -3547,7 +3620,8 @@ var makeKeyBuilder = fn("KeyBuilder")(
|
|
|
3547
3620
|
parts = parts.map((part) => part.startsWith("/") ? part.slice(1) : part).map(
|
|
3548
3621
|
(part) => part.endsWith("/") ? part.slice(0, -1) : part
|
|
3549
3622
|
);
|
|
3550
|
-
|
|
3623
|
+
const fullKey = parts.filter((_) => String(_).trim().length > 0).join("/");
|
|
3624
|
+
return keyPattern.pattern === "default-hashed" ? cyrb53(fullKey) : fullKey;
|
|
3551
3625
|
}
|
|
3552
3626
|
}
|
|
3553
3627
|
return {
|
|
@@ -5493,7 +5567,7 @@ var tryCatchInEffectGen = createDiagnostic({
|
|
|
5493
5567
|
while (nodeToVisit.length > 0) {
|
|
5494
5568
|
const node = nodeToVisit.shift();
|
|
5495
5569
|
ts.forEachChild(node, appendNodeToVisit);
|
|
5496
|
-
if (ts.isTryStatement(node)) {
|
|
5570
|
+
if (ts.isTryStatement(node) && node.catchClause) {
|
|
5497
5571
|
const generatorOrRegularFunction = ts.findAncestor(
|
|
5498
5572
|
node,
|
|
5499
5573
|
(_) => ts.isFunctionExpression(_) || ts.isFunctionDeclaration(_) || ts.isMethodDeclaration(_) || ts.isArrowFunction(_) || ts.isGetAccessor(_) || ts.isFunctionLike(_)
|