Skip to content

Conversation

@renovate
Copy link
Contributor

@renovate renovate bot commented Sep 29, 2025

Note: This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Change Age Confidence
@effect/cli (source) 0.69.2 -> 0.72.1 age confidence
@effect/language-service 0.40.0 -> 0.60.0 age confidence
@effect/platform (source) 0.90.10 -> 0.93.6 age confidence
@effect/platform-node (source) 0.96.1 -> 0.103.0 age confidence
@effect/sql (source) 0.44.2 -> 0.48.6 age confidence
@effect/sql-clickhouse (source) 0.38.1 -> 0.45.0 age confidence
@effect/sql-mysql2 (source) 0.45.1 -> 0.49.1 age confidence
@effect/sql-pg (source) 0.45.1 -> 0.49.7 age confidence
@effect/vitest (source) 0.25.1 -> 0.27.0 age confidence
effect (source) 3.17.14 -> 3.19.9 age confidence

Release Notes

Effect-TS/effect (@​effect/cli)

v0.72.1

Compare Source

Patch Changes

v0.72.0

Compare Source

Patch Changes

v0.71.0

Compare Source

Patch Changes

v0.70.0

Compare Source

Patch Changes
Effect-TS/language-service (@​effect/language-service)

v0.60.0

Compare Source

Minor Changes
  • #​523 46ec3e1 Thanks @​mattiamanzati! - Add configurable mermaid provider option

    Adds a new mermaidProvider configuration option that allows users to choose between different Mermaid diagram providers:

    • "mermaid.com" - Uses mermaidchart.com
    • "mermaid.live" - Uses mermaid.live (default)
    • Custom URL - Allows specifying a custom provider URL (e.g., "http://localhost:8080" for local mermaid-live-editor)

    This enhances flexibility for users who prefer different Mermaid visualization services or need to use self-hosted instances.

v0.59.0

Compare Source

Minor Changes
  • #​518 660549d Thanks @​mattiamanzati! - Add new schemaStructWithTag diagnostic that suggests using Schema.TaggedStruct instead of Schema.Struct when a _tag field with Schema.Literal is present. This makes the tag optional in the constructor, improving the developer experience.

    Example:

    // Before (triggers diagnostic)
    export const User = Schema.Struct({
      _tag: Schema.Literal("User"),
      name: Schema.String,
      age: Schema.Number,
    });
    
    // After (applying quick fix)
    export const User = Schema.TaggedStruct("User", {
      name: Schema.String,
      age: Schema.Number,
    });

    The diagnostic includes a quick fix that automatically converts the Schema.Struct call to Schema.TaggedStruct, extracting the tag value and removing the _tag property from the fields.

Patch Changes
  • #​521 61f28ba Thanks @​mattiamanzati! - Fix auto-completion for directly imported Effect APIs. Completions now work when using direct imports like import { Service } from "effect/Effect" instead of only working with fully qualified names like Effect.Service.

    This fix applies to:

    • Effect.Service and Effect.Tag from effect/Effect
    • Schema.Class, Schema.TaggedError, Schema.TaggedClass, and Schema.TaggedRequest from effect/Schema
    • Data.TaggedError and Data.TaggedClass from effect/Data
    • Context.Tag from effect/Context

    Example:

    // Now works with direct imports
    import { Service } from "effect/Effect"
    export class MyService extends Service // ✓ Completion available
    
    // Still works with fully qualified names
    import * as Effect from "effect/Effect"
    export class MyService extends Effect.Service // ✓ Completion available

    Fixes #​394

v0.58.4

Compare Source

Patch Changes
  • #​515 b77b7e5 Thanks @​mattiamanzati! - Fix toggle type annotation and toggle return type annotation refactors to handle unnamed/unresolved types

    The refactors now use ts.NodeBuilderFlags.IgnoreErrors flag when generating type annotations, allowing them to work correctly with types that have errors or are unnamed (e.g., Schema.Struct({ ... }).make). This prevents the refactors from failing when the type contains unresolved references or complex type expressions.

  • #​514 ddabde2 Thanks @​mattiamanzati! - Fix symbol resolution for aliased module exports. The TypeParser now correctly handles cases where symbols are exported from a module with an alias, improving the accuracy of type analysis for Effect modules.

v0.58.3

Compare Source

Patch Changes
  • #​512 e3dc38e Thanks @​mattiamanzati! - Fix type annotation context resolution in toggle refactors. When toggling type annotations or return type annotations, the refactors now correctly use the enclosing declaration node as context instead of the local node, which improves type resolution and prevents issues with type parameter scope.

v0.58.2

Compare Source

Patch Changes
  • #​510 9064174 Thanks @​mattiamanzati! - Extend anyUnknownInErrorContext diagnostic to also check Layer types

    The anyUnknownInErrorContext diagnostic now checks both Effect and Layer types for any or unknown in their error and requirements channels. This helps catch more cases where type information is being lost in your Effect applications.

    Example:

    const effectUnknown = Effect.context<unknown>();
    const layerUnknown = Layer.effectDiscard(effectUnknown);
    // Now reports: This has unknown in the requirements channel which is not recommended.

    The diagnostic also now skips explicit Layer type annotations to avoid false positives on intentional type declarations.

v0.58.1

Compare Source

Patch Changes
  • #​508 1a4446c Thanks @​mattiamanzati! - Fix anyUnknownInErrorContext diagnostic to exclude JSX elements from reporting false positives. The diagnostic will no longer incorrectly flag JSX tag names, self-closing elements, opening/closing elements, and attribute names.

    Example:

    // Before: Would incorrectly report diagnostic on <MyComponent />
    const element = <MyComponent />;
    
    // After: No diagnostic, JSX elements are properly excluded
    const element = <MyComponent />;

v0.58.0

Compare Source

Minor Changes
  • #​505 31cff49 Thanks @​clayroach! - Enhance diagnostics CLI command with new options for CI/CD integration and tooling:

    • --format: Output format selection (json, pretty, text, github-actions)

      • json: Machine-readable JSON output with structured diagnostics and summary
      • pretty: Colored output with context (default, original behavior)
      • text: Plain text output without colors
      • github-actions: GitHub Actions workflow commands for inline PR annotations
    • --strict: Treat warnings as errors (affects exit code)

    • --severity: Filter diagnostics by severity level (comma-separated: error, warning, message)

    • Exit codes: Returns exit code 1 when errors are found (or warnings in strict mode)

    Example usage:

    # JSON output for CI/CD pipelines
    effect-language-service diagnostics --project tsconfig.json --format json
    
    # GitHub Actions with inline annotations
    effect-language-service diagnostics --project tsconfig.json --format github-actions
    
    # Strict mode for CI (fail on warnings)
    effect-language-service diagnostics --project tsconfig.json --strict
    
    # Only show errors
    effect-language-service diagnostics --project tsconfig.json --severity error

    Closes Effect-TS/effect #​5180.

v0.57.1

Compare Source

Patch Changes
  • #​503 857e43e Thanks @​mattiamanzati! - Add codefix to runEffectInsideEffect diagnostic that automatically transforms Effect.run* calls to use Runtime.run* when inside nested Effect contexts. The codefix will extract or reuse an existing Effect runtime and replace the direct Effect run call with the appropriate Runtime method.

    Example:

    // Before
    Effect.gen(function* () {
      websocket.onmessage = (event) => {
        Effect.runPromise(check);
      };
    });
    
    // After applying codefix
    Effect.gen(function* () {
      const effectRuntime = yield* Effect.runtime<never>();
    
      websocket.onmessage = (event) => {
        Runtime.runPromise(effectRuntime, check);
      };
    });

v0.57.0

Compare Source

Minor Changes
  • #​500 acc2d43 Thanks @​mattiamanzati! - Add new annotate codegen that automatically adds type annotations to exported constants based on their initializer types. This codegen can be used by adding // @&#8203;effect-codegens annotate comments above variable declarations.

    Example:

    // @&#8203;effect-codegens annotate
    export const test = Effect.gen(function* () {
      if (Math.random() < 0.5) {
        return yield* Effect.fail("error");
      }
      return 1 as const;
    });
    // Becomes:
    // @&#8203;effect-codegens annotate:5fce15f7af06d924
    export const test: Effect.Effect<1, string, never> = Effect.gen(function* () {
      if (Math.random() < 0.5) {
        return yield* Effect.fail("error");
      }
      return 1 as const;
    });

    The codegen automatically detects the type from the initializer and adds the appropriate type annotation, making code more explicit and type-safe.

  • #​497 b188b74 Thanks @​mattiamanzati! - Add new diagnostic unnecessaryFailYieldableError that warns when using yield* Effect.fail() with yieldable error types. The diagnostic suggests yielding the error directly instead of wrapping it with Effect.fail(), as yieldable errors (like Data.TaggedError and Schema.TaggedError) can be yielded directly in Effect generators.

    Example:

    // ❌ Unnecessary Effect.fail wrapper
    yield * Effect.fail(new DataTaggedError());
    
    // ✅ Direct yield of yieldable error
    yield * new DataTaggedError();

v0.56.0

Compare Source

Minor Changes
  • #​494 9b3edf0 Thanks @​mattiamanzati! - Add codegen CLI command to automatically update Effect codegens

    This release introduces a new CLI command effect-language-service codegen that allows you to automatically update Effect codegens in your TypeScript files from the command line. The command scans files containing @effect-codegens directives and applies the necessary code transformations.

    Usage:

    • effect-language-service codegen --file <path> - Update a specific file
    • effect-language-service codegen --project <tsconfig.json> - Update all files in a project
    • effect-language-service codegen --verbose - Show detailed output during processing

    Example:

    # Update a single file
    effect-language-service codegen --file src/MyService.ts
    
    # Update entire project
    effect-language-service codegen --project tsconfig.json --verbose

    This is particularly useful for CI/CD pipelines or batch processing scenarios where you want to ensure all codegens are up-to-date without manual editor intervention.

v0.55.5

Compare Source

Patch Changes
  • #​492 f2d2748 Thanks @​mattiamanzati! - Fixed duplicate edges in layer outline graph that could occur when multiple type assignments matched between layer nodes

v0.55.4

Compare Source

Patch Changes
  • #​490 7d2e6dc Thanks @​mattiamanzati! - Optimize getTypeAtLocation usage to reduce unnecessary calls on non-expression nodes. This improves performance by ensuring type checking is only performed on expression nodes and adds additional null safety checks for symbol resolution.

v0.55.3

Compare Source

Patch Changes
  • #​488 53eedea Thanks @​mattiamanzati! - Fixed @effect-diagnostics-next-line comment directive to properly work with diagnostics on property assignments within object literals. Previously, the directive would not suppress diagnostics for properties in the middle of an object literal.

  • #​486 3830d48 Thanks @​mattiamanzati! - Fixed quick info feature to properly display Effect type parameters when hovering over code. This resolves issues where the quick info would fail to show Success, Failure, and Requirements types in certain contexts.

  • #​489 42ce900 Thanks @​mattiamanzati! - Allow to override Schema constructor as long parameters are just redirected

v0.55.2

Compare Source

Patch Changes
  • #​484 7c18fa8 Thanks @​mattiamanzati! - Fix edge cases in missedPipeableOpportunity diagnostic where it incorrectly flagged valid code patterns. The diagnostic now properly:
    • Excludes pipe function calls from chain detection
    • Ignores chains where the function returns a callable type (avoiding false positives for higher-order functions like Schedule.whileOutput)

v0.55.1

Compare Source

Patch Changes
  • #​482 9695bdf Thanks @​mattiamanzati! - Fix missedPipeableOpportunity diagnostic to correctly detect nested function call chains

    The diagnostic now properly identifies when nested function calls can be converted to pipeable style. Previously, the chain detection logic incorrectly tracked parent-child relationships, causing false positives. This fix ensures that only valid pipeable chains are reported, such as toString(double(addOne(5))) which can be refactored to addOne(5).pipe(double, toString).

    Example:

    // Before: incorrectly flagged or missed
    identity(Schema.decodeUnknown(MyStruct)({ x: 42, y: 42 }));
    
    // After: correctly handles complex nested calls
    toString(double(addOne(5))); // ✓ Now correctly detected as pipeable

v0.55.0

Compare Source

Minor Changes
  • #​478 9a9d5f9 Thanks @​mattiamanzati! - Add runEffectInsideEffect diagnostic to warn when using Effect.runSync, Effect.runPromise, Effect.runFork, or Effect.runCallback inside an Effect context (such as Effect.gen, Effect.fn, or Effect.fnUntraced).

    Running effects inside effects is generally not recommended as it breaks the composability of the Effect system. Instead, developers should extract the Runtime and use Runtime.runSync, Runtime.runPromise, etc., or restructure their code to avoid running effects inside effects.

    Example:

    // ❌ Will trigger diagnostic
    export const program = Effect.gen(function* () {
      const data = yield* Effect.succeed(42);
      const result = Effect.runSync(Effect.sync(() => data * 2)); // Not recommended
      return result;
    });
    
    // ✅ Proper approach - extract runtime
    export const program = Effect.gen(function* () {
      const data = yield* Effect.succeed(42);
      const runtime = yield* Effect.runtime();
      const result = Runtime.runSync(runtime)(Effect.sync(() => data * 2));
      return result;
    });
    
    // ✅ Better approach - compose effects
    export const program = Effect.gen(function* () {
      const data = yield* Effect.succeed(42);
      const result = yield* Effect.sync(() => data * 2);
      return result;
    });
  • #​480 f1a0ece Thanks @​mattiamanzati! - Add schemaUnionOfLiterals diagnostic to warn when using Schema.Union with multiple Schema.Literal calls that can be simplified to a single Schema.Literal call.

    This diagnostic helps improve code readability and maintainability by suggesting a more concise syntax for union of literals.

    Example:

    // ❌ Will trigger diagnostic
    export const Status = Schema.Union(Schema.Literal("A"), Schema.Literal("B"));
    
    // ✅ Simplified approach
    export const Status = Schema.Literal("A", "B");
Patch Changes
  • #​481 160e018 Thanks @​mattiamanzati! - Update Effect ecosystem dependencies to latest versions:

    • @effect/cli: 0.71.0 → 0.72.0
    • @effect/platform: 0.92.1 → 0.93.0
    • @effect/platform-node: 0.98.3 → 0.99.0
    • @effect/printer-ansi: 0.46.0 → 0.47.0
    • @effect/rpc: 0.71.0 → 0.72.0
    • effect: Updated to stable version 3.19.0

    Also updated development tooling dependencies:

    • vitest: 3.2.4 → 4.0.6
    • @vitest/coverage-v8: 3.2.4 → 4.0.6
    • TypeScript ESLint packages: 8.46.1 → 8.46.3
    • Various other minor dependency updates

v0.54.0

Compare Source

Minor Changes
  • #​476 9d5028c Thanks @​mattiamanzati! - Add unknownInEffectCatch diagnostic to warn when catch callbacks in Effect.tryPromise, Effect.tryMap, or Effect.tryMapPromise return unknown or any types. This helps ensure proper error typing by encouraging developers to wrap unknown errors into Effect's Data.TaggedError or narrow down the type to the specific error being raised.

    Example:

    // ❌ Will trigger diagnostic
    const program = Effect.tryPromise({
      try: () => fetch("http://something"),
      catch: (e) => e, // returns unknown
    });
    
    // ✅ Proper typed error
    class MyError extends Data.TaggedError("MyError")<{ cause: unknown }> {}
    
    const program = Effect.tryPromise({
      try: () => fetch("http://something"),
      catch: (e) => new MyError({ cause: e }),
    });
Patch Changes
  • #​475 9f2425e Thanks @​mattiamanzati! - Fix TSC patching mode to properly filter diagnostics by module name. The reportSuggestionsAsWarningsInTsc option now only affects the TSC module and not the TypeScript module, preventing suggestions from being incorrectly reported in non-TSC contexts.

v0.53.3

Compare Source

Patch Changes
  • #​473 b29eca5 Thanks @​mattiamanzati! - Fix memory leak in CLI diagnostics by properly disposing language services when they change between batches.

    The CLI diagnostics command now tracks the language service instance and disposes of it when a new instance is created, preventing memory accumulation during batch processing of large codebases.

  • #​474 06b9ac1 Thanks @​mattiamanzati! - Fix TSC patching mode to properly enable diagnosticsName option and simplify suggestion handling.

    When using the language service in TSC patching mode, the diagnosticsName option is now automatically enabled to ensure diagnostic rule names are included in the output. Additionally, the handling of suggestion-level diagnostics has been simplified - when reportSuggestionsAsWarningsInTsc is enabled, suggestions are now converted to Message category instead of Warning category with a prefix.

    This change ensures consistent diagnostic formatting across both IDE and CLI usage modes.

  • #​471 be70748 Thanks @​mattiamanzati! - Improve CLI diagnostics output formatting by displaying rule names in a more readable format.

    The CLI now displays diagnostic rule names using the format effect(ruleName): instead of TS<code>:, making it easier to identify which Effect diagnostic rule triggered the error. Additionally, the CLI now disables the diagnosticsName option internally to prevent duplicate rule name display in the message text.

    Example output:

    Before: TS90001: Floating Effect detected...
    After:  effect(floatingEffect): Floating Effect detected...
    

v0.53.2

Compare Source

Patch Changes
  • #​469 f27be56 Thanks @​mattiamanzati! - Add reportSuggestionsAsWarningsInTsc configuration option to allow suggestions and messages to be reported as warnings in TypeScript compiler.

    When enabled, diagnostics with "suggestion" or "message" severity will be upgraded to "warning" severity with a "[suggestion]" prefix in the message text. This is useful for CI/CD pipelines where you want to enforce suggestion-level diagnostics as warnings in the TypeScript compiler output.

    Example configuration:

    {
      "compilerOptions": {
        "plugins": [
          {
            "name": "@&#8203;effect/language-service",
            "reportSuggestionsAsWarningsInTsc": true
          }
        ]
      }
    }

v0.53.1

Compare Source

Patch Changes
  • #​467 c2f6e50 Thanks @​mattiamanzati! - Fix layer graph display improvements: properly render newlines in mermaid diagrams using <br/> tags, and improve readability by displaying variable declaration names instead of full expressions when available.

    Example: Instead of showing the entire pipe(Database.Default, Layer.provideMerge(UserRepository.Default)) expression in the graph node, it now displays the cleaner variable name AppLive when the layer is assigned to a variable.

v0.53.0

Compare Source

Minor Changes
  • #​466 e76e9b9 Thanks @​mattiamanzati! - Add support for following symbols in Layer Graph visualization

    The layer graph feature now supports following symbol references to provide deeper visualization of layer dependencies. This is controlled by the new layerGraphFollowDepth configuration option (default: 0).

    Example:

    // With layerGraphFollowDepth: 1
    export const myLayer = otherLayer.pipe(Layer.provide(DbConnection.Default));
    // Now visualizes the full dependency tree by following the 'otherLayer' reference
Patch Changes

v0.52.1

Compare Source

Patch Changes

v0.52.0

Compare Source

Minor Changes
  • #​460 1ac81a0 Thanks @​mattiamanzati! - Add new diagnostic catchUnfailableEffect to warn when using catch functions on effects that never fail

    This diagnostic detects when catch error handling functions are applied to effects that have a never error type (meaning they cannot fail). It supports all Effect catch variants:

    • Effect.catchAll
    • Effect.catch
    • Effect.catchIf
    • Effect.catchSome
    • Effect.catchTag
    • Effect.catchTags

    Example:

    // Will trigger diagnostic
    const example = Effect.succeed(42).pipe(
      Effect.catchAll(() => Effect.void) // <- Warns here
    );
    
    // Will not trigger diagnostic
    const example2 = Effect.fail("error").pipe(
      Effect.catchAll(() => Effect.succeed(42))
    );

    The diagnostic works in both pipeable style (Effect.succeed(x).pipe(Effect.catchAll(...))) and data-first style (pipe(Effect.succeed(x), Effect.catchAll(...))), analyzing the error type at each position in the pipe chain.

  • #​458 372a9a7 Thanks @​mattiamanzati! - Refactor TypeParser internals to use symbol-based navigation instead of type-based navigation

    This change improves the reliability and performance of the TypeParser by switching from type-based navigation to symbol-based navigation when identifying Effect, Schema, and other Effect ecosystem APIs. The new implementation:

    • Uses TypeScript's symbol resolution APIs to accurately identify imports and references
    • Supports package name resolution to verify that identifiers actually reference the correct packages
    • Implements proper alias resolution for imported symbols
    • Adds caching for source file package information lookups
    • Provides new helper methods like isNodeReferenceToEffectModuleApi and isNodeReferenceToEffectSchemaModuleApi

    This is an internal refactoring that doesn't change the public API or functionality, but provides a more robust foundation for the language service features.

v0.51.1

Compare Source

Patch Changes
  • #​456 ddc3da8 Thanks @​mattiamanzati! - Bug fix for layer graph: properly display dependencies when they reference themselves

    The layer graph now correctly identifies and displays dependencies even when using type assignment compatibility (e.g., when a layer provides a base type and another layer requires a subtype).

v0.51.0

Compare Source

Minor Changes
  • #​452 fb0ae8b Thanks @​mattiamanzati! - Add strictEffectProvide diagnostic to warn when using Effect.provide with Layer outside of application entry points

    This new diagnostic helps developers identify potential scope lifetime issues by detecting when Effect.provide is called with a Layer argument in locations that are not application entry points.

    Example:

    // Will trigger diagnostic
    export const program = Effect.void.pipe(Effect.provide(MyService.Default));

    Message:

    Effect.provide with a Layer should only be used at application entry points. If this is an entry point, you can safely disable this diagnostic. Otherwise, using Effect.provide may break scope lifetimes. Compose all layers at your entry point and provide them at once.

    Configuration:

    • Default severity: "off" (opt-in)
    • Diagnostic name: strictEffectProvide

    This diagnostic is disabled by default and can be enabled via tsconfig.json:

    {
      "compilerOptions": {
        "plugins": [
          {
            "name": "@&#8203;effect/language-service",
            "diagnosticSeverity": {
              "strictEffectProvide": "warning"
            }
          }
        ]
      }
    }
Patch Changes

v0.50.0

Compare Source

Minor Changes
  • #​450 3994aaf Thanks @​mattiamanzati! - Add new diagnostic to detect nested function calls that can be converted to pipeable style

    The new missedPipeableOpportunity diagnostic identifies nested function calls that would be more readable when converted to Effect's pipeable style. For example:

    // Detected pattern:
    toString(double(addOne(5)));
    
    // Can be converted to:
    addOne(5).pipe(double, toString);

    This diagnostic helps maintain consistent code style and improves readability by suggesting the more idiomatic pipeable approach when multiple functions are chained together.

v0.49.0

Compare Source

Minor Changes
Patch Changes
  • #​449 ff11b7d Thanks @​mattiamanzati! - Update effect package version to 97ff1dc. This version improves handling of special characters in layer graph mermaid diagrams by properly escaping HTML entities (parentheses, braces, quotes) to ensure correct rendering.

v0.48.0

Compare Source

Minor Changes
  • #​441 ed1db9e Thanks @​mattiamanzati! - Add default-hashed pattern for deterministic keys

    A new default-hashed pattern option is now available for service and error key patterns. This pattern works like the default pattern but hashes the resulting string, which is useful when you want deterministic keys but are concerned about potentially exposing service names in builds.

    Example configuration:

    {
      "keyPatterns": [
        { "target": "service", "pattern": "default-hashed" },
        { "target": "error", "pattern": "default-hashed" }
      ]
    }
Patch Changes
  • #​442 44f4304 Thanks @​mattiamanzati! - Tone down try/catch message to ignore try/finally blocks

  • #​439 b73c231 Thanks @​mattiamanzati! - Fix regression in type unification for union types and prevent infinite recursion in layerMagic refactor

    • Fixed toggleTypeAnnotation refactor to properly unify boolean types instead of expanding them to true | false
    • Fixed infinite recursion issue in layerMagic refactor's adjustedNode function when processing variable and property declarations

v0.47.3

Compare Source

Patch Changes
  • #​437 e583192 Thanks @​mattiamanzati! - In toggle return type refactors, skip type parameters if they are the same as the function default in some cases.

v0.47.2

Compare Source

Patch Changes

v0.47.1

Compare Source

Patch Changes
  • #​431 acbbc55 Thanks @​mattiamanzati! - Fix nested project references relative paths in CLI diagnostics command

    The CLI diagnostics command now correctly resolves paths for nested project references by:

    • Using absolute paths when parsing tsconfig files
    • Correctly resolving the base directory for relative paths in project references
    • Processing files in batches to improve memory usage and prevent leaks

v0.47.0

Compare Source

Minor Changes
  • #​429 351d7fb Thanks @​mattiamanzati! - Add new diagnostics CLI command to check Effect-specific diagnostics for files or projects

    The new effect-language-service diagnostics command provides a way to get Effect-specific diagnostics through the CLI without patching your TypeScript installation. It supports:

    • --file option to get diagnostics for a specific file
    • --project option with a tsconfig file to check an entire project

    The command outputs diagnostics in the same format as the TypeScript compiler, showing errors, warnings, and messages with their locations and descriptions.

v0.46.0

Compare Source

Minor Changes
  • #​424 4bbfdb0 Thanks @​mattiamanzati! - Add support to mark a service as "leakable" via JSDoc tag. Services marked with @effect-leakable-service will be excluded from the leaking requirements diagnostic, allowing requirements that are expected to be provided per method invocation (e.g. HttpServerRequest).

    Example:

    /**
     * @&#8203;effect-leakable-service
     */
    export class FileSystem extends Context.Tag("FileSystem")<
      FileSystem,
      {
        writeFile: (content: string) => Effect.Effect<void>;
      }
    >() {}
  • #​428 ebaa8e8 Thanks @​mattiamanzati! - Add diagnostic to warn when @effect-diagnostics-next-line comments have no effect. This helps identify unused suppression comments that don't actually suppress any diagnostics, improving code cleanliness.

    The new missingDiagnosticNextLine option controls the severity of this diagnostic (default: "warning"). Set to "off" to disable.

    Example:

    // This comment will trigger a warning because it doesn't suppress any diagnostic
    // @&#8203;effect-diagnostics-next-line effect/floatingEffect:off
    const x = 1;
    
    // This comment is correctly suppressing a diagnostic
    // @&#8203;effect-diagnostics-next-line effect/floatingEffect:off
    Effect.succeed(1);
Patch Changes
  • #​426 22717bd Thanks @​mattiamanzati! - Improve Layer Magic refactor with enhanced dependency sorting and cycle detection

    The Layer Magic refactor now includes:

    • Better handling of complex layer composition scenarios
    • Support for detecting missing layer implementations with helpful error messages

v0.45.1

Compare Source

Patch Changes
  • #​423 70d8734 Thanks @​mattiamanzati! - Add code fix to rewrite Schema class constructor overrides as static 'new' methods

    When detecting constructor overrides in Schema classes, the diagnostic now provides a new code fix option that automatically rewrites the constructor as a static 'new' method. This preserves the custom initialization logic while maintaining Schema's decoding behavior.

    Example:

    // Before (with constructor override)
    class MyClass extends Schema.Class<MyClass>("MyClass")({ a: Schema.Number }) {
      b: number;
      constructor() {
        super({ a: 42 });
        this.b = 56;
      }
    }
    
    // After (using static 'new' method)
    class MyClass extends Schema.Class<MyClass>("MyClass")({ a: Schema.Number }) {
      b: number;
      public static new() {
        const _this = new this({ a: 42 });
        _this.b = 56;
        return _this;
      }
    }
  • #​421 8c455ed Thanks @​mattiamanzati! - Update dependencies to their latest versions including Effect 3.18.4, TypeScript 5.9.3, and various ESLint and build tooling packages

v0.45.0

Compare Source

Minor Changes
  • #​419 7cd7216 Thanks @​mattiamanzati! - Add support for custom APIs in deterministicKeys diagnostic using the @effect-identifier JSDoc tag.

    You can now enforce deterministic keys in custom APIs that follow an extends MyApi("identifier") pattern by:

    • Adding extendedKeyDetection: true to plugin options to enable detection
    • Marking the identifier parameter with /** @&#8203;effect-identifier */ JSDoc tag

    Example:

    export 

Configuration

📅 Schedule: Branch creation - Between 12:00 AM and 03:59 AM, only on Monday ( * 0-3 * * 1 ) (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Enabled.

Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate bot enabled auto-merge (squash) September 29, 2025 02:36
@renovate renovate bot force-pushed the renovate/effect branch 7 times, most recently from e289b7b to d022421 Compare October 6, 2025 06:01
@renovate renovate bot force-pushed the renovate/effect branch 7 times, most recently from 6f36999 to 1d3beaf Compare October 13, 2025 04:48
@renovate renovate bot force-pushed the renovate/effect branch 7 times, most recently from dbe6f48 to 62653a3 Compare October 20, 2025 20:41
@renovate renovate bot force-pushed the renovate/effect branch 5 times, most recently from 2d3b972 to 77d44d4 Compare October 27, 2025 04:28
@renovate renovate bot force-pushed the renovate/effect branch 3 times, most recently from 206510d to bafab57 Compare October 30, 2025 11:12
@renovate renovate bot force-pushed the renovate/effect branch 7 times, most recently from d23bb1e to c73c664 Compare November 17, 2025 22:49
@renovate renovate bot force-pushed the renovate/effect branch 6 times, most recently from 41a23a3 to 7e84e9d Compare November 26, 2025 21:31
@renovate renovate bot force-pushed the renovate/effect branch 13 times, most recently from 5d3a6f6 to 498cb1e Compare December 3, 2025 12:59
@renovate renovate bot force-pushed the renovate/effect branch 2 times, most recently from 51b8834 to cc65a4b Compare December 8, 2025 05:16
@renovate renovate bot force-pushed the renovate/effect branch from cc65a4b to 2838410 Compare December 8, 2025 09:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant