@effect/language-service 0.31.1 → 0.32.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect/language-service",
3
- "version": "0.31.1",
3
+ "version": "0.32.0",
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
@@ -1125,7 +1125,8 @@ function parse(config) {
1125
1125
  goto: isObject(config) && hasProperty(config, "goto") && isBoolean(config.goto) ? config.goto : true,
1126
1126
  allowedDuplicatedPackages: isObject(config) && hasProperty(config, "allowedDuplicatedPackages") && isArray(config.allowedDuplicatedPackages) && config.allowedDuplicatedPackages.every(isString) ? config.allowedDuplicatedPackages.map((_) => _.toLowerCase()) : [],
1127
1127
  namespaceImportPackages: isObject(config) && hasProperty(config, "namespaceImportPackages") && isArray(config.namespaceImportPackages) && config.namespaceImportPackages.every(isString) ? config.namespaceImportPackages.map((_) => _.toLowerCase()) : [],
1128
- barrelImportPackages: isObject(config) && hasProperty(config, "barrelImportPackages") && isArray(config.barrelImportPackages) && config.barrelImportPackages.every(isString) ? config.barrelImportPackages.map((_) => _.toLowerCase()) : []
1128
+ barrelImportPackages: isObject(config) && hasProperty(config, "barrelImportPackages") && isArray(config.barrelImportPackages) && config.barrelImportPackages.every(isString) ? config.barrelImportPackages.map((_) => _.toLowerCase()) : [],
1129
+ topLevelNamedReexports: isObject(config) && hasProperty(config, "topLevelNamedReexports") && isString(config.topLevelNamedReexports) && (config.topLevelNamedReexports.toLowerCase() === "ignore" || config.topLevelNamedReexports.toLowerCase() === "follow") ? config.topLevelNamedReexports.toLowerCase() : "ignore"
1129
1130
  };
1130
1131
  }
1131
1132
 
@@ -2920,6 +2921,7 @@ function make2(ts, tsUtils, typeChecker) {
2920
2921
  className: atLocation.name,
2921
2922
  selfTypeNode,
2922
2923
  args: wholeCall.arguments,
2924
+ options: wholeCall.arguments[1],
2923
2925
  accessors: accessors2,
2924
2926
  dependencies
2925
2927
  };
@@ -3155,9 +3157,11 @@ var floatingEffect = createDiagnostic({
3155
3157
  option
3156
3158
  );
3157
3159
  if (isNone2(allowedFloatingEffects)) {
3160
+ const isStrictEffect = yield* option(typeParser.strictEffectType(type, node.expression));
3161
+ const name = isSome2(isStrictEffect) ? "Effect" : "Effect-able " + typeChecker.typeToString(type);
3158
3162
  report({
3159
3163
  location: node,
3160
- messageText: `Effect must be yielded or assigned to a variable.`,
3164
+ messageText: `${name} must be yielded or assigned to a variable.`,
3161
3165
  fixes: []
3162
3166
  });
3163
3167
  }
@@ -3666,7 +3670,7 @@ var missingEffectServiceDependency = createDiagnostic({
3666
3670
  orElse2(() => void_)
3667
3671
  );
3668
3672
  if (serviceResult) {
3669
- const { className, dependencies } = serviceResult;
3673
+ const { className, options } = serviceResult;
3670
3674
  const classSymbol = typeChecker.getSymbolAtLocation(className);
3671
3675
  if (classSymbol) {
3672
3676
  const classType = typeChecker.getTypeOfSymbol(classSymbol);
@@ -3687,11 +3691,17 @@ var missingEffectServiceDependency = createDiagnostic({
3687
3691
  excludeNever
3688
3692
  );
3689
3693
  const providedIndexes = /* @__PURE__ */ new Set();
3690
- const dependenciesToProcess = dependencies || [];
3691
- for (const depExpression of dependenciesToProcess) {
3692
- const depType = typeChecker.getTypeAtLocation(depExpression);
3694
+ const optionsType = typeChecker.getTypeAtLocation(options);
3695
+ const dependenciesProperty = typeChecker.getPropertyOfType(optionsType, "dependencies");
3696
+ let types = [];
3697
+ if (dependenciesProperty) {
3698
+ const dependenciesTypes = typeChecker.getTypeOfSymbolAtLocation(dependenciesProperty, options);
3699
+ const numberIndexType = dependenciesTypes.getNumberIndexType();
3700
+ types = numberIndexType ? unrollUnionMembers(numberIndexType) : [];
3701
+ }
3702
+ for (const depType of types) {
3693
3703
  const depLayerResult = yield* pipe(
3694
- typeParser.layerType(depType, depExpression),
3704
+ typeParser.layerType(depType, options),
3695
3705
  orElse2(() => void_)
3696
3706
  );
3697
3707
  if (depLayerResult) {
@@ -3778,7 +3788,7 @@ var missingReturnYieldStar = createDiagnostic({
3778
3788
  }] : [];
3779
3789
  report({
3780
3790
  location: node,
3781
- messageText: `Yielded Effect never succeeds, so it is best to use a 'return yield*' instead.`,
3791
+ messageText: `It is recommended to use return yield* for Effects that never succeed to signal a definitive exit point for type narrowing and tooling support.`,
3782
3792
  fixes: fix
3783
3793
  });
3784
3794
  }