@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
|
@@ -1224,10 +1224,10 @@ function makeTypeScriptUtils(ts) {
|
|
|
1224
1224
|
if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
|
|
1225
1225
|
const packageJsonContent = packageJsonScope.contents.packageJsonContent;
|
|
1226
1226
|
if (!hasProperty(packageJsonContent, "name")) return;
|
|
1227
|
-
if (!hasProperty(packageJsonContent, "version")) return;
|
|
1228
1227
|
if (!hasProperty(packageJsonScope, "packageDirectory")) return;
|
|
1229
1228
|
if (!isString(packageJsonScope.packageDirectory)) return;
|
|
1230
|
-
const { name
|
|
1229
|
+
const { name } = packageJsonContent;
|
|
1230
|
+
const version = hasProperty(packageJsonScope, "version") ? packageJsonScope.version : "";
|
|
1231
1231
|
if (!isString(name)) return;
|
|
1232
1232
|
if (!isString(version)) return;
|
|
1233
1233
|
const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
|
|
@@ -1249,9 +1249,20 @@ function makeTypeScriptUtils(ts) {
|
|
|
1249
1249
|
exportsKeys
|
|
1250
1250
|
};
|
|
1251
1251
|
}
|
|
1252
|
-
function resolveModulePattern(sourceFile, pattern) {
|
|
1252
|
+
function resolveModulePattern(program, sourceFile, pattern) {
|
|
1253
1253
|
if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
|
|
1254
|
-
|
|
1254
|
+
let packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
|
|
1255
|
+
if (!packageJsonScope && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath) && hasProperty(ts, "getTemporaryModuleResolutionState") && isFunction2(ts.getTemporaryModuleResolutionState) && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath)) {
|
|
1256
|
+
const temporaryModuleResolutionState = ts.getTemporaryModuleResolutionState(
|
|
1257
|
+
void 0,
|
|
1258
|
+
program,
|
|
1259
|
+
program.getCompilerOptions()
|
|
1260
|
+
);
|
|
1261
|
+
packageJsonScope = parsePackageContentNameAndVersionFromScope({
|
|
1262
|
+
...sourceFile,
|
|
1263
|
+
packageJsonScope: ts.getPackageScopeForPath(sourceFile.fileName, temporaryModuleResolutionState)
|
|
1264
|
+
});
|
|
1265
|
+
}
|
|
1255
1266
|
const referencedPackages = [];
|
|
1256
1267
|
for (const statement of sourceFile.statements) {
|
|
1257
1268
|
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
|
),
|