| Safe Haskell | None |
|---|---|
| Language | GHC2021 |
Development.IDE.GHC.ExactPrint
Contents
Description
This module hosts various abstractions and utility functions to work with ghc-exactprint.
Synopsis
- newtype Graft (m :: Type -> Type) a = Graft {
- runGraft :: DynFlags -> a -> TransformT m a
- graftDecls :: HasDecls a => SrcSpan -> [LHsDecl GhcPs] -> Graft (Either String) a
- graftDeclsWithM :: forall a (m :: Type -> Type). (HasDecls a, MonadFail m) => SrcSpan -> (LHsDecl GhcPs -> TransformT m (Maybe [LHsDecl GhcPs])) -> Graft m a
- annotate :: ASTElement l ast => DynFlags -> Bool -> LocatedAn l ast -> TransformT (Either String) (LocatedAn l ast)
- annotateDecl :: DynFlags -> LHsDecl GhcPs -> TransformT (Either String) (LHsDecl GhcPs)
- hoistGraft :: (forall x. m x -> n x) -> Graft m a -> Graft n a
- graftWithM :: forall ast (m :: Type -> Type) a l. (MonadFail m, Data a, ASTElement l ast) => SrcSpan -> (LocatedAn l ast -> TransformT m (Maybe (LocatedAn l ast))) -> Graft m a
- graftExprWithM :: forall (m :: Type -> Type) a. (MonadFail m, Data a) => SrcSpan -> (LHsExpr GhcPs -> TransformT m (Maybe (LHsExpr GhcPs))) -> Graft m a
- genericGraftWithSmallestM :: forall (m :: Type -> Type) a ast. (Monad m, Data a, Typeable ast) => Proxy (Located ast) -> SrcSpan -> (DynFlags -> ast -> GenericM (TransformT m)) -> Graft m a
- genericGraftWithLargestM :: forall (m :: Type -> Type) a ast. (Monad m, Data a, Typeable ast) => Proxy (Located ast) -> SrcSpan -> (DynFlags -> ast -> GenericM (TransformT m)) -> Graft m a
- graftSmallestDeclsWithM :: HasDecls a => SrcSpan -> (LHsDecl GhcPs -> TransformT (Either String) (Maybe [LHsDecl GhcPs])) -> Graft (Either String) a
- transform :: DynFlags -> ClientCapabilities -> VersionedTextDocumentIdentifier -> Graft (Either String) ParsedSource -> ParsedSource -> Either String WorkspaceEdit
- transformM :: Monad m => DynFlags -> ClientCapabilities -> VersionedTextDocumentIdentifier -> Graft (ExceptStringT m) ParsedSource -> ParsedSource -> m (Either String WorkspaceEdit)
- class Typeable a => ExactPrint a where
- getAnnotationEntry :: a -> Entry
- setAnnotationAnchor :: a -> Anchor -> [TrailingAnn] -> EpAnnComments -> a
- exact :: forall (m :: Type -> Type) w. (Monad m, Monoid w) => a -> EP w m a
- modifySmallestDeclWithM :: (HasDecls a, Monad m) => (SrcSpan -> m Bool) -> (LHsDecl GhcPs -> TransformT m ([LHsDecl GhcPs], r)) -> a -> TransformT m (a, Maybe r)
- modifyMgMatchesT :: forall (m :: Type -> Type). Monad m => MatchGroup GhcPs (LHsExpr GhcPs) -> (LMatch GhcPs (LHsExpr GhcPs) -> TransformT m (LMatch GhcPs (LHsExpr GhcPs))) -> TransformT m (MatchGroup GhcPs (LHsExpr GhcPs))
- modifyMgMatchesT' :: Monad m => MatchGroup GhcPs (LHsExpr GhcPs) -> (LMatch GhcPs (LHsExpr GhcPs) -> TransformT m (LMatch GhcPs (LHsExpr GhcPs), r)) -> r -> (r -> r -> m r) -> TransformT m (MatchGroup GhcPs (LHsExpr GhcPs), r)
- modifySigWithM :: forall a (m :: Type -> Type). (HasDecls a, Monad m, ExactPrint a) => IdP GhcPs -> (LHsSigType GhcPs -> LHsSigType GhcPs) -> a -> TransformT m a
- genAnchor1 :: Anchor
- setPrecedingLines :: LocatedAn t a -> Int -> Int -> LocatedAn t a
- addParens :: Bool -> NameAnn -> NameAnn
- addParensToCtxt :: Maybe EpaLocation -> AnnContext -> AnnContext
- modifyAnns :: LocatedAn a ast -> (a -> a) -> LocatedAn a ast
- removeComma :: SrcSpanAnnA -> SrcSpanAnnA
- eqSrcSpan :: SrcSpan -> SrcSpan -> Bool
- epl :: Int -> EpaLocation
- epAnn :: SrcSpan -> ann -> EpAnn ann
- removeTrailingComma :: GenLocated SrcSpanAnnA ast -> GenLocated SrcSpanAnnA ast
- annotateParsedSource :: ParsedModule -> ParsedSource
- getAnnotatedParsedSourceRule :: Recorder (WithPriority Log) -> Rules ()
- data GetAnnotatedParsedSource = GetAnnotatedParsedSource
- class (Data ast, Typeable l, Outputable l, Outputable ast) => ASTElement l ast | ast -> l where
- newtype ExceptStringT (m :: Type -> Type) a = ExceptStringT {
- runExceptString :: ExceptT String m a
- data TransformT (m :: Type -> Type) a
- data Log = LogShake Log
Documentation
newtype Graft (m :: Type -> Type) a #
A transformation for grafting source trees together. Use the semigroup
instance to combine Grafts, and run them via transform.
Constructors
| Graft | |
Fields
| |
graftDeclsWithM :: forall a (m :: Type -> Type). (HasDecls a, MonadFail m) => SrcSpan -> (LHsDecl GhcPs -> TransformT m (Maybe [LHsDecl GhcPs])) -> Graft m a #
annotate :: ASTElement l ast => DynFlags -> Bool -> LocatedAn l ast -> TransformT (Either String) (LocatedAn l ast) #
Given an LHSExpr, compute its exactprint annotations.
Note that this function will throw away any existing annotations (and format)
annotateDecl :: DynFlags -> LHsDecl GhcPs -> TransformT (Either String) (LHsDecl GhcPs) #
Given an LHsDecl, compute its exactprint annotations.
hoistGraft :: (forall x. m x -> n x) -> Graft m a -> Graft n a #
graftWithM :: forall ast (m :: Type -> Type) a l. (MonadFail m, Data a, ASTElement l ast) => SrcSpan -> (LocatedAn l ast -> TransformT m (Maybe (LocatedAn l ast))) -> Graft m a #
graftExprWithM :: forall (m :: Type -> Type) a. (MonadFail m, Data a) => SrcSpan -> (LHsExpr GhcPs -> TransformT m (Maybe (LHsExpr GhcPs))) -> Graft m a #
Arguments
| :: forall (m :: Type -> Type) a ast. (Monad m, Data a, Typeable ast) | |
| => Proxy (Located ast) | The type of nodes we'd like to consider when finding the smallest. |
| -> SrcSpan | |
| -> (DynFlags -> ast -> GenericM (TransformT m)) | |
| -> Graft m a |
Run the given transformation only on the smallest node in the tree that
contains the SrcSpan.
Arguments
| :: forall (m :: Type -> Type) a ast. (Monad m, Data a, Typeable ast) | |
| => Proxy (Located ast) | The type of nodes we'd like to consider when finding the largest. |
| -> SrcSpan | |
| -> (DynFlags -> ast -> GenericM (TransformT m)) | |
| -> Graft m a |
Run the given transformation only on the largest node in the tree that
contains the SrcSpan.
graftSmallestDeclsWithM :: HasDecls a => SrcSpan -> (LHsDecl GhcPs -> TransformT (Either String) (Maybe [LHsDecl GhcPs])) -> Graft (Either String) a #
transform :: DynFlags -> ClientCapabilities -> VersionedTextDocumentIdentifier -> Graft (Either String) ParsedSource -> ParsedSource -> Either String WorkspaceEdit #
Convert a Graft into a WorkspaceEdit.
transformM :: Monad m => DynFlags -> ClientCapabilities -> VersionedTextDocumentIdentifier -> Graft (ExceptStringT m) ParsedSource -> ParsedSource -> m (Either String WorkspaceEdit) #
Convert a Graft into a WorkspaceEdit.
class Typeable a => ExactPrint a where #
An AST fragment with an annotation must be able to return the
requirements for nesting another one, captured in an Entry, and
to be able to use the rest of the exactprint machinery to print the
element. In the analogy to Outputable, exact plays the role of
ppr.
Methods
getAnnotationEntry :: a -> Entry #
setAnnotationAnchor :: a -> Anchor -> [TrailingAnn] -> EpAnnComments -> a #
exact :: forall (m :: Type -> Type) w. (Monad m, Monoid w) => a -> EP w m a #
Instances
modifySmallestDeclWithM :: (HasDecls a, Monad m) => (SrcSpan -> m Bool) -> (LHsDecl GhcPs -> TransformT m ([LHsDecl GhcPs], r)) -> a -> TransformT m (a, Maybe r) #
Replace the smallest declaration whose SrcSpan satisfies the given condition with a new list of declarations.
For example, if you would like to move a where-clause-defined variable to the same level as its parent HsDecl, you could use this function.
When matching declaration is found in the sub-declarations of a, `Just r` is also returned with the new a.
If no declaration matched, then Nothing is returned.
modifyMgMatchesT :: forall (m :: Type -> Type). Monad m => MatchGroup GhcPs (LHsExpr GhcPs) -> (LMatch GhcPs (LHsExpr GhcPs) -> TransformT m (LMatch GhcPs (LHsExpr GhcPs))) -> TransformT m (MatchGroup GhcPs (LHsExpr GhcPs)) #
Modify each LMatch in a MatchGroup
modifyMgMatchesT' :: Monad m => MatchGroup GhcPs (LHsExpr GhcPs) -> (LMatch GhcPs (LHsExpr GhcPs) -> TransformT m (LMatch GhcPs (LHsExpr GhcPs), r)) -> r -> (r -> r -> m r) -> TransformT m (MatchGroup GhcPs (LHsExpr GhcPs), r) #
Modify the each LMatch in a MatchGroup
modifySigWithM :: forall a (m :: Type -> Type). (HasDecls a, Monad m, ExactPrint a) => IdP GhcPs -> (LHsSigType GhcPs -> LHsSigType GhcPs) -> a -> TransformT m a #
Modify the type signature for the given IdP. This function handles splitting a multi-sig SigD into multiple SigD if the type signature is changed.
For example, update the type signature for foo from Int to Bool:
- foo :: Int + foo :: Bool
- foo, bar :: Int + bar :: Int + foo :: Bool
- foo, bar, baz :: Int + bar, baz :: Int + foo :: Bool
genAnchor1 :: Anchor #
addParensToCtxt :: Maybe EpaLocation -> AnnContext -> AnnContext #
modifyAnns :: LocatedAn a ast -> (a -> a) -> LocatedAn a ast #
removeComma :: SrcSpanAnnA -> SrcSpanAnnA #
Helper function
eqSrcSpan :: SrcSpan -> SrcSpan -> Bool #
Equality on SrcSpan's. Ignores the (Maybe BufSpan) field of SrcSpan's.
epl :: Int -> EpaLocation #
removeTrailingComma :: GenLocated SrcSpanAnnA ast -> GenLocated SrcSpanAnnA ast #
getAnnotatedParsedSourceRule :: Recorder (WithPriority Log) -> Rules () #
Get the latest version of the annotated parse source with comments.
data GetAnnotatedParsedSource #
Constructors
| GetAnnotatedParsedSource |
Instances
class (Data ast, Typeable l, Outputable l, Outputable ast) => ASTElement l ast | ast -> l where #
Minimal complete definition
Methods
parseAST :: Parser (LocatedAn l ast) #
maybeParensAST :: LocatedAn l ast -> LocatedAn l ast #
graft :: Data a => SrcSpan -> LocatedAn l ast -> Graft (Either String) a #
Instances
| ASTElement NameAnn RdrName # | |
| p ~ GhcPs => ASTElement AnnListItem (HsDecl p) # | |
Defined in Development.IDE.GHC.ExactPrint Methods parseAST :: Parser (LocatedAn AnnListItem (HsDecl p)) # maybeParensAST :: LocatedAn AnnListItem (HsDecl p) -> LocatedAn AnnListItem (HsDecl p) # graft :: Data a => SrcSpan -> LocatedAn AnnListItem (HsDecl p) -> Graft (Either String) a # | |
| p ~ GhcPs => ASTElement AnnListItem (HsExpr p) # | |
Defined in Development.IDE.GHC.ExactPrint Methods parseAST :: Parser (LocatedAn AnnListItem (HsExpr p)) # maybeParensAST :: LocatedAn AnnListItem (HsExpr p) -> LocatedAn AnnListItem (HsExpr p) # graft :: Data a => SrcSpan -> LocatedAn AnnListItem (HsExpr p) -> Graft (Either String) a # | |
| p ~ GhcPs => ASTElement AnnListItem (ImportDecl p) # | |
Defined in Development.IDE.GHC.ExactPrint Methods parseAST :: Parser (LocatedAn AnnListItem (ImportDecl p)) # maybeParensAST :: LocatedAn AnnListItem (ImportDecl p) -> LocatedAn AnnListItem (ImportDecl p) # graft :: Data a => SrcSpan -> LocatedAn AnnListItem (ImportDecl p) -> Graft (Either String) a # | |
| p ~ GhcPs => ASTElement AnnListItem (Pat p) # | |
Defined in Development.IDE.GHC.ExactPrint Methods parseAST :: Parser (LocatedAn AnnListItem (Pat p)) # maybeParensAST :: LocatedAn AnnListItem (Pat p) -> LocatedAn AnnListItem (Pat p) # graft :: Data a => SrcSpan -> LocatedAn AnnListItem (Pat p) -> Graft (Either String) a # | |
| p ~ GhcPs => ASTElement AnnListItem (HsType p) # | |
Defined in Development.IDE.GHC.ExactPrint Methods parseAST :: Parser (LocatedAn AnnListItem (HsType p)) # maybeParensAST :: LocatedAn AnnListItem (HsType p) -> LocatedAn AnnListItem (HsType p) # graft :: Data a => SrcSpan -> LocatedAn AnnListItem (HsType p) -> Graft (Either String) a # | |
newtype ExceptStringT (m :: Type -> Type) a #
Constructors
| ExceptStringT | |
Fields
| |
Instances
| MonadTrans ExceptStringT # | |
Defined in Development.IDE.GHC.ExactPrint Methods lift :: Monad m => m a -> ExceptStringT m a # | |
| MonadIO m => MonadIO (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftIO :: IO a -> ExceptStringT m a # | |
| MonadZip m => MonadZip (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods mzip :: ExceptStringT m a -> ExceptStringT m b -> ExceptStringT m (a, b) # mzipWith :: (a -> b -> c) -> ExceptStringT m a -> ExceptStringT m b -> ExceptStringT m c # munzip :: ExceptStringT m (a, b) -> (ExceptStringT m a, ExceptStringT m b) # | |
| Eq1 m => Eq1 (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftEq :: (a -> b -> Bool) -> ExceptStringT m a -> ExceptStringT m b -> Bool # | |
| Ord1 m => Ord1 (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftCompare :: (a -> b -> Ordering) -> ExceptStringT m a -> ExceptStringT m b -> Ordering # | |
| Read1 m => Read1 (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (ExceptStringT m a) # liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [ExceptStringT m a] # liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (ExceptStringT m a) # liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [ExceptStringT m a] # | |
| Show1 m => Show1 (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> ExceptStringT m a -> ShowS # liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [ExceptStringT m a] -> ShowS # | |
| Contravariant m => Contravariant (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods contramap :: (a' -> a) -> ExceptStringT m a -> ExceptStringT m a' # (>$) :: b -> ExceptStringT m b -> ExceptStringT m a # | |
| Monad m => Alternative (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods empty :: ExceptStringT m a # (<|>) :: ExceptStringT m a -> ExceptStringT m a -> ExceptStringT m a # some :: ExceptStringT m a -> ExceptStringT m [a] # many :: ExceptStringT m a -> ExceptStringT m [a] # | |
| Monad m => Applicative (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods pure :: a -> ExceptStringT m a # (<*>) :: ExceptStringT m (a -> b) -> ExceptStringT m a -> ExceptStringT m b # liftA2 :: (a -> b -> c) -> ExceptStringT m a -> ExceptStringT m b -> ExceptStringT m c # (*>) :: ExceptStringT m a -> ExceptStringT m b -> ExceptStringT m b # (<*) :: ExceptStringT m a -> ExceptStringT m b -> ExceptStringT m a # | |
| Functor m => Functor (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods fmap :: (a -> b) -> ExceptStringT m a -> ExceptStringT m b # (<$) :: a -> ExceptStringT m b -> ExceptStringT m a # | |
| Monad m => Monad (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods (>>=) :: ExceptStringT m a -> (a -> ExceptStringT m b) -> ExceptStringT m b # (>>) :: ExceptStringT m a -> ExceptStringT m b -> ExceptStringT m b # return :: a -> ExceptStringT m a # | |
| Monad m => MonadPlus (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods mzero :: ExceptStringT m a # mplus :: ExceptStringT m a -> ExceptStringT m a -> ExceptStringT m a # | |
| Monad m => MonadFail (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods fail :: String -> ExceptStringT m a # | |
| Foldable m => Foldable (ExceptStringT m) # | |
Defined in Development.IDE.GHC.ExactPrint Methods fold :: Monoid m0 => ExceptStringT m m0 -> m0 # foldMap :: Monoid m0 => (a -> m0) -> ExceptStringT m a -> m0 # foldMap' :: Monoid m0 => (a -> m0) -> ExceptStringT m a -> m0 # foldr :: (a -> b -> b) -> b -> ExceptStringT m a -> b # foldr' :: (a -> b -> b) -> b -> ExceptStringT m a -> b # foldl :: (b -> a -> b) -> b -> ExceptStringT m a -> b # foldl' :: (b -> a -> b) -> b -> ExceptStringT m a -> b # foldr1 :: (a -> a -> a) -> ExceptStringT m a -> a # foldl1 :: (a -> a -> a) -> ExceptStringT m a -> a # toList :: ExceptStringT m a -> [a] # null :: ExceptStringT m a -> Bool # length :: ExceptStringT m a -> Int # elem :: Eq a => a -> ExceptStringT m a -> Bool # maximum :: Ord a => ExceptStringT m a -> a # minimum :: Ord a => ExceptStringT m a -> a # sum :: Num a => ExceptStringT m a -> a # product :: Num a => ExceptStringT m a -> a # | |
| (Read1 m, Read a) => Read (ExceptStringT m a) # | |
Defined in Development.IDE.GHC.ExactPrint Methods readsPrec :: Int -> ReadS (ExceptStringT m a) # readList :: ReadS [ExceptStringT m a] # readPrec :: ReadPrec (ExceptStringT m a) # readListPrec :: ReadPrec [ExceptStringT m a] # | |
| (Show1 m, Show a) => Show (ExceptStringT m a) # | |
Defined in Development.IDE.GHC.ExactPrint Methods showsPrec :: Int -> ExceptStringT m a -> ShowS # show :: ExceptStringT m a -> String # showList :: [ExceptStringT m a] -> ShowS # | |
| (Eq1 m, Eq a) => Eq (ExceptStringT m a) # | |
Defined in Development.IDE.GHC.ExactPrint Methods (==) :: ExceptStringT m a -> ExceptStringT m a -> Bool # (/=) :: ExceptStringT m a -> ExceptStringT m a -> Bool # | |
| (Ord1 m, Ord a) => Ord (ExceptStringT m a) # | |
Defined in Development.IDE.GHC.ExactPrint Methods compare :: ExceptStringT m a -> ExceptStringT m a -> Ordering # (<) :: ExceptStringT m a -> ExceptStringT m a -> Bool # (<=) :: ExceptStringT m a -> ExceptStringT m a -> Bool # (>) :: ExceptStringT m a -> ExceptStringT m a -> Bool # (>=) :: ExceptStringT m a -> ExceptStringT m a -> Bool # max :: ExceptStringT m a -> ExceptStringT m a -> ExceptStringT m a # min :: ExceptStringT m a -> ExceptStringT m a -> ExceptStringT m a # | |
data TransformT (m :: Type -> Type) a #
Monad transformer version of Transform monad
Instances
| MonadTrans TransformT | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods lift :: Monad m => m a -> TransformT m a # | |
| Monad m => MonadReader () (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods ask :: TransformT m () # local :: (() -> ()) -> TransformT m a -> TransformT m a # reader :: (() -> a) -> TransformT m a # | |
| Monad m => MonadState Int (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods get :: TransformT m Int # put :: Int -> TransformT m () # state :: (Int -> (a, Int)) -> TransformT m a # | |
| Monad m => HasTransform (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods liftT :: Transform a -> TransformT m a # | |
| Monad m => Applicative (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods pure :: a -> TransformT m a # (<*>) :: TransformT m (a -> b) -> TransformT m a -> TransformT m b # liftA2 :: (a -> b -> c) -> TransformT m a -> TransformT m b -> TransformT m c # (*>) :: TransformT m a -> TransformT m b -> TransformT m b # (<*) :: TransformT m a -> TransformT m b -> TransformT m a # | |
| Functor m => Functor (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods fmap :: (a -> b) -> TransformT m a -> TransformT m b # (<$) :: a -> TransformT m b -> TransformT m a # | |
| Monad m => Monad (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods (>>=) :: TransformT m a -> (a -> TransformT m b) -> TransformT m b # (>>) :: TransformT m a -> TransformT m b -> TransformT m b # return :: a -> TransformT m a # | |
| MonadFail m => MonadFail (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods fail :: String -> TransformT m a # | |
| Monad m => MonadWriter [String] (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods writer :: (a, [String]) -> TransformT m a # tell :: [String] -> TransformT m () # listen :: TransformT m a -> TransformT m (a, [String]) # pass :: TransformT m (a, [String] -> [String]) -> TransformT m a # | |