Skip to content

Commit 287f7fa

Browse files
committed
add offset for FunBind since infix function
1 parent f401ff2 commit 287f7fa

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

ghcide/src/Development/IDE/Plugin/TypeLenses.hs

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
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

Comments
 (0)