11{-# LANGUAGE CPP #-}
22{-# LANGUAGE DeriveAnyClass #-}
33{-# LANGUAGE OverloadedLabels #-}
4- {-# LANGUAGE RecordPuns #-}
54{-# LANGUAGE TypeFamilies #-}
65
76-- | An HLS plugin to provide code lenses for type signatures
@@ -426,12 +425,16 @@ findBindingsQ = something (mkQ Nothing findBindings)
426425
427426 findBindingIds :: LHsBindLR GhcTc GhcTc -> Maybe [WhereBinding ]
428427 findBindingIds bind = case unLoc bind of
429- FunBind {.. } -> Just $ pure $ WhereBinding (unLoc fun_id) (getLoc fun_id) 0
428+ FunBind {.. } ->
429+ let whereBinding = WhereBinding (unLoc fun_id) (getLoc fun_id)
430+ (col (getLoc fun_id) - col (getLoc bind))
431+ in Just $ pure whereBinding
430432 PatBind {.. } -> Just $ (everything (<>) $ mkQ [] (fmap (uncurry wb) . maybeToList . findIdFromPat)) pat_lhs
431433 where
432- col = srcSpanStartCol . realSrcSpan
433434 wb id srcSpan = WhereBinding id srcSpan (col srcSpan - col (getLoc pat_lhs))
434435 _ -> Nothing
436+ where
437+ col = srcSpanStartCol . realSrcSpan
435438
436439 -- | Example: Find `a` and `b` from @(a,b) = (1,True)@
437440 findIdFromPat :: Pat GhcTc -> Maybe (Id , SrcSpan )
@@ -460,23 +463,23 @@ whereClauseInlayHints state plId (InlayHintParams _ (TextDocumentIdentifier uri)
460463 -- | Note there may multi ids for one binding,
461464 -- like @(a, b) = (42, True)@, there are `a` and `b`
462465 -- in one binding.
463- bindingToInlayHints id span offset = case srcSpanToRange span of
464- Nothing -> pure Nothing
465- Just range -> do
466- (_, sig) <- liftIO
467- $ initTcWithGbl hsc tcGblEnv ghostSpan
468- $ bindToSig id hsc rdrEnv
469- pure $ Just $ generateWhereInlayHints range (maybe (" " , " " ) (bimap (T. pack . printName) T. pack) sig) offset
470-
471- inlayHints <- catMaybes <$> sequence
472- [ bindingToInlayHints bindingId bindingLoc offset
466+ bindingToInlayHints id range offset = do
467+ (_, sig) <- liftIO
468+ $ initTcWithGbl hsc tcGblEnv ghostSpan
469+ $ bindToSig id hsc rdrEnv
470+ pure $ generateWhereInlayHints range (maybe (" " , " " ) (bimap (T. pack . printName) T. pack) sig) offset
471+
472+ inlayHints <- sequence
473+ [ bindingToInlayHints bindingId bindingRange offset
473474 | WhereBindings {.. } <- localBindings
474475 , let sigSpans = getSrcSpan <$> existedSigNames
475476 , WhereBinding {.. } <- bindings
476477 , let bindingSpan = getSrcSpan (idName bindingId)
477478 , bindingSpan `notElem` sigSpans
479+ -- , Just bindingRange <- maybeToList $ toCurrentRange pm <$> srcSpanToRange bindingLoc
480+ , Just bindingRange <- [srcSpanToRange bindingLoc]
478481 -- Show inlay hints only within visible range
479- , Just True <- [ flip isSubrangeOf visibleRange <$> srcSpanToRange bindingSpan]
482+ , isSubrangeOf bindingRange visibleRange
480483 ]
481484
482485 pure $ InL inlayHints
@@ -498,7 +501,7 @@ whereClauseInlayHints state plId (InlayHintParams _ (TextDocumentIdentifier uri)
498501 makeEdit range text offset =
499502 let startPos = range ^. L. start
500503 -- Subtract the offset to align with the whole binding expression
501- startPos' = startPos { _character = _character startPos - fromIntegral offset }
502- insertChar = startPos' ^. L. character
504+ insertChar = _character startPos - fromIntegral offset
505+ startPos' = startPos { _character = insertChar }
503506 insertRange = Range startPos' startPos'
504507 in TextEdit insertRange (text <> " \n " <> T. replicate (fromIntegral insertChar) " " )
0 commit comments