misoton665 / elm-review-module-layer-dependency / NoViolationOfModuleLayerDependency

If you defined a layer dependency rule like A <- B, elm-review-module-layer-dependency will detect an error with below importing. ```elm module A

import B.Data ```

Module A depends on module B (A -> B) is a violation of defined rule.

Rule

rule : ModuleLayerDependency -> Review.Rule.Rule

Example configuration

config : List Rule
config =
    [ NoViolationOfModuleLayerDependency.rule moduleLayerRule
    ]


moduleLayerRule : ModuleLayerDependency
moduleLayerRule =
    ModuleLayerDependency
        [ infraLayer
        , applicationLayer
        , DefaultLayer
        , adapterLayer
        ]


adapterLayer : ModuleLayer
adapterLayer =
    ModuleLayer
        [ [ "Adapter" ]
        , [ "Main" ]
        ]


applicationLayer : ModuleLayer
applicationLayer =
    ModuleLayer
        [ [ "Application" ]
        ]


infraLayer : ModuleLayer
infraLayer =
    ModuleLayer
        [ [ "Infra" ]
        ]

Type


type ModuleLayer
    = ModuleLayer (List ModuleName)
    | DefaultLayer

Provide module name to define rule.

Example

A module Aaa.Bbb.Ccc define as ModuleLayer. ModuleLayer [ [ "Aaa", "Bbb", "Ccc" ] ]


type ModuleLayerDependency
    = ModuleLayerDependency (List ModuleLayer)

Provide layer to define rule.

Example

Define ModuleLayerDependency use firstLayer: ModuleLayer and secondLayer: ModuleLayer. [ firstLayer , secondLayer ]

It means dependency like firstLayer <- secondLayer. If imported secondLayer module in firstLayer, elm-review will detect an error.