@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/README.md CHANGED
@@ -99,7 +99,8 @@ Few options can be provided alongside the initialization of the Language Service
99
99
  "goto": true, // controls Effect goto references (default: true)
100
100
  "allowedDuplicatedPackages": [], // list of package names that have effect in peer dependencies and are allowed to be duplicated (default: [])
101
101
  "barrelImportPackages": [], // package names that should be preferred as imported from the top level barrel file (default: [])
102
- "namespaceImportPackages": [] // package names that should be preferred as imported with namespace imports e.g. ["effect", "@effect/*"] (default: [])
102
+ "namespaceImportPackages": [], // package names that should be preferred as imported with namespace imports e.g. ["effect", "@effect/*"] (default: [])
103
+ "topLevelNamedReexports": "ignore" // for namespaceImportPackages, how should top level named re-exports (e.g. {pipe} from "effect") be treated? "ignore" will leave them as is, "follow" will rewrite them to the re-exported module (e.g. {pipe} from "effect/Function")
103
104
  }
104
105
  ]
105
106
  }
package/cli.js CHANGED
@@ -28786,7 +28786,8 @@ function parse4(config2) {
28786
28786
  goto: isObject(config2) && hasProperty(config2, "goto") && isBoolean(config2.goto) ? config2.goto : true,
28787
28787
  allowedDuplicatedPackages: isObject(config2) && hasProperty(config2, "allowedDuplicatedPackages") && isArray(config2.allowedDuplicatedPackages) && config2.allowedDuplicatedPackages.every(isString) ? config2.allowedDuplicatedPackages.map((_) => _.toLowerCase()) : [],
28788
28788
  namespaceImportPackages: isObject(config2) && hasProperty(config2, "namespaceImportPackages") && isArray(config2.namespaceImportPackages) && config2.namespaceImportPackages.every(isString) ? config2.namespaceImportPackages.map((_) => _.toLowerCase()) : [],
28789
- barrelImportPackages: isObject(config2) && hasProperty(config2, "barrelImportPackages") && isArray(config2.barrelImportPackages) && config2.barrelImportPackages.every(isString) ? config2.barrelImportPackages.map((_) => _.toLowerCase()) : []
28789
+ barrelImportPackages: isObject(config2) && hasProperty(config2, "barrelImportPackages") && isArray(config2.barrelImportPackages) && config2.barrelImportPackages.every(isString) ? config2.barrelImportPackages.map((_) => _.toLowerCase()) : [],
28790
+ topLevelNamedReexports: isObject(config2) && hasProperty(config2, "topLevelNamedReexports") && isString(config2.topLevelNamedReexports) && (config2.topLevelNamedReexports.toLowerCase() === "ignore" || config2.topLevelNamedReexports.toLowerCase() === "follow") ? config2.topLevelNamedReexports.toLowerCase() : "ignore"
28790
28791
  };
28791
28792
  }
28792
28793
 
@@ -30581,6 +30582,7 @@ function make64(ts2, tsUtils, typeChecker) {
30581
30582
  className: atLocation.name,
30582
30583
  selfTypeNode,
30583
30584
  args: wholeCall.arguments,
30585
+ options: wholeCall.arguments[1],
30584
30586
  accessors: accessors2,
30585
30587
  dependencies
30586
30588
  };
@@ -30816,9 +30818,11 @@ var floatingEffect = createDiagnostic({
30816
30818
  option4
30817
30819
  );
30818
30820
  if (isNone2(allowedFloatingEffects)) {
30821
+ const isStrictEffect = yield* option4(typeParser.strictEffectType(type2, node.expression));
30822
+ const name = isSome2(isStrictEffect) ? "Effect" : "Effect-able " + typeChecker.typeToString(type2);
30819
30823
  report({
30820
30824
  location: node,
30821
- messageText: `Effect must be yielded or assigned to a variable.`,
30825
+ messageText: `${name} must be yielded or assigned to a variable.`,
30822
30826
  fixes: []
30823
30827
  });
30824
30828
  }
@@ -31327,7 +31331,7 @@ var missingEffectServiceDependency = createDiagnostic({
31327
31331
  orElse14(() => void_8)
31328
31332
  );
31329
31333
  if (serviceResult) {
31330
- const { className, dependencies } = serviceResult;
31334
+ const { className, options: options3 } = serviceResult;
31331
31335
  const classSymbol = typeChecker.getSymbolAtLocation(className);
31332
31336
  if (classSymbol) {
31333
31337
  const classType = typeChecker.getTypeOfSymbol(classSymbol);
@@ -31348,11 +31352,17 @@ var missingEffectServiceDependency = createDiagnostic({
31348
31352
  excludeNever
31349
31353
  );
31350
31354
  const providedIndexes = /* @__PURE__ */ new Set();
31351
- const dependenciesToProcess = dependencies || [];
31352
- for (const depExpression of dependenciesToProcess) {
31353
- const depType = typeChecker.getTypeAtLocation(depExpression);
31355
+ const optionsType = typeChecker.getTypeAtLocation(options3);
31356
+ const dependenciesProperty = typeChecker.getPropertyOfType(optionsType, "dependencies");
31357
+ let types = [];
31358
+ if (dependenciesProperty) {
31359
+ const dependenciesTypes = typeChecker.getTypeOfSymbolAtLocation(dependenciesProperty, options3);
31360
+ const numberIndexType = dependenciesTypes.getNumberIndexType();
31361
+ types = numberIndexType ? unrollUnionMembers(numberIndexType) : [];
31362
+ }
31363
+ for (const depType of types) {
31354
31364
  const depLayerResult = yield* pipe(
31355
- typeParser.layerType(depType, depExpression),
31365
+ typeParser.layerType(depType, options3),
31356
31366
  orElse14(() => void_8)
31357
31367
  );
31358
31368
  if (depLayerResult) {
@@ -31439,7 +31449,7 @@ var missingReturnYieldStar = createDiagnostic({
31439
31449
  }] : [];
31440
31450
  report({
31441
31451
  location: node,
31442
- messageText: `Yielded Effect never succeeds, so it is best to use a 'return yield*' instead.`,
31452
+ 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.`,
31443
31453
  fixes: fix
31444
31454
  });
31445
31455
  }