diff --git a/.changeset/hot-walls-share.md b/.changeset/hot-walls-share.md new file mode 100644 index 00000000..441ef7ce --- /dev/null +++ b/.changeset/hot-walls-share.md @@ -0,0 +1,5 @@ +--- +"@effect/language-service": patch +--- + +Fix the class self mismatch diagnostic so it also reports invalid `ServiceMap.Service` self type parameters. diff --git a/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.classSelfMismatch_fix.from317to328.output b/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.classSelfMismatch_fix.from317to328.output new file mode 100644 index 00000000..1b6e3134 --- /dev/null +++ b/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.classSelfMismatch_fix.from317to328.output @@ -0,0 +1,12 @@ +// code fix classSelfMismatch_fix output for range 317 - 328 +import { ServiceMap, Effect } from "effect" + +export class CorrectName extends ServiceMap.Service Effect.Effect + readCache: Effect.Effect +}>()("CorrectName") {} + +export class WrongName extends ServiceMap.Service Effect.Effect + readCache: Effect.Effect +}>()("WrongName") {} diff --git a/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.codefixes b/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.codefixes new file mode 100644 index 00000000..5703d556 --- /dev/null +++ b/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.codefixes @@ -0,0 +1,3 @@ +classSelfMismatch_fix from 317 to 328 +classSelfMismatch_skipNextLine from 317 to 328 +classSelfMismatch_skipFile from 317 to 328 \ No newline at end of file diff --git a/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.output b/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.output new file mode 100644 index 00000000..3965451c --- /dev/null +++ b/packages/harness-effect-v4/__snapshots__/diagnostics/classSelfMismatch_service.ts.output @@ -0,0 +1,2 @@ +CorrectName +8:50 - 8:61 | 1 | Self type parameter should be 'WrongName' effect(classSelfMismatch) \ No newline at end of file diff --git a/packages/harness-effect-v4/examples/diagnostics/classSelfMismatch_service.ts b/packages/harness-effect-v4/examples/diagnostics/classSelfMismatch_service.ts new file mode 100644 index 00000000..8b834e89 --- /dev/null +++ b/packages/harness-effect-v4/examples/diagnostics/classSelfMismatch_service.ts @@ -0,0 +1,11 @@ +import { ServiceMap, Effect } from "effect" + +export class CorrectName extends ServiceMap.Service Effect.Effect + readCache: Effect.Effect +}>()("CorrectName") {} + +export class WrongName extends ServiceMap.Service Effect.Effect + readCache: Effect.Effect +}>()("WrongName") {} diff --git a/packages/language-service/src/diagnostics/classSelfMismatch.ts b/packages/language-service/src/diagnostics/classSelfMismatch.ts index 29e02475..5e3c91fa 100644 --- a/packages/language-service/src/diagnostics/classSelfMismatch.ts +++ b/packages/language-service/src/diagnostics/classSelfMismatch.ts @@ -32,6 +32,7 @@ export const classSelfMismatch = LSP.createDiagnostic({ // Check if this class extends a class that has a Self type parameter const result = yield* pipe( typeParser.extendsEffectService(node), + Nano.orElse(() => typeParser.extendsServiceMapService(node)), Nano.orElse(() => typeParser.extendsContextTag(node)), Nano.orElse(() => typeParser.extendsEffectTag(node)), Nano.orElse(() => typeParser.extendsSchemaClass(node)),