@@ -1,3 +1,4 @@
1+{-# LANGUAGE LambdaCase #-}
12{-# LANGUAGE OverloadedStrings #-}
23{-# LANGUAGE PatternSynonyms #-}
34{-# LANGUAGE RecordWildCards #-}
@@ -9,8 +10,10 @@ module Ormolu.Printer.Meat.Module
910 )
1011where
1112
13+import BasicTypes hiding (InlinePragma)
1214import Control.Monad
1315import Data.Maybe (isJust)
16+import Data.Text (Text)
1417import GHC
1518import Ormolu.Imports
1619import Ormolu.Printer.Combinators
@@ -35,6 +38,7 @@ p_hsModule loc@(L moduleSpan hsModule) = do
3538 Nothing -> pure ()
3639 Just hsmodName' -> line $ do
3740 located hsmodName' p_hsmodName
41+ maybe (pure ()) (located' p_warningTxt) hsmodDeprecMessage
3842 case hsmodExports of
3943 Nothing -> return ()
4044 Just hsmodExports' -> do
@@ -59,6 +63,26 @@ p_hsModule loc@(L moduleSpan hsModule) = do
5963 when (trailingComments && isJust hsmodName) newline
6064 spitRemainingComments
6165
66+-- | Layout the WARNING/DEPRECATED pragmas in the module head
67+
68+p_warningTxt :: WarningTxt -> R ()
69+p_warningTxt = \case
70+ WarningTxt _ lits -> p_pragma "WARNING" lits
71+ DeprecatedTxt _ lits -> p_pragma "DEPRECATED" lits
72+ where
73+ p_pragma :: Text -> [Located StringLiteral] -> R ()
74+ p_pragma pragmaText lits = switchLayout (litsSpan lits) $ do
75+ breakpoint
76+ inci $ pragma (litsSpan lits) pragmaText (p_lits lits)
77+
78+ litsSpan :: [Located StringLiteral] -> SrcSpan
79+ litsSpan lits = combineSrcSpans (getLoc $ head lits) (getLoc $ last lits)
80+
81+ p_lits :: [Located StringLiteral] -> R ()
82+ p_lits = \case
83+ [l] -> atom l
84+ ls -> brackets . velt $ withSep comma atom ls
85+
6286-- | Determine if these declarations should be separated by a blank line.
6387
6488separatedDecls