mirror of
https://github.com/jfmengels/elm-review.git
synced 2024-12-18 07:01:48 +03:00
Add a moduleVisitor field to ProjectRuleSchema containing the module visitor data
This commit is contained in:
parent
4b0a56dd21
commit
2ab777e6f6
@ -719,6 +719,7 @@ type ProjectRuleSchema projectContext moduleContext
|
|||||||
, foldProjectContexts : projectContext -> projectContext -> projectContext
|
, foldProjectContexts : projectContext -> projectContext -> projectContext
|
||||||
}
|
}
|
||||||
, moduleVisitorCreators : List (ModuleRuleSchema {} moduleContext -> ModuleRuleSchema { hasAtLeastOneVisitor : () } moduleContext)
|
, moduleVisitorCreators : List (ModuleRuleSchema {} moduleContext -> ModuleRuleSchema { hasAtLeastOneVisitor : () } moduleContext)
|
||||||
|
, moduleVisitor : ModuleVisitor projectContext moduleContext
|
||||||
, elmJsonVisitors : List (Maybe { elmJsonKey : ElmJsonKey, project : Elm.Project.Project } -> projectContext -> ( List Error, projectContext ))
|
, elmJsonVisitors : List (Maybe { elmJsonKey : ElmJsonKey, project : Elm.Project.Project } -> projectContext -> ( List Error, projectContext ))
|
||||||
, readmeVisitors : List (Maybe { readmeKey : ReadmeKey, content : String } -> projectContext -> ( List Error, projectContext ))
|
, readmeVisitors : List (Maybe { readmeKey : ReadmeKey, content : String } -> projectContext -> ( List Error, projectContext ))
|
||||||
, dependenciesVisitors : List (Dict String Review.Project.Dependency.Dependency -> projectContext -> ( List Error, projectContext ))
|
, dependenciesVisitors : List (Dict String Review.Project.Dependency.Dependency -> projectContext -> ( List Error, projectContext ))
|
||||||
@ -727,6 +728,19 @@ type ProjectRuleSchema projectContext moduleContext
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
type ModuleVisitor projectContext moduleContext
|
||||||
|
= NoModuleVisitor
|
||||||
|
| HasVisitors (List (ModuleRuleSchema {} moduleContext -> ModuleRuleSchema { hasAtLeastOneVisitor : () } moduleContext))
|
||||||
|
| IsPrepared
|
||||||
|
{ visitors : List (ModuleRuleSchema {} moduleContext -> ModuleRuleSchema { hasAtLeastOneVisitor : () } moduleContext)
|
||||||
|
, moduleContext :
|
||||||
|
{ fromProjectToModule : ModuleKey -> Node ModuleName -> projectContext -> moduleContext
|
||||||
|
, fromModuleToProject : ModuleKey -> Node ModuleName -> moduleContext -> projectContext
|
||||||
|
, foldProjectContexts : projectContext -> projectContext -> projectContext
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
type TraversalType
|
type TraversalType
|
||||||
= AllModulesInParallel
|
= AllModulesInParallel
|
||||||
| ImportedModulesFirst
|
| ImportedModulesFirst
|
||||||
@ -935,6 +949,7 @@ newProjectRuleSchema name_ { moduleVisitor, initProjectContext, fromProjectToMod
|
|||||||
, foldProjectContexts = foldProjectContexts
|
, foldProjectContexts = foldProjectContexts
|
||||||
}
|
}
|
||||||
, moduleVisitorCreators = [ moduleVisitor ]
|
, moduleVisitorCreators = [ moduleVisitor ]
|
||||||
|
, moduleVisitor = NoModuleVisitor
|
||||||
, elmJsonVisitors = []
|
, elmJsonVisitors = []
|
||||||
, readmeVisitors = []
|
, readmeVisitors = []
|
||||||
, dependenciesVisitors = []
|
, dependenciesVisitors = []
|
||||||
@ -970,7 +985,50 @@ withModuleVisitors :
|
|||||||
-> ProjectRuleSchema projectContext moduleContext
|
-> ProjectRuleSchema projectContext moduleContext
|
||||||
-> ProjectRuleSchema projectContext moduleContext
|
-> ProjectRuleSchema projectContext moduleContext
|
||||||
withModuleVisitors visitor (ProjectRuleSchema schema) =
|
withModuleVisitors visitor (ProjectRuleSchema schema) =
|
||||||
ProjectRuleSchema { schema | moduleVisitorCreators = visitor :: schema.moduleVisitorCreators }
|
let
|
||||||
|
previousModuleVisitors : List (ModuleRuleSchema {} moduleContext -> ModuleRuleSchema { hasAtLeastOneVisitor : () } moduleContext)
|
||||||
|
previousModuleVisitors =
|
||||||
|
case schema.moduleVisitor of
|
||||||
|
NoModuleVisitor ->
|
||||||
|
[]
|
||||||
|
|
||||||
|
HasVisitors list ->
|
||||||
|
list
|
||||||
|
|
||||||
|
IsPrepared _ ->
|
||||||
|
[]
|
||||||
|
in
|
||||||
|
ProjectRuleSchema
|
||||||
|
{ schema
|
||||||
|
| moduleVisitorCreators = visitor :: schema.moduleVisitorCreators
|
||||||
|
, moduleVisitor = HasVisitors (visitor :: previousModuleVisitors)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
{-| TODO Documentation
|
||||||
|
-}
|
||||||
|
withModuleContext :
|
||||||
|
{ fromProjectToModule : ModuleKey -> Node ModuleName -> projectContext -> moduleContext
|
||||||
|
, fromModuleToProject : ModuleKey -> Node ModuleName -> moduleContext -> projectContext
|
||||||
|
, foldProjectContexts : projectContext -> projectContext -> projectContext
|
||||||
|
}
|
||||||
|
-> ProjectRuleSchema projectContext moduleContext
|
||||||
|
-> ProjectRuleSchema projectContext moduleContext
|
||||||
|
withModuleContext moduleContext (ProjectRuleSchema schema) =
|
||||||
|
let
|
||||||
|
visitors : List (ModuleRuleSchema {} moduleContext -> ModuleRuleSchema { hasAtLeastOneVisitor : () } moduleContext)
|
||||||
|
visitors =
|
||||||
|
case schema.moduleVisitor of
|
||||||
|
NoModuleVisitor ->
|
||||||
|
[]
|
||||||
|
|
||||||
|
HasVisitors list ->
|
||||||
|
list
|
||||||
|
|
||||||
|
IsPrepared _ ->
|
||||||
|
[]
|
||||||
|
in
|
||||||
|
ProjectRuleSchema { schema | moduleVisitor = IsPrepared { visitors = visitors, moduleContext = moduleContext } }
|
||||||
|
|
||||||
|
|
||||||
{-| Add a visitor to the [`ProjectRuleSchema`](#ProjectRuleSchema) which will visit the project's
|
{-| Add a visitor to the [`ProjectRuleSchema`](#ProjectRuleSchema) which will visit the project's
|
||||||
|
Loading…
Reference in New Issue
Block a user