headroom-0.3.1.0: src/Headroom/Ext.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-|
Module : Headroom.Ext
Description : Extended support for selected /file types/
Copyright : (c) 2019-2020 Vaclav Svejcar
License : BSD-3-Clause
Maintainer : vaclav.svejcar@gmail.com
Stability : experimental
Portability : POSIX
/Headroom/ provides /extended support/ for selected /file types/, which mean
not only basic management of /license headers/ based on /template files/ is
provided, but also some additional functionality is available. For example,
some extra data may be extracted from the processed /source code file/ and made
available to template via /template variables/
(e.g. /module name/ for /Haskell source code files/).
-}
module Headroom.Ext
( extractVariables
, extractTemplateMeta
)
where
import Headroom.Configuration.Types ( CtHeaderConfig )
import qualified Headroom.Ext.Haskell as Haskell
import qualified Headroom.Ext.Java as Java
import qualified Headroom.Ext.PureScript as PureScript
import Headroom.FileType.Types ( FileType(..) )
import Headroom.Template ( Template(..) )
import Headroom.Types ( TemplateMeta(..) )
import Headroom.Variables.Types ( Variables(..) )
import RIO
-- | Extracts variables specific to the file type (if supported), e.g. module
-- name for /Haskell/ source code. Currently supported file types are:
--
-- * /Haskell/ - implemented in "Headroom.Ext.Haskell"
-- * /Java/ - implemented in "Headroom.Ext.Java"
-- * /PureScript/ - implemented in "Headroom.Ext.PureScript"
extractVariables :: FileType
-- ^ type of the file
-> CtHeaderConfig
-- ^ license header configuration
-> Maybe TemplateMeta
-- ^ extracted metadata from corresponding /template/
-> Maybe (Int, Int)
-- ^ license header position @(startLine, endLine)@
-> Text
-- ^ text of the source code file
-> Variables
-- ^ extracted variables
extractVariables fileType = case fileType of
Haskell -> Haskell.extractVariables
Java -> Java.extractVariables
PureScript -> PureScript.extractVariables
_ -> mempty
-- | Extracts medatata from given /template/ for selected /file type/, which
-- might be later required by the 'extractVariables' function.
extractTemplateMeta :: (Template t)
=> FileType
-- ^ /file type/ for which this template will be used
-> t
-- ^ parsed /template/
-> Maybe TemplateMeta
-- ^ extracted template metadata
extractTemplateMeta Haskell tmpl = Just $ Haskell.extractTemplateMeta tmpl
extractTemplateMeta _ _ = Nothing