@@ -72,7 +72,7 @@ data RC = RC
7272 -- ^ Whether to relax aligning rules for comments
7373 , rcDebug :: Bool
7474 -- ^ Whether to print debugging info as we go
75− , rcEnclosingSpan :: Maybe RealSrcSpan
75+ , rcEnclosingSpans :: [RealSrcSpan]
7676 -- ^ Span of enclosing element of AST
7777 , rcAnns :: Anns
7878 -- ^ Collection of annotations
@@ -117,7 +117,7 @@ runR debug (R m) sstream cstream anns =
117117 , rcLayout = MultiLine
118118 , rcRelaxedComments = False
119119 , rcDebug = debug
120− , rcEnclosingSpan = Nothing
120+ , rcEnclosingSpans = []
121121 , rcAnns = anns
122122 }
123123 sc = SC
@@ -316,17 +316,18 @@ setIndent i m' = do
316316 R (local modRC m)
317317 traceR "set_indent_after" Nothing
318318
319−-- | Get 'RealSrcSpan' of enclosing span, if any.
319+-- | Get 'RealSrcSpan' of enclosing span for given referencne span.
320320
321−getEnclosingSpan :: R (Maybe RealSrcSpan)
322−getEnclosingSpan = R (asks rcEnclosingSpan)
321+getEnclosingSpan :: RealSrcSpan -> R (Maybe RealSrcSpan)
322+getEnclosingSpan r =
323+ listToMaybe . dropWhile (== r) <$> R (asks rcEnclosingSpans)
323324
324325-- | Set 'RealSrcSpan' of enclosing span for the given computation.
325326
326327withEnclosingSpan :: RealSrcSpan -> R () -> R ()
327328withEnclosingSpan spn (R m) = do
328329 let modRC rc = rc
329− { rcEnclosingSpan = Just spn
330+ { rcEnclosingSpans = spn : rcEnclosingSpans rc
330331 }
331332 R (local modRC m)
332333