Skip to content

Commit ec5191d

Browse files
committed
Move dependency hover to Dependencies module
1 parent 9918fae commit ec5191d

File tree

2 files changed

+39
-29
lines changed

2 files changed

+39
-29
lines changed

plugins/hls-cabal-plugin/src/Ide/Plugin/Cabal.hs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ import Development.IDE.Core.PluginUtils
2424
import Development.IDE.Core.Shake (restartShakeSession)
2525
import qualified Development.IDE.Core.Shake as Shake
2626
import Development.IDE.Graph (Key)
27-
import Development.IDE.LSP.HoverDefinition (foundHover)
2827
import qualified Development.IDE.Plugin.Completions.Logic as Ghcide
2928
import Development.IDE.Types.Shake (toKey)
3029
import qualified Distribution.Fields as Syntax
@@ -334,14 +333,10 @@ hover ide _ msgParam = do
334333
nfp <- getNormalizedFilePathE uri
335334
cabalFields <- runActionE "cabal.cabal-hover" ide $ useE ParseCabalFields nfp
336335
(hscEnv -> hsc) <- runActionE "cabal.cabal-hover" ide $ useE GhcSession nfp
337-
let hoveredDep = List.find (positionInRange (msgParam ^. JL.position) . (\(x, _, _) -> x)) $ Dependencies.collectPackageDependencyVersions cabalFields hsc
338-
pure $ case hoveredDep of
339-
Just (_, pkgName, version) -> foundHover (Nothing, [pkgName <> " (" <> Dependencies.printVersion version <> ")\n", documentationText (pkgName <> "-" <> Dependencies.printVersion version)])
340-
Nothing -> InR Null
336+
pure $ Dependencies.dependencyHover cabalFields hsc cursor
341337
where
338+
cursor = msgParam ^. JL.position
342339
uri = msgParam ^. JL.textDocument . JL.uri
343-
documentationText :: T.Text -> T.Text
344-
documentationText package = "[Documentation](https://hackage.haskell.org/package/" <> package <> ")"
345340

346341
-- ----------------------------------------------------------------
347342
-- Completion

plugins/hls-cabal-plugin/src/Ide/Plugin/Cabal/Dependencies.hs

Lines changed: 37 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,35 @@
11
{-# LANGUAGE DuplicateRecordFields #-}
22
{-# LANGUAGE OverloadedStrings #-}
33

4-
module Ide.Plugin.Cabal.Dependencies (dependencyVersionHints, collectPackageDependencyVersions, dependencyVersionLens, printVersion) where
4+
module Ide.Plugin.Cabal.Dependencies (dependencyVersionHints, dependencyVersionLens, dependencyHover) where
55

6-
import Control.Lens ((^.))
7-
import Data.Array ((!))
8-
import Data.ByteString (ByteString)
6+
import Control.Lens ((^.))
7+
import Data.Array ((!))
8+
import Data.ByteString (ByteString)
99
import Data.List
10-
import qualified Data.Maybe as Maybe
11-
import qualified Data.Text as T
12-
import qualified Data.Text.Encoding as Encoding
13-
import Data.Version (Version (..))
14-
import Development.IDE.GHC.Compat (HscEnv, filterUniqMap,
15-
getUnitInfoMap,
16-
nonDetEltsUniqMap,
17-
unitPackageNameString,
18-
unitPackageVersion)
19-
import qualified Distribution.Fields as Syntax
20-
import qualified Distribution.Parsec.Position as Syntax
21-
import qualified Ide.Plugin.Cabal.Completion.Types as Types
22-
import qualified Language.LSP.Protocol.Lens as JL
23-
import Language.LSP.Protocol.Types (CodeLens (..), Command (..),
24-
InlayHint (..), Range (..),
25-
type (|?) (..))
26-
import Text.Regex.TDFA (Regex, makeRegex,
27-
matchAllText)
10+
import qualified Data.List as List
11+
import qualified Data.Maybe as Maybe
12+
import qualified Data.Text as T
13+
import qualified Data.Text.Encoding as Encoding
14+
import Data.Version (Version (..))
15+
import Development.IDE.GHC.Compat (HscEnv, filterUniqMap,
16+
getUnitInfoMap,
17+
nonDetEltsUniqMap,
18+
unitPackageNameString,
19+
unitPackageVersion)
20+
import Development.IDE.LSP.HoverDefinition (foundHover)
21+
import qualified Distribution.Fields as Syntax
22+
import qualified Distribution.Parsec.Position as Syntax
23+
import qualified Ide.Plugin.Cabal.Completion.Types as Types
24+
import qualified Language.LSP.Protocol.Lens as JL
25+
import Language.LSP.Protocol.Types (CodeLens (..),
26+
Command (..), Hover,
27+
InlayHint (..), Null (..),
28+
Position, Range (..),
29+
positionInRange,
30+
type (|?) (..))
31+
import Text.Regex.TDFA (Regex, makeRegex,
32+
matchAllText)
2833

2934
dependencyVersionLens :: [Syntax.Field Syntax.Position] -> HscEnv -> [CodeLens]
3035
dependencyVersionLens cabalFields = (>>= foo) . groupBy (\(a,_,_) (b,_,_)-> (a ^. JL.start . JL.line) == (b ^. JL.start . JL.line)) . collectPackageDependencyVersions cabalFields
@@ -61,6 +66,16 @@ dependencyVersionHints cabalFields = fmap mkHint . collectPackageDependencyVersi
6166
, _data_ = Nothing
6267
}
6368

69+
dependencyHover :: [Syntax.Field Syntax.Position] -> HscEnv -> Position -> Hover |? Null
70+
dependencyHover cabalFields hsc cursorPosition =
71+
let hoveredDep = List.find (positionInRange cursorPosition . (\(x, _, _) -> x)) $ collectPackageDependencyVersions cabalFields hsc
72+
in case hoveredDep of
73+
Just (_, pkgName, version) -> foundHover (Nothing, [pkgName <> " (" <> printVersion version <> ")\n", documentationText (pkgName <> "-" <> printVersion version)])
74+
Nothing -> InR Null
75+
where
76+
documentationText :: T.Text -> T.Text
77+
documentationText package = "[Documentation](https://hackage.haskell.org/package/" <> package <> ")"
78+
6479
collectPackageDependencyVersions :: [Syntax.Field Syntax.Position] -> HscEnv -> [(Range, T.Text, Version)]
6580
collectPackageDependencyVersions cabalFields hscEnv = cabalFields >>= collectPackageVersions
6681
where

0 commit comments

Comments
 (0)