@effect/language-service 0.38.2 → 0.38.4
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 +1 -1
- package/cli.js +15 -4
- package/cli.js.map +1 -1
- package/effect-lsp-patch-utils.js +32 -12
- package/effect-lsp-patch-utils.js.map +1 -1
- package/index.js +33 -13
- package/index.js.map +1 -1
- package/package.json +1 -1
- package/transform.js +32 -12
- package/transform.js.map +1 -1
package/package.json
CHANGED
package/transform.js
CHANGED
|
@@ -1229,10 +1229,10 @@ function makeTypeScriptUtils(ts) {
|
|
|
1229
1229
|
if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
|
|
1230
1230
|
const packageJsonContent = packageJsonScope.contents.packageJsonContent;
|
|
1231
1231
|
if (!hasProperty(packageJsonContent, "name")) return;
|
|
1232
|
-
if (!hasProperty(packageJsonContent, "version")) return;
|
|
1233
1232
|
if (!hasProperty(packageJsonScope, "packageDirectory")) return;
|
|
1234
1233
|
if (!isString(packageJsonScope.packageDirectory)) return;
|
|
1235
|
-
const { name
|
|
1234
|
+
const { name } = packageJsonContent;
|
|
1235
|
+
const version = hasProperty(packageJsonScope, "version") ? packageJsonScope.version : "";
|
|
1236
1236
|
if (!isString(name)) return;
|
|
1237
1237
|
if (!isString(version)) return;
|
|
1238
1238
|
const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
|
|
@@ -1254,9 +1254,20 @@ function makeTypeScriptUtils(ts) {
|
|
|
1254
1254
|
exportsKeys
|
|
1255
1255
|
};
|
|
1256
1256
|
}
|
|
1257
|
-
function resolveModulePattern(sourceFile, pattern) {
|
|
1257
|
+
function resolveModulePattern(program, sourceFile, pattern) {
|
|
1258
1258
|
if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
|
|
1259
|
-
|
|
1259
|
+
let packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
|
|
1260
|
+
if (!packageJsonScope && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath) && hasProperty(ts, "getTemporaryModuleResolutionState") && isFunction2(ts.getTemporaryModuleResolutionState) && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath)) {
|
|
1261
|
+
const temporaryModuleResolutionState = ts.getTemporaryModuleResolutionState(
|
|
1262
|
+
void 0,
|
|
1263
|
+
program,
|
|
1264
|
+
program.getCompilerOptions()
|
|
1265
|
+
);
|
|
1266
|
+
packageJsonScope = parsePackageContentNameAndVersionFromScope({
|
|
1267
|
+
...sourceFile,
|
|
1268
|
+
packageJsonScope: ts.getPackageScopeForPath(sourceFile.fileName, temporaryModuleResolutionState)
|
|
1269
|
+
});
|
|
1270
|
+
}
|
|
1260
1271
|
const referencedPackages = [];
|
|
1261
1272
|
for (const statement of sourceFile.statements) {
|
|
1262
1273
|
if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
|
|
@@ -3554,7 +3565,7 @@ var importFromBarrel = createDiagnostic({
|
|
|
3554
3565
|
const program = yield* service(TypeScriptProgram);
|
|
3555
3566
|
const packageNamesToCheck = flatten(
|
|
3556
3567
|
languageServicePluginOptions.namespaceImportPackages.map(
|
|
3557
|
-
(packageName) => tsUtils.resolveModulePattern(sourceFile, packageName)
|
|
3568
|
+
(packageName) => tsUtils.resolveModulePattern(program, sourceFile, packageName)
|
|
3558
3569
|
)
|
|
3559
3570
|
);
|
|
3560
3571
|
const isImportedFromBarrelExport = (element) => {
|
|
@@ -4514,6 +4525,7 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
|
|
|
4514
4525
|
const ts = yield* service(TypeScriptApi);
|
|
4515
4526
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
4516
4527
|
const typeParser = yield* service(TypeParser);
|
|
4528
|
+
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
4517
4529
|
if (!ts.isClassDeclaration(node)) return yield* fail("not a class declaration");
|
|
4518
4530
|
const { Service, accessors: accessors2, className } = yield* pipe(
|
|
4519
4531
|
typeParser.extendsEffectService(node),
|
|
@@ -4522,12 +4534,18 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
|
|
|
4522
4534
|
);
|
|
4523
4535
|
if (accessors2 !== true) return yield* fail("accessors are not enabled in the Effect.Service call");
|
|
4524
4536
|
const involvedMembers = [];
|
|
4525
|
-
|
|
4526
|
-
|
|
4527
|
-
|
|
4528
|
-
|
|
4529
|
-
|
|
4530
|
-
|
|
4537
|
+
const nonPrimitiveServices = typeCheckerUtils.unrollUnionMembers(Service).filter(
|
|
4538
|
+
(_) => !(_.flags & ts.TypeFlags.Number || _.flags & ts.TypeFlags.String || _.flags & ts.TypeFlags.Boolean || _.flags & ts.TypeFlags.Literal)
|
|
4539
|
+
);
|
|
4540
|
+
if (nonPrimitiveServices.length === 0) return yield* fail("Service type is a primitive type");
|
|
4541
|
+
for (const serviceShape of nonPrimitiveServices) {
|
|
4542
|
+
for (const property of typeChecker.getPropertiesOfType(serviceShape)) {
|
|
4543
|
+
const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
|
|
4544
|
+
const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
|
|
4545
|
+
if (callSignatures.length > 0) {
|
|
4546
|
+
const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
|
|
4547
|
+
if (callSignatures.length > 1 || withTypeParameters.length > 0) involvedMembers.push({ property, propertyType });
|
|
4548
|
+
}
|
|
4531
4549
|
}
|
|
4532
4550
|
}
|
|
4533
4551
|
const hash2 = involvedMembers.map(({ property, propertyType }) => {
|
|
@@ -4573,6 +4591,7 @@ var accessors = createCodegen({
|
|
|
4573
4591
|
const tsUtils = yield* service(TypeScriptUtils);
|
|
4574
4592
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
4575
4593
|
const typeParser = yield* service(TypeParser);
|
|
4594
|
+
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
4576
4595
|
const nodeAndCommentRange = tsUtils.findNodeWithLeadingCommentAtPosition(sourceFile, textRange.pos);
|
|
4577
4596
|
if (!nodeAndCommentRange) return yield* fail(new CodegenNotApplicableError("no node and comment range"));
|
|
4578
4597
|
return yield* pipe(
|
|
@@ -4586,7 +4605,8 @@ var accessors = createCodegen({
|
|
|
4586
4605
|
provideService(TypeScriptApi, ts),
|
|
4587
4606
|
provideService(TypeScriptUtils, tsUtils),
|
|
4588
4607
|
provideService(TypeCheckerApi, typeChecker),
|
|
4589
|
-
provideService(TypeParser, typeParser)
|
|
4608
|
+
provideService(TypeParser, typeParser),
|
|
4609
|
+
provideService(TypeCheckerUtils, typeCheckerUtils)
|
|
4590
4610
|
)
|
|
4591
4611
|
})
|
|
4592
4612
|
),
|