Import style GHC plugin
The plugin helps to unify imports style via compile warnings/errors
Tested with:
Usage
Yaml config
Enable plugin in your cabal file:
build-depends: ..., import-style-plugin, ...
ghc-options: -fplugin ImportStylePlugin.Yaml -fplugin-opt ImportStylePlugin.Yaml:<path-to-config>
Write config:
qualificationStyle: Post | Pre | null
bannedModules:
Module.Name:
severity: Error | Warning
why: string with ban reason
importRules:
DataModuleName:
severity: Error | Warning
rules:
- qualification: Required | Forbidden | null
aliases:
exactly:
- Module.Alias
- Alias
- Module.Alias
- Alias
importedNames:
whitelist:
- pattern (:|>)
- type (+)
- foo
blacklist:
- pattern (:|>)
- type (+)
- foo
Here is example:
qualificationStyle: Post
bannedModules:
Data.Map:
severity: Error
why: Use 'Data.Map.Strict'
importRules:
Data.Text:
severity: Warning
rules:
- qualification: Required
aliases:
exactly:
- Text
- qualification: Forbidden
importedNames:
whitelist:
- Text
Derived plugin
It can be useful if you have a lot of projects with one style. So you haven't to copy paste config but just use style as library
- Create library package
- Add to deps
import-style-plugin
- Create module
YourPlugin.hs
(or something like that, it's unimportant)
- Put there
module YourPlugin where
import ImportStylePlugin.Derived qualified as Derived
import ImportStylePlugin.Config as Cfg
plugin = Derived.plugin
ImportsStyle
{ qualificationStyle = ...
, bannedModules = ...
, importRules = ...
}
- Plug in
build-depends: ..., your-import-style-plugin, ...
ghc-options: -fplugin YourPlugin
Tips
Custom warning
Since ghc-9.8 the plugin introduces custom warning x-import-style
. So if you set -Werror
but still want to style warnings be warnings use ghc option -Wwarn=x-import-style
. You also can disable at all warnings with -Wno-x-import-style