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 -> 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 :: Default t => 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, Default l) => 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 Source #
A transformation for grafting source trees together. Use the semigroup
instance to combine Graft
s, 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 Source #
annotate :: ASTElement l ast => DynFlags -> Bool -> LocatedAn l ast -> TransformT (Either String) (LocatedAn l ast) Source #
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) Source #
Given an LHsDecl
, compute its exactprint annotations.
hoistGraft :: (forall x. m x -> n x) -> Graft m a -> Graft n a Source #
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 Source #
graftExprWithM :: forall (m :: Type -> Type) a. (MonadFail m, Data a) => SrcSpan -> (LHsExpr GhcPs -> TransformT m (Maybe (LHsExpr GhcPs))) -> Graft m a Source #
genericGraftWithSmallestM Source #
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
.
genericGraftWithLargestM Source #
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 Source #
transform :: DynFlags -> ClientCapabilities -> VersionedTextDocumentIdentifier -> Graft (Either String) ParsedSource -> ParsedSource -> Either String WorkspaceEdit Source #
Convert a Graft
into a WorkspaceEdit
.
transformM :: Monad m => DynFlags -> ClientCapabilities -> VersionedTextDocumentIdentifier -> Graft (ExceptStringT m) ParsedSource -> ParsedSource -> m (Either String WorkspaceEdit) Source #
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 -> 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) Source #
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)) Source #
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) Source #
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 Source #
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 Source #
addParensToCtxt :: Maybe EpaLocation -> AnnContext -> AnnContext Source #
modifyAnns :: LocatedAn a ast -> (a -> a) -> LocatedAn a ast Source #
removeComma :: SrcSpanAnnA -> SrcSpanAnnA Source #
Helper function
eqSrcSpan :: SrcSpan -> SrcSpan -> Bool Source #
Equality on SrcSpan's. Ignores the (Maybe BufSpan) field of SrcSpan's.
epl :: Int -> EpaLocation Source #
removeTrailingComma :: GenLocated SrcSpanAnnA ast -> GenLocated SrcSpanAnnA ast Source #
getAnnotatedParsedSourceRule :: Recorder (WithPriority Log) -> Rules () Source #
Get the latest version of the annotated parse source with comments.
data GetAnnotatedParsedSource Source #
Constructors
GetAnnotatedParsedSource |
Instances
class (Data ast, Typeable l, Outputable l, Outputable ast, Default l) => ASTElement l ast | ast -> l where Source #
Minimal complete definition
Methods
parseAST :: Parser (LocatedAn l ast) Source #
maybeParensAST :: LocatedAn l ast -> LocatedAn l ast Source #
graft :: Data a => SrcSpan -> LocatedAn l ast -> Graft (Either String) a Source #
Instances
ASTElement NameAnn RdrName Source # | |
p ~ GhcPs => ASTElement AnnListItem (HsDecl p) Source # | |
Defined in Development.IDE.GHC.ExactPrint | |
p ~ GhcPs => ASTElement AnnListItem (HsExpr p) Source # | |
Defined in Development.IDE.GHC.ExactPrint | |
p ~ GhcPs => ASTElement AnnListItem (ImportDecl p) Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods parseAST :: Parser (LocatedAn AnnListItem (ImportDecl p)) Source # maybeParensAST :: LocatedAn AnnListItem (ImportDecl p) -> LocatedAn AnnListItem (ImportDecl p) Source # graft :: Data a => SrcSpan -> LocatedAn AnnListItem (ImportDecl p) -> Graft (Either String) a Source # | |
p ~ GhcPs => ASTElement AnnListItem (Pat p) Source # | |
Defined in Development.IDE.GHC.ExactPrint | |
p ~ GhcPs => ASTElement AnnListItem (HsType p) Source # | |
Defined in Development.IDE.GHC.ExactPrint |
newtype ExceptStringT (m :: Type -> Type) a Source #
Constructors
ExceptStringT | |
Fields
|
Instances
MonadTrans ExceptStringT Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods lift :: Monad m => m a -> ExceptStringT m a # | |
Monad m => MonadFail (ExceptStringT m) Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods fail :: String -> ExceptStringT m a # | |
MonadIO m => MonadIO (ExceptStringT m) Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftIO :: IO a -> ExceptStringT m a # | |
MonadZip m => MonadZip (ExceptStringT m) Source # | |
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) # | |
Foldable m => Foldable (ExceptStringT m) Source # | |
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 # | |
Eq1 m => Eq1 (ExceptStringT m) Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftEq :: (a -> b -> Bool) -> ExceptStringT m a -> ExceptStringT m b -> Bool # | |
Ord1 m => Ord1 (ExceptStringT m) Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods liftCompare :: (a -> b -> Ordering) -> ExceptStringT m a -> ExceptStringT m b -> Ordering # | |
Read1 m => Read1 (ExceptStringT m) Source # | |
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) Source # | |
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) Source # | |
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) Source # | |
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) Source # | |
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) Source # | |
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) Source # | |
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) Source # | |
Defined in Development.IDE.GHC.ExactPrint Methods mzero :: ExceptStringT m a # mplus :: ExceptStringT m a -> ExceptStringT m a -> ExceptStringT m a # | |
(Read1 m, Read a) => Read (ExceptStringT m a) Source # | |
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) Source # | |
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) Source # | |
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) Source # | |
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 # | |
MonadFail m => MonadFail (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods fail :: String -> 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 # | |
Monad m => HasTransform (TransformT m) | |
Defined in Language.Haskell.GHC.ExactPrint.Transform Methods liftT :: Transform a -> 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 # |