@@ -31,7 +31,9 @@ import Test.HUnit
3131transformTestsTT :: LibDir -> Test
3232transformTestsTT libdir = TestLabel " transformTestsTT" $ TestList
3333 [
34- mkTestModChange libdir addLocaLDecl5 " AddLocalDecl5.hs"
34+ mkTestModChange libdir addLocaLDecl5 " AddLocalDecl5.hs" ,
35+ mkTestModChange libdir addLocaLDecl7 " AddLocalDecl7.hs" ,
36+ mkTestModChange libdir addLocaLDecl8 " AddLocalDecl8.hs"
3537 ]
3638
3739transformTests :: LibDir -> Test
@@ -294,6 +296,7 @@ transformHighLevelTests libdir =
294296 , mkTestModChange libdir addLocaLDecl5 " AddLocalDecl5.hs"
295297 , mkTestModChange libdir addLocaLDecl6 " AddLocalDecl6.hs"
296298 , mkTestModChange libdir addLocaLDecl7 " AddLocalDecl7.hs"
299+ , mkTestModChange libdir addLocaLDecl8 " AddLocalDecl8.hs"
297300
298301 , mkTestModChange libdir rmDecl1 " RmDecl1.hs"
299302 , mkTestModChange libdir rmDecl2 " RmDecl2.hs"
@@ -484,6 +487,27 @@ prependDecl ldecl = \case
484487 L (SrcSpanAnn EpAnnNotUsed _) _ -> error " Unexpected EpAnnNotUsed"
485488 ldecl' = setEntryDP ldecl (getAnchorOpDp ancOp)
486489
490+ addLocaLDecl8 :: Changer
491+ addLocaLDecl8 libdir top = do
492+ Right (L ld (ValD _ decl)) <- withDynFlags libdir (\ df -> parseDecl df " decl" " nn = 2" )
493+ let decl' = setEntryDP (L ld decl) (DifferentLine 1 5 )
494+ doAddLocal = do
495+ let lp = makeDeltaAst top
496+ ds <- balanceCommentsList =<< hsDecls lp
497+ ds' <- flip mapM ds $ \ d -> do
498+ (d',_) <- modifyValD (getLocA d) d $ \ _m ds -> do
499+ pure (appendDecl ds (wrapDecl decl'), Nothing )
500+ pure d'
501+ replaceDecls lp ds'
502+ (lp',_,w) <- runTransformT doAddLocal
503+ debugM $ " addLocaLDecl7:" ++ intercalate " \n " w
504+ return lp'
505+
506+ appendDecl :: [LHsDecl GhcPs ] -> LHsDecl GhcPs -> [LHsDecl GhcPs ]
507+ appendDecl old newDecl = case old of
508+ [] -> [setEntryDP newDecl (DifferentLine 1 2 )]
509+ old' -> old' <> [setEntryDP newDecl (DifferentLine 1 0 )]
510+
487511getAnchorDp :: Anchor -> DeltaPos
488512getAnchorDp (Anchor _ (MovedAnchor dp)) = dp
489513getAnchorDp (Anchor _ UnchangedAnchor ) = error " Unexpected UnchangedAnchor"
0 commit comments