@effect/language-service 0.33.2 → 0.34.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.33.2",
3
+ "version": "0.34.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
@@ -4308,6 +4308,68 @@ var outdatedEffectCodegen = createDiagnostic({
4308
4308
  })
4309
4309
  });
4310
4310
 
4311
+ // src/diagnostics/overriddenSchemaConstructor.ts
4312
+ var overriddenSchemaConstructor = createDiagnostic({
4313
+ name: "overriddenSchemaConstructor",
4314
+ code: 30,
4315
+ severity: "error",
4316
+ apply: fn("overriddenSchemaConstructor.apply")(function* (sourceFile, report) {
4317
+ const ts = yield* service(TypeScriptApi);
4318
+ const typeParser = yield* service(TypeParser);
4319
+ const typeChecker = yield* service(TypeCheckerApi);
4320
+ const nodeToVisit = [];
4321
+ const appendNodeToVisit = (node) => {
4322
+ nodeToVisit.push(node);
4323
+ return void 0;
4324
+ };
4325
+ ts.forEachChild(sourceFile, appendNodeToVisit);
4326
+ while (nodeToVisit.length > 0) {
4327
+ const node = nodeToVisit.shift();
4328
+ if (ts.isClassDeclaration(node) && node.heritageClauses) {
4329
+ let extendsSchema = false;
4330
+ for (const heritageClause of node.heritageClauses) {
4331
+ if (heritageClause.token === ts.SyntaxKind.ExtendsKeyword) {
4332
+ for (const type of heritageClause.types) {
4333
+ const typeAtLocation = typeChecker.getTypeAtLocation(type.expression);
4334
+ const isSchema = yield* pipe(
4335
+ typeParser.effectSchemaType(typeAtLocation, type.expression),
4336
+ map3(() => true),
4337
+ orElse2(() => succeed(false))
4338
+ );
4339
+ if (isSchema) {
4340
+ extendsSchema = true;
4341
+ break;
4342
+ }
4343
+ }
4344
+ }
4345
+ if (extendsSchema) break;
4346
+ }
4347
+ if (extendsSchema) {
4348
+ const members = node.members;
4349
+ for (const member of members) {
4350
+ if (ts.isConstructorDeclaration(member)) {
4351
+ report({
4352
+ location: member,
4353
+ messageText: "Classes extending Schema must not override the constructor",
4354
+ fixes: [{
4355
+ fixName: "overriddenSchemaConstructor_fix",
4356
+ description: "Remove the constructor override",
4357
+ apply: gen(function* () {
4358
+ const changeTracker = yield* service(ChangeTracker);
4359
+ changeTracker.delete(sourceFile, member);
4360
+ })
4361
+ }]
4362
+ });
4363
+ break;
4364
+ }
4365
+ }
4366
+ }
4367
+ }
4368
+ ts.forEachChild(node, appendNodeToVisit);
4369
+ }
4370
+ })
4371
+ });
4372
+
4311
4373
  // src/diagnostics/returnEffectInGen.ts
4312
4374
  var returnEffectInGen = createDiagnostic({
4313
4375
  name: "returnEffectInGen",
@@ -4826,6 +4888,7 @@ var diagnostics = [
4826
4888
  strictBooleanExpressions,
4827
4889
  multipleEffectProvide,
4828
4890
  outdatedEffectCodegen,
4891
+ overriddenSchemaConstructor,
4829
4892
  unsupportedServiceAccessors
4830
4893
  ];
4831
4894