[{"name":"BindingIsUsed","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Report introduced names that are associated with a thing but never referenced:\n\n  - variables in patterns\n  - let declared values and functions\n  - module declared values, functions, type aliases and choice types\n\nAn unused stray binding might be a sign that someone wanted to use it for something but didn't do so, yet.\nIf that's not the case, explicitly say so (usually by replacing the variable with `_` or removing the declaration)\n\n\n### not reported\n\n    a =\n        \\used ->\n            used\n\n    b used =\n        used\n\n    c (Variant ( _, { used } )) =\n        used\n\n    d argument =\n        case argument of\n            used ->\n                used\n\n    e =\n        let\n            { used } =\n                { used = 0 }\n        in\n        used\n\n    f =\n        let\n            used =\n                1\n        in\n        used\n\n\n### reported\n\n    a =\n        \\unused ->\n            \"\"\n\n    b unused =\n        \"\"\n\n    c (Variant ( _, { unused } )) =\n        \"\"\n\n    d argument =\n        case argument of\n            unused ->\n                \"\"\n\n    e =\n        let\n            { unused } =\n                x\n        in\n        \"\"\n\n    f =\n        let\n            unused =\n                1\n        in\n        \"\"\n\n    type ChoiceTypeUnused\n        = VariantUnused\n\n    type alias TypeALiasUnused =\n        String\n\n","type":"Review.Review"}],"binops":[]},{"name":"CommentDoesNotUseCertainMarks","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Sometimes, you have code that compiles and should be able to run but still requires\nattention in certain parts in the future.\n\nFor these, elm comments (single-line `--`, multi-line `{- -}`, documentation `{-| -}`)\ncan include words like `TODO`, `REPLACEME` or syntax like `- [ ]`.\n\nThe review does not inspect the `elm.json` summary, the change log or readme.\nFeel free to fork if these seem useful to you!\n\n\n### not reported with `review [ \"TODO\" ]`\n\n    error =\n        { ...\n        , fix = [] -- consider removing the problematic call\n        }\n\n\n### reported with `review [ \"TODO\" ]`\n\n    error =\n        { ...\n        , fix = [] -- TODO consider removing the problematic call\n        }\n\n","type":"List.List String.String -> Review.Review"}],"binops":[]},{"name":"DebugIsNotUsed","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Report using a member of [the `Debug` module](https://dark.elm.dmy.fr/packages/elm/core/latest/Debug)\n\n  - `Debug.todo` marks missing functionality which needs to be added gradually\n  - `Debug.log` is a quick and dirty way to display an elm value in the console\n    and can for example be used to inspect private (opaque) types.\n    It's nothing a published product should make use of.\n  - `Debug.toString` is a quick and dirty way to display an elm value anywhere,\n    similar to `Debug.log`\n\nUsing any `Debug` member also prevents compiling in optimized mode and publishing as a package.\n\n\n### reported\n\n    a =\n        \"\" |> Debug.log \"text\"\n\n    b =\n        Debug.todo \"\"\n\n    c =\n        1 |> Debug.toString\n\n\n### not reported\n\n    a =\n        consoleWarnPort \"text\"\n\n    c =\n        1 |> String.fromInt\n\n","type":"Review.Review"}],"binops":[]},{"name":"ImportExposingIsExplicit","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Enforces that all imports with exposes specify the member names\nand don't use the `exposing (..)` syntax to expose everything.\n\nWhen you import everything from a module without explicitly listing what you actually need,\nit becomes harder to know where a reference comes from and which \"domain\" it belongs to for example.\nTry using qualified imports like ModuleName.member or if that becomes too inconvenient, explicitly list what exposes you want to import for use without qualification.\n\n\n### reported\n\n    import Test exposing (..)\n\n    test =\n        test \"example\"\n            (\\() -> Expect.pass)\n\n\n### not reported\n\n    import Test exposing (test)\n\n    test =\n        test \"example\"\n            (\\() -> Expect.pass)\n\n","type":"Review.Review"}],"binops":[]},{"name":"LetValueOrFunctionIsTypeAnnotated","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Enforces that `let in` value/function declarations have a type annotation.\n\nType annotations help to quickly understand what's expected in the code, and it will help the compiler give better error messages.\n\nThis rule does not report _top-level_ declarations without a type annotation.\nFor that, enable [`ModuleValueOrFunctionIsTypeAnnotated`](ModuleValueOrFunctionIsTypeAnnotated).\n\n\n## reported\n\n    a : number\n    a =\n        let\n            b =\n                2\n        in\n        b\n\n\n## not reported\n\n    a =\n        let\n            b : number\n            b =\n                2\n        in\n        b\n\n","type":"Review.Review"}],"binops":[]},{"name":"ModuleAndExposesAreUsed","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Report exposed members of modules that aren't referenced outside of the module itself.\nIf there would be no exposed members left, report the whole module as unused.\n\nUnused code might be a sign that someone wanted to use it for something but didn't do so, yet.\nBut maybe you've since moved in a different direction,\nin which case allowing the unused code to sit can make it harder to find what's important.\n\nIf intended for future use, try gradually using it.\nIf intended as a very generic utility, try moving it into a package\n(possibly local-only, using `Review.ignoreErrorsForPathsWhere (String.startsWith \"your-local-package-source-directory\")`).\nIf you think you don't need it anymore or think it was added it prematurely, you can remove it.\n\n\n### reported\n\n    module Main exposing (main)\n\n    import A\n\n    main =\n        A.a\n\nusing\n\n    import A exposing (a, unusedExpose)\n\n    a =\n        unusedExpose\n\n    unusedExpose =\n        ...\n\n\n### not reported\n\n    module Main exposing (main)\n\n    import A\n\n    main =\n        A.a\n\nusing\n\n    import A exposing (a)\n\n    a =\n        private\n\n    private =\n        ...\n\n","type":"Review.Review"}],"binops":[]},{"name":"ModuleExposingIsExplicit","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Enforces that all module exposes specify the member names\nand don't use the `exposing (..)` syntax to expose everything.\n\nModules can have helpers for implementation details which the users of this module should not have to know about.\nTherefore, the API should be explicitly defined and as small as possible.\n\n\n### reported\n\n    module A exposing (..)\n\n    a =\n        \"\"\n\n\n### not reported\n\n    module A exposing (a)\n\n    a =\n        \"\"\n\n","type":"Review.Review"}],"binops":[]},{"name":"ModuleValueOrFunctionIsTypeAnnotated","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Enforce that all top-level value/function declarations have a type annotation.\n\nType annotations help to quickly understand what's expected in the code, and it will help the compiler give better error messages.\n\nTo also report `let in` declarations without a type annotation,\nadditionally enable [`LetValueOrFunctionIsTypeAnnotated`](LetValueOrFunctionIsTypeAnnotated).\n\n\n### reported\n\n    a =\n        1\n\n\n### not reported\n\n    b : number\n    b =\n        let\n            c =\n                2\n        in\n        c\n\n","type":"Review.Review"}],"binops":[]},{"name":"RecordTypeAliasConstructorFunctionIsNotUsed","comment":"\n\n@docs review\n\n","unions":[],"aliases":[],"values":[{"name":"review","comment":" Reports using a record type alias constructor function\nand suggests a fix that converts it a record.\n[Read about why](https://dark.elm.dmy.fr/packages/lue-bird/elm-no-record-type-alias-constructor-function/latest#why).\n\n\n## examples\n\n    type alias User =\n        { name : String, age : Int }\n\n    User \"Balsa\" 42\n\nwill be reported and automatically fixed:\n\n    { name = \"Balsa\", age = 42 }\n\nThe same goes for cases where only some or no arguments are applied:\n\n    map2 User\n        (field \"name\" string)\n        (field \"age\" int)\n\nfixed\n\n    map2 (\\name age -> { name = name, age = age })\n        (field \"name\" string)\n        (field \"age\" int)\n\n","type":"Review.Review"}],"binops":[]}]