hpython-0.1: example/Indentation.hs
{-# language DataKinds #-}
module Indentation where
import Control.Lens.Setter ((.~))
import Control.Lens.Plated (transform)
import GHC.Natural (Natural)
import Language.Python.Optics
import Language.Python.Syntax.Statement (Statement)
import Language.Python.Syntax.Whitespace (Whitespace (Space, Tab))
{-
These functions show how we can use Control.Lens.Plated to perform
whole-program transformations.
They're illustrative only, because these functions aren't enough to re-indent
all Python code properly. The _Indent optic is limited in where it can reach. See
Language.Python.Optics.Indents for more info.
-}
indentSpaces :: Natural -> Statement '[] a -> Statement '[] a
indentSpaces n = transform (_Indent .~ replicate (fromIntegral n) Space)
indentTabs :: Statement '[] a -> Statement '[] a
indentTabs = transform (_Indent .~ [Tab])