headroom-0.3.1.0: src/Headroom/Ext/Java.hs
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE QuasiQuotes #-}
{-# LANGUAGE TupleSections #-}
{-|
Module : Headroom.Ext.Java
Description : Extended support for /Java/ source code files
Copyright : (c) 2019-2020 Vaclav Svejcar
License : BSD-3-Clause
Maintainer : vaclav.svejcar@gmail.com
Stability : experimental
Portability : POSIX
This module provides /extended support/ for /Java/ source code files. Current
implementation includes extracting of /package name/ from currently processed
/Java/ source code file.
-}
module Headroom.Ext.Java
( extractVariables
, extractPackageName
)
where
import Headroom.Configuration.Types ( CtHeaderConfig )
import Headroom.Data.Regex ( match
, re
)
import Headroom.Data.TextExtra ( toLines )
import Headroom.Types ( TemplateMeta(..) )
import Headroom.Variables ( mkVariables )
import Headroom.Variables.Types ( Variables(..) )
import RIO
import RIO.Lens ( ix )
-- | Extracts name of /Java/ package from given source code file content.
--
-- >>> extractPackageName "package mypackage;\nclass Foo {}"
-- Just "mypackage"
extractPackageName :: Text
-- ^ input text
-> Maybe Text
-- ^ extracted package name
extractPackageName = go . toLines
where
go [] = Nothing
go (x : xs) = maybe (go xs) (^? ix 1) (match [re|^package (.*);$|] x)
-- | Extracts variables from /Java/ source code.
--
-- __List of Extracted Variables:__
--
-- * @___java_package_name__@ - name of the /Java/ package
extractVariables :: CtHeaderConfig
-- ^ license header configuration
-> Maybe TemplateMeta
-- ^ extracted metadata from corresponding /template/
-> Maybe (Int, Int)
-- ^ license header position @(startLine, endLine)@
-> Text
-- ^ input text
-> Variables
-- ^ extracted variables
extractVariables _ _ _ text = (mkVariables . catMaybes)
[("_java_package_name", ) <$> extractPackageName text]