Skip to content

RAN002 Generated union case tester in a Fable library

warning RAN002: policy.IsQueue calls a compiler-generated union tester, which a Fable precompiled assembly does not declare.

Cause. F# generates an IsCase property for each union case. A precompile of the library by Fable 5.21 or earlier that calls one fails with MethodDefNotFound for the getter, for public, internal and private unions alike. Fable 5.22 and Fickl 0.3.0 declare the testers, as does the pinned Fickl 0.5.3 (Fable 5.23). The rule runs in a project that Fable compiles (see Where the rules run) when its tool manifests declare fable before 5.22, a prerelease of 5.22 included, or declare no compiler, and reports every tester of a union declared in the project, generic unions included.

Fix. Match on the case. The rule's fix writes the match.

Triggers

module Example

type Policy =
    | Queue
    | Drop of int

let queued (policy: Policy) = policy.IsQueue

Fixed

module Example

type Policy =
    | Queue
    | Drop of int

let queued (policy: Policy) =
    match policy with
    | Queue -> true
    | _ -> false

Suppression. // fsharpanalyzer: ignore-line RAN002, with the reason on the line before.

Edit this page