@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/index.js
CHANGED
|
@@ -1194,10 +1194,10 @@ function makeTypeScriptUtils(ts) {
|
|
|
1194
1194
|
if (!hasProperty(packageJsonScope.contents, "packageJsonContent")) return;
|
|
1195
1195
|
const packageJsonContent = packageJsonScope.contents.packageJsonContent;
|
|
1196
1196
|
if (!hasProperty(packageJsonContent, "name")) return;
|
|
1197
|
-
if (!hasProperty(packageJsonContent, "version")) return;
|
|
1198
1197
|
if (!hasProperty(packageJsonScope, "packageDirectory")) return;
|
|
1199
1198
|
if (!isString(packageJsonScope.packageDirectory)) return;
|
|
1200
|
-
const { name
|
|
1199
|
+
const { name } = packageJsonContent;
|
|
1200
|
+
const version = hasProperty(packageJsonScope, "version") ? packageJsonScope.version : "";
|
|
1201
1201
|
if (!isString(name)) return;
|
|
1202
1202
|
if (!isString(version)) return;
|
|
1203
1203
|
const hasEffectInPeerDependencies = hasProperty(packageJsonContent, "peerDependencies") && isObject(packageJsonContent.peerDependencies) && hasProperty(packageJsonContent.peerDependencies, "effect");
|
|
@@ -1219,9 +1219,20 @@ function makeTypeScriptUtils(ts) {
|
|
|
1219
1219
|
exportsKeys
|
|
1220
1220
|
};
|
|
1221
1221
|
}
|
|
1222
|
-
function resolveModulePattern(sourceFile, pattern) {
|
|
1222
|
+
function resolveModulePattern(program, sourceFile, pattern) {
|
|
1223
1223
|
if (pattern.indexOf("*") === -1) return [pattern.toLowerCase()];
|
|
1224
|
-
|
|
1224
|
+
let packageJsonScope = parsePackageContentNameAndVersionFromScope(sourceFile);
|
|
1225
|
+
if (!packageJsonScope && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath) && hasProperty(ts, "getTemporaryModuleResolutionState") && isFunction2(ts.getTemporaryModuleResolutionState) && hasProperty(ts, "getPackageScopeForPath") && isFunction2(ts.getPackageScopeForPath)) {
|
|
1226
|
+
const temporaryModuleResolutionState = ts.getTemporaryModuleResolutionState(
|
|
1227
|
+
void 0,
|
|
1228
|
+
program,
|
|
1229
|
+
program.getCompilerOptions()
|
|
1230
|
+
);
|
|
1231
|
+
packageJsonScope = parsePackageContentNameAndVersionFromScope({
|
|
1232
|
+
...sourceFile,
|
|
1233
|
+
packageJsonScope: ts.getPackageScopeForPath(sourceFile.fileName, temporaryModuleResolutionState)
|
|
1234
|
+
});
|
|
1235
|
+
}
|
|
1225
1236
|
const referencedPackages = [];
|
|
1226
1237
|
for (const statement of sourceFile.statements) {
|
|
1227
1238
|
if (ts.isImportDeclaration(statement) && ts.isStringLiteral(statement.moduleSpecifier)) {
|
|
@@ -3583,6 +3594,7 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
|
|
|
3583
3594
|
const ts = yield* service(TypeScriptApi);
|
|
3584
3595
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
3585
3596
|
const typeParser = yield* service(TypeParser);
|
|
3597
|
+
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
3586
3598
|
if (!ts.isClassDeclaration(node)) return yield* fail("not a class declaration");
|
|
3587
3599
|
const { Service, accessors: accessors2, className } = yield* pipe(
|
|
3588
3600
|
typeParser.extendsEffectService(node),
|
|
@@ -3591,12 +3603,18 @@ var parse2 = fn("writeTagClassAccessors.parse")(function* (node) {
|
|
|
3591
3603
|
);
|
|
3592
3604
|
if (accessors2 !== true) return yield* fail("accessors are not enabled in the Effect.Service call");
|
|
3593
3605
|
const involvedMembers = [];
|
|
3594
|
-
|
|
3595
|
-
|
|
3596
|
-
|
|
3597
|
-
|
|
3598
|
-
|
|
3599
|
-
|
|
3606
|
+
const nonPrimitiveServices = typeCheckerUtils.unrollUnionMembers(Service).filter(
|
|
3607
|
+
(_) => !(_.flags & ts.TypeFlags.Number || _.flags & ts.TypeFlags.String || _.flags & ts.TypeFlags.Boolean || _.flags & ts.TypeFlags.Literal)
|
|
3608
|
+
);
|
|
3609
|
+
if (nonPrimitiveServices.length === 0) return yield* fail("Service type is a primitive type");
|
|
3610
|
+
for (const serviceShape of nonPrimitiveServices) {
|
|
3611
|
+
for (const property of typeChecker.getPropertiesOfType(serviceShape)) {
|
|
3612
|
+
const propertyType = typeChecker.getTypeOfSymbolAtLocation(property, node);
|
|
3613
|
+
const callSignatures = typeChecker.getSignaturesOfType(propertyType, ts.SignatureKind.Call);
|
|
3614
|
+
if (callSignatures.length > 0) {
|
|
3615
|
+
const withTypeParameters = callSignatures.filter((_) => _.typeParameters && _.typeParameters.length > 0);
|
|
3616
|
+
if (callSignatures.length > 1 || withTypeParameters.length > 0) involvedMembers.push({ property, propertyType });
|
|
3617
|
+
}
|
|
3600
3618
|
}
|
|
3601
3619
|
}
|
|
3602
3620
|
const hash2 = involvedMembers.map(({ property, propertyType }) => {
|
|
@@ -3642,6 +3660,7 @@ var accessors = createCodegen({
|
|
|
3642
3660
|
const tsUtils = yield* service(TypeScriptUtils);
|
|
3643
3661
|
const typeChecker = yield* service(TypeCheckerApi);
|
|
3644
3662
|
const typeParser = yield* service(TypeParser);
|
|
3663
|
+
const typeCheckerUtils = yield* service(TypeCheckerUtils);
|
|
3645
3664
|
const nodeAndCommentRange = tsUtils.findNodeWithLeadingCommentAtPosition(sourceFile, textRange.pos);
|
|
3646
3665
|
if (!nodeAndCommentRange) return yield* fail(new CodegenNotApplicableError("no node and comment range"));
|
|
3647
3666
|
return yield* pipe(
|
|
@@ -3655,7 +3674,8 @@ var accessors = createCodegen({
|
|
|
3655
3674
|
provideService(TypeScriptApi, ts),
|
|
3656
3675
|
provideService(TypeScriptUtils, tsUtils),
|
|
3657
3676
|
provideService(TypeCheckerApi, typeChecker),
|
|
3658
|
-
provideService(TypeParser, typeParser)
|
|
3677
|
+
provideService(TypeParser, typeParser),
|
|
3678
|
+
provideService(TypeCheckerUtils, typeCheckerUtils)
|
|
3659
3679
|
)
|
|
3660
3680
|
})
|
|
3661
3681
|
),
|
|
@@ -4029,7 +4049,7 @@ var importFromBarrel = createDiagnostic({
|
|
|
4029
4049
|
const program = yield* service(TypeScriptProgram);
|
|
4030
4050
|
const packageNamesToCheck = flatten(
|
|
4031
4051
|
languageServicePluginOptions.namespaceImportPackages.map(
|
|
4032
|
-
(packageName) => tsUtils.resolveModulePattern(sourceFile, packageName)
|
|
4052
|
+
(packageName) => tsUtils.resolveModulePattern(program, sourceFile, packageName)
|
|
4033
4053
|
)
|
|
4034
4054
|
);
|
|
4035
4055
|
const isImportedFromBarrelExport = (element) => {
|
|
@@ -5767,7 +5787,7 @@ var makeAutoImportProvider = fn("TypeScriptApi")(function* (fromSourceFile) {
|
|
|
5767
5787
|
const collectImportCache = fn("TypeScriptApi")(
|
|
5768
5788
|
function* (packagePatterns, kind, topLevelNamedReexports) {
|
|
5769
5789
|
for (const packagePattern of packagePatterns) {
|
|
5770
|
-
const packageNames = tsUtils.resolveModulePattern(fromSourceFile, packagePattern);
|
|
5790
|
+
const packageNames = tsUtils.resolveModulePattern(program, fromSourceFile, packagePattern);
|
|
5771
5791
|
for (const packageName of packageNames) {
|
|
5772
5792
|
const packageInfo = getPackageInfo(fromSourceFile.fileName, packageName);
|
|
5773
5793
|
if (!packageInfo) continue;
|