hpython-0.2: example/Recase.hs
{-# language TypeApplications #-}
module Recase (recase) where
import Control.Lens.Setter (over)
import Control.Lens.Plated (transform)
import Data.Char (toUpper)
import qualified Data.Text.IO as Text
import Language.Python.Parse
import Language.Python.Optics.Idents
import Language.Python.Render (showModule)
import Language.Python.Syntax (identValue)
snakeToCamel :: String -> String
snakeToCamel =
transform $
\s -> case s of
'_' : c : cs -> toUpper c : cs
_ -> s
recase :: IO ()
recase = do
m <- readModule @(ParseError SrcInfo) "example/snake_cased.py"
case m of
Failure err -> error $ show err
Success a -> do
let fixed = over (_Idents.identValue) snakeToCamel a
Text.putStrLn $ showModule fixed