Safe Haskell | None |
---|---|
Language | Haskell2010 |
Utility functions for transforming the GHC AST representation into our own.
- createNameInfo :: n -> Trf (NameInfo n)
- createAmbigousNameInfo :: RdrName -> SrcSpan -> Trf (NameInfo n)
- createImplicitNameInfo :: String -> Trf (NameInfo n)
- createImplicitFldInfo :: (GHCName n, HsHasName n) => (a -> n) -> [HsRecField n a] -> Trf ImplicitFieldInfo
- createImportData :: (HsHasName n, GHCName n) => ImportDecl (Dom n) stage -> Trf (ImportInfo n)
- getImportedNames :: String -> Maybe String -> Trf (Module, [Name])
- checkImportVisible :: (HsHasName n, GhcMonad m) => ImportDecl (Dom n) stage -> Name -> m Bool
- ieSpecMatches :: (HsHasName n, GhcMonad m) => IESpec (Dom n) stage -> Name -> m Bool
- noSemaInfo :: src -> NodeInfo NoSemanticInfo src
- nothing :: String -> String -> Trf SrcLoc -> Trf (AnnMaybe e (Dom n) RangeStage)
- emptyList :: String -> Trf SrcLoc -> Trf (AnnList e (Dom n) RangeStage)
- makeList :: String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeListBefore :: String -> String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeListAfter :: String -> String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeNonemptyList :: String -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeIndentedList :: Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeIndentedListNewlineBefore :: Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeIndentedListBefore :: String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- makeNonemptyIndentedList :: Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage)
- trfLoc :: (a -> Trf (b (Dom n) RangeStage)) -> Trf (SemanticInfo (Dom n) b) -> Located a -> Trf (Ann b (Dom n) RangeStage)
- trfLocNoSema :: SemanticInfo (Dom n) b ~ NoSemanticInfo => (a -> Trf (b (Dom n) RangeStage)) -> Located a -> Trf (Ann b (Dom n) RangeStage)
- trfMaybe :: String -> String -> (Located a -> Trf (Ann e (Dom n) RangeStage)) -> Maybe (Located a) -> Trf (AnnMaybe e (Dom n) RangeStage)
- trfMaybeDefault :: String -> String -> (Located a -> Trf (Ann e (Dom n) RangeStage)) -> Trf SrcLoc -> Maybe (Located a) -> Trf (AnnMaybe e (Dom n) RangeStage)
- trfLocCorrect :: Trf (SemanticInfo (Dom n) b) -> (SrcSpan -> Trf SrcSpan) -> (a -> Trf (b (Dom n) RangeStage)) -> Located a -> Trf (Ann b (Dom n) RangeStage)
- trfMaybeLoc :: (a -> Trf (Maybe (b (Dom n) RangeStage))) -> SemanticInfo (Dom n) b -> Located a -> Trf (Maybe (Ann b (Dom n) RangeStage))
- trfMaybeLocNoSema :: SemanticInfo (Dom n) b ~ NoSemanticInfo => (a -> Trf (Maybe (b (Dom n) RangeStage))) -> Located a -> Trf (Maybe (Ann b (Dom n) RangeStage))
- trfAnnList :: SemanticInfo (Dom n) b ~ NoSemanticInfo => String -> (a -> Trf (b (Dom n) RangeStage)) -> [Located a] -> Trf (AnnList b (Dom n) RangeStage)
- trfAnnList' :: String -> (Located a -> Trf (Ann b (Dom n) RangeStage)) -> [Located a] -> Trf (AnnList b (Dom n) RangeStage)
- nonemptyAnnList :: [Ann e (Dom n) RangeStage] -> AnnList e (Dom n) RangeStage
- makeJust :: Ann e (Dom n) RangeStage -> AnnMaybe e (Dom n) RangeStage
- annLoc :: Trf (SemanticInfo (Dom n) b) -> Trf SrcSpan -> Trf (b (Dom n) RangeStage) -> Trf (Ann b (Dom n) RangeStage)
- annLocNoSema :: SemanticInfo (Dom n) b ~ NoSemanticInfo => Trf SrcSpan -> Trf (b (Dom n) RangeStage) -> Trf (Ann b (Dom n) RangeStage)
- focusOn :: SrcSpan -> Trf a -> Trf a
- updateFocus :: (SrcSpan -> Trf SrcSpan) -> Trf a -> Trf a
- between :: AnnKeywordId -> AnnKeywordId -> Trf a -> Trf a
- betweenIfPresent :: AnnKeywordId -> AnnKeywordId -> Trf a -> Trf a
- focusAfter :: AnnKeywordId -> Trf a -> Trf a
- focusAfterIfPresent :: AnnKeywordId -> Trf a -> Trf a
- focusBefore :: AnnKeywordId -> Trf a -> Trf a
- focusBeforeIfPresent :: AnnKeywordId -> Trf a -> Trf a
- before :: AnnKeywordId -> Trf SrcLoc
- after :: AnnKeywordId -> Trf SrcLoc
- annFrom :: AnnKeywordId -> Trf (SemanticInfo (Dom n) e) -> Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage)
- annFromNoSema :: SemanticInfo (Dom n) e ~ NoSemanticInfo => AnnKeywordId -> Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage)
- atTheStart :: Trf SrcLoc
- atTheEnd :: Trf SrcLoc
- tokenLoc :: AnnKeywordId -> Trf SrcSpan
- allTokenLoc :: AnnKeywordId -> Trf [SrcSpan]
- tokenLocBack :: AnnKeywordId -> Trf SrcSpan
- tokenBefore :: SrcLoc -> AnnKeywordId -> Trf SrcSpan
- allTokensAfter :: SrcLoc -> Trf [(SrcSpan, AnnKeywordId)]
- tokensLoc :: [AnnKeywordId] -> Trf SrcSpan
- uniqueTokenAnywhere :: AnnKeywordId -> Trf SrcSpan
- annCont :: Trf (SemanticInfo (Dom n) e) -> Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage)
- annContNoSema :: SemanticInfo (Dom n) e ~ NoSemanticInfo => Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage)
- copyAnnot :: SemanticInfo (Dom n) a ~ SemanticInfo (Dom n) b => (Ann a (Dom n) RangeStage -> b (Dom n) RangeStage) -> Trf (Ann a (Dom n) RangeStage) -> Trf (Ann b (Dom n) RangeStage)
- foldLocs :: [SrcSpan] -> SrcSpan
- advanceStr :: String -> SrcLoc -> SrcLoc
- updateCol :: (Int -> Int) -> SrcLoc -> SrcLoc
- updateStart :: (SrcLoc -> SrcLoc) -> SrcSpan -> SrcSpan
- updateEnd :: (SrcLoc -> SrcLoc) -> SrcSpan -> SrcSpan
- collectLocs :: [Located e] -> SrcSpan
- orderDefs :: [Ann e (Dom n) RangeStage] -> [Ann e (Dom n) RangeStage]
- orderAnnList :: AnnList e (Dom n) RangeStage -> AnnList e (Dom n) RangeStage
- trfScopedSequence :: HsHasName d => (d -> Trf e) -> [d] -> Trf [e]
- splitLocated :: Located String -> [Located String]
Documentation
createNameInfo :: n -> Trf (NameInfo n) Source #
Creates a semantic information for a name
createAmbigousNameInfo :: RdrName -> SrcSpan -> Trf (NameInfo n) Source #
Creates a semantic information for an ambiguous name (caused by field disambiguation for example)
createImplicitNameInfo :: String -> Trf (NameInfo n) Source #
Creates a semantic information for an implicit name
createImplicitFldInfo :: (GHCName n, HsHasName n) => (a -> n) -> [HsRecField n a] -> Trf ImplicitFieldInfo Source #
Creates a semantic information for an implicit name
createImportData :: (HsHasName n, GHCName n) => ImportDecl (Dom n) stage -> Trf (ImportInfo n) Source #
Adds semantic information to an impord declaration. See ImportInfo.
getImportedNames :: String -> Maybe String -> Trf (Module, [Name]) Source #
Get names that are imported from a given import
checkImportVisible :: (HsHasName n, GhcMonad m) => ImportDecl (Dom n) stage -> Name -> m Bool Source #
Check is a given name is imported from an import with given import specification.
noSemaInfo :: src -> NodeInfo NoSemanticInfo src Source #
nothing :: String -> String -> Trf SrcLoc -> Trf (AnnMaybe e (Dom n) RangeStage) Source #
Creates a place for a missing node with a default location
makeList :: String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
Creates a place for a list of nodes with a default place if the list is empty.
makeListBefore :: String -> String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
makeListAfter :: String -> String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
makeNonemptyList :: String -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
makeIndentedList :: Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
Creates a place for an indented list of nodes with a default place if the list is empty.
makeIndentedListNewlineBefore :: Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
makeIndentedListBefore :: String -> Trf SrcLoc -> Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
makeNonemptyIndentedList :: Trf [Ann e (Dom n) RangeStage] -> Trf (AnnList e (Dom n) RangeStage) Source #
trfLoc :: (a -> Trf (b (Dom n) RangeStage)) -> Trf (SemanticInfo (Dom n) b) -> Located a -> Trf (Ann b (Dom n) RangeStage) Source #
Transform a located part of the AST by automatically transforming the location. Sets the source range for transforming children.
trfLocNoSema :: SemanticInfo (Dom n) b ~ NoSemanticInfo => (a -> Trf (b (Dom n) RangeStage)) -> Located a -> Trf (Ann b (Dom n) RangeStage) Source #
trfMaybe :: String -> String -> (Located a -> Trf (Ann e (Dom n) RangeStage)) -> Maybe (Located a) -> Trf (AnnMaybe e (Dom n) RangeStage) Source #
Transforms a possibly-missing node with the default location of the end of the focus.
trfMaybeDefault :: String -> String -> (Located a -> Trf (Ann e (Dom n) RangeStage)) -> Trf SrcLoc -> Maybe (Located a) -> Trf (AnnMaybe e (Dom n) RangeStage) Source #
Transforms a possibly-missing node with a default location
trfLocCorrect :: Trf (SemanticInfo (Dom n) b) -> (SrcSpan -> Trf SrcSpan) -> (a -> Trf (b (Dom n) RangeStage)) -> Located a -> Trf (Ann b (Dom n) RangeStage) Source #
Transform a located part of the AST by automatically transforming the location with correction by applying the given function. Sets the source range for transforming children.
trfMaybeLoc :: (a -> Trf (Maybe (b (Dom n) RangeStage))) -> SemanticInfo (Dom n) b -> Located a -> Trf (Maybe (Ann b (Dom n) RangeStage)) Source #
Transform a located part of the AST by automatically transforming the location. Sets the source range for transforming children.
trfMaybeLocNoSema :: SemanticInfo (Dom n) b ~ NoSemanticInfo => (a -> Trf (Maybe (b (Dom n) RangeStage))) -> Located a -> Trf (Maybe (Ann b (Dom n) RangeStage)) Source #
trfAnnList :: SemanticInfo (Dom n) b ~ NoSemanticInfo => String -> (a -> Trf (b (Dom n) RangeStage)) -> [Located a] -> Trf (AnnList b (Dom n) RangeStage) Source #
Creates a place for a list of nodes with the default place at the end of the focus if the list is empty.
trfAnnList' :: String -> (Located a -> Trf (Ann b (Dom n) RangeStage)) -> [Located a] -> Trf (AnnList b (Dom n) RangeStage) Source #
nonemptyAnnList :: [Ann e (Dom n) RangeStage] -> AnnList e (Dom n) RangeStage Source #
Creates a place for a list of nodes that cannot be empty.
makeJust :: Ann e (Dom n) RangeStage -> AnnMaybe e (Dom n) RangeStage Source #
Creates an optional node from an existing element
annLoc :: Trf (SemanticInfo (Dom n) b) -> Trf SrcSpan -> Trf (b (Dom n) RangeStage) -> Trf (Ann b (Dom n) RangeStage) Source #
Annotates a node with the given location and focuses on the given source span.
annLocNoSema :: SemanticInfo (Dom n) b ~ NoSemanticInfo => Trf SrcSpan -> Trf (b (Dom n) RangeStage) -> Trf (Ann b (Dom n) RangeStage) Source #
Focus manipulation
between :: AnnKeywordId -> AnnKeywordId -> Trf a -> Trf a Source #
Focuses the transformation to go between tokens. The tokens must be found inside the current range.
betweenIfPresent :: AnnKeywordId -> AnnKeywordId -> Trf a -> Trf a Source #
Focuses the transformation to go between tokens if they are present
focusAfter :: AnnKeywordId -> Trf a -> Trf a Source #
Focuses the transformation to be performed after the given token. The token must be found inside the current range.
focusAfterIfPresent :: AnnKeywordId -> Trf a -> Trf a Source #
focusBefore :: AnnKeywordId -> Trf a -> Trf a Source #
Focuses the transformation to be performed before the given token. The token must be found inside the current range.
focusBeforeIfPresent :: AnnKeywordId -> Trf a -> Trf a Source #
annFrom :: AnnKeywordId -> Trf (SemanticInfo (Dom n) e) -> Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage) Source #
The element should span from the given token to the end of focus
annFromNoSema :: SemanticInfo (Dom n) e ~ NoSemanticInfo => AnnKeywordId -> Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage) Source #
atTheStart :: Trf SrcLoc Source #
Gets the position at the beginning of the focus
tokenLoc :: AnnKeywordId -> Trf SrcSpan Source #
Searches for a token inside the focus and retrieves its location
allTokenLoc :: AnnKeywordId -> Trf [SrcSpan] Source #
tokenLocBack :: AnnKeywordId -> Trf SrcSpan Source #
Searches for a token backward inside the focus and retrieves its location
tokenBefore :: SrcLoc -> AnnKeywordId -> Trf SrcSpan Source #
allTokensAfter :: SrcLoc -> Trf [(SrcSpan, AnnKeywordId)] Source #
tokensLoc :: [AnnKeywordId] -> Trf SrcSpan Source #
Searches for tokens in the given order inside the parent element and returns their combined location
uniqueTokenAnywhere :: AnnKeywordId -> Trf SrcSpan Source #
Searches for a token and retrieves its location anywhere
annCont :: Trf (SemanticInfo (Dom n) e) -> Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage) Source #
Annotates the given element with the current focus as a location.
annContNoSema :: SemanticInfo (Dom n) e ~ NoSemanticInfo => Trf (e (Dom n) RangeStage) -> Trf (Ann e (Dom n) RangeStage) Source #
copyAnnot :: SemanticInfo (Dom n) a ~ SemanticInfo (Dom n) b => (Ann a (Dom n) RangeStage -> b (Dom n) RangeStage) -> Trf (Ann a (Dom n) RangeStage) -> Trf (Ann b (Dom n) RangeStage) Source #
Annotates the element with the same annotation that is on the other element
updateCol :: (Int -> Int) -> SrcLoc -> SrcLoc Source #
Update column information in a source location
collectLocs :: [Located e] -> SrcSpan Source #
Combine source spans of elements into one that contains them all
orderDefs :: [Ann e (Dom n) RangeStage] -> [Ann e (Dom n) RangeStage] Source #
Rearrange definitions to appear in the order they are defined in the source file.
orderAnnList :: AnnList e (Dom n) RangeStage -> AnnList e (Dom n) RangeStage Source #
Orders a list of elements to the order they are defined in the source file.