@@ -9,63 +9,56 @@ module Ide.Plugin.CabalProject where
9
9
10
10
import Control.Concurrent.Strict
11
11
import Control.DeepSeq
12
- import Control.Lens ((^.) )
12
+ import Control.Lens ((^.) )
13
13
import Control.Monad.Extra
14
14
import Control.Monad.IO.Class
15
- import Control.Monad.Trans.Class (lift )
16
- import Control.Monad.Trans.Maybe (runMaybeT )
17
- import qualified Data.ByteString as BS
15
+ import Control.Monad.Trans.Class (lift )
16
+ import Control.Monad.Trans.Maybe (runMaybeT )
17
+ import qualified Data.ByteString as BS
18
18
import Data.Hashable
19
- import Data.HashMap.Strict (HashMap ,
20
- toList )
21
- import qualified Data.HashMap.Strict as HashMap
22
- import qualified Data.List as List
23
- import qualified Data.List.NonEmpty as NE
24
- import qualified Data.Maybe as Maybe
19
+ import Data.HashMap.Strict (HashMap , toList )
20
+ import qualified Data.HashMap.Strict as HashMap
21
+ import qualified Data.List as List
22
+ import qualified Data.List.NonEmpty as NE
23
+ import qualified Data.Maybe as Maybe
25
24
import Data.Proxy
26
- import qualified Data.Text ()
27
- import qualified Data.Text as T
28
- import qualified Data.Text.Encoding as Encoding
29
- import Data.Text.Utf16.Rope.Mixed as Rope
30
- import Development.IDE as D
31
- import Development.IDE.Core.FileStore (getVersionedTextDoc )
25
+ import qualified Data.Text ()
26
+ import qualified Data.Text as T
27
+ import qualified Data.Text.Encoding as Encoding
28
+ import Data.Text.Utf16.Rope.Mixed as Rope
29
+ import Development.IDE as D
30
+ import Development.IDE.Core.FileStore (getVersionedTextDoc )
32
31
import Development.IDE.Core.PluginUtils
33
- import Development.IDE.Core.Shake (restartShakeSession )
34
- import qualified Development.IDE.Core.Shake as Shake
35
- import Development.IDE.Graph (Key ,
36
- alwaysRerun )
37
- import Development.IDE.LSP.HoverDefinition (foundHover )
38
- import qualified Development.IDE.Plugin.Completions.Logic as Ghcide
39
- import Development.IDE.Types.Shake (toKey )
40
- import qualified Distribution.CabalSpecVersion as Cabal
41
- import qualified Distribution.Fields as Syntax
42
- import Distribution.Package (Dependency )
43
- import Distribution.PackageDescription (allBuildDepends ,
44
- depPkgName ,
45
- unPackageName )
46
- import Distribution.PackageDescription.Configuration (flattenPackageDescription )
32
+ import Development.IDE.Core.Shake (restartShakeSession )
33
+ import qualified Development.IDE.Core.Shake as Shake
34
+ import Development.IDE.Graph (Key ,
35
+ alwaysRerun )
36
+ import Development.IDE.LSP.HoverDefinition (foundHover )
37
+ import qualified Development.IDE.Plugin.Completions.Logic as Ghcide
38
+ import Development.IDE.Types.Shake (toKey )
39
+ import qualified Distribution.CabalSpecVersion as Cabal
40
+ import qualified Distribution.Fields as Syntax
41
+ import Distribution.Package (Dependency )
42
+ import Distribution.PackageDescription (allBuildDepends ,
43
+ depPkgName ,
44
+ unPackageName )
45
+ import Distribution.PackageDescription.Configuration (flattenPackageDescription )
47
46
import Distribution.Parsec.Error
48
- import qualified Distribution.Parsec.Position as Syntax
47
+ import qualified Distribution.Parsec.Position as Syntax
49
48
import GHC.Generics
50
- import Ide.Plugin.Cabal.Completion.CabalFields as CabalFields
51
- import qualified Ide.Plugin.Cabal.Completion.Completer.Types as CompleterTypes
52
- import qualified Ide.Plugin.Cabal.Completion.Data as Data
53
- import qualified Ide.Plugin.Cabal.Completion.Types as CTypes
54
- import Ide.Plugin.Cabal.Orphans ()
55
- import qualified Ide.Plugin.CabalProject.Completion.Completions as Completions
56
- import Ide.Plugin.CabalProject.Diagnostics as Diagnostics
57
- import Ide.Plugin.CabalProject.Parse as Parse
58
- import Ide.Plugin.CabalProject.Types as Types
49
+ import Ide.Plugin.Cabal.Orphans ()
50
+ import Ide.Plugin.CabalProject.Diagnostics as Diagnostics
51
+ import Ide.Plugin.CabalProject.Parse as Parse
52
+ import Ide.Plugin.CabalProject.Types as Types
59
53
import Ide.Plugin.Error
60
54
import Ide.Types
61
- import qualified Language.LSP.Protocol.Lens as JL
62
- import qualified Language.LSP.Protocol.Message as LSP
55
+ import qualified Language.LSP.Protocol.Lens as JL
56
+ import qualified Language.LSP.Protocol.Message as LSP
63
57
import Language.LSP.Protocol.Types
64
- import qualified Language.LSP.VFS as VFS
65
- import System.FilePath (takeFileName )
58
+ import qualified Language.LSP.VFS as VFS
59
+ import System.FilePath (takeFileName )
66
60
import Text.Regex.TDFA
67
61
68
-
69
62
data Log
70
63
= LogModificationTime NormalizedFilePath FileVersion
71
64
| LogShake Shake. Log
@@ -74,8 +67,6 @@ data Log
74
67
| LogDocSaved Uri
75
68
| LogDocClosed Uri
76
69
| LogFOI (HashMap NormalizedFilePath FileOfInterestStatus )
77
- | LogCompletionContext CTypes. Context Position
78
- | LogCompletions CTypes. Log
79
70
deriving (Show )
80
71
81
72
instance Pretty Log where
@@ -100,9 +91,7 @@ descriptor recorder plId =
100
91
{ pluginRules = cabalProjectRules recorder plId
101
92
, pluginHandlers =
102
93
mconcat
103
- [
104
- mkPluginHandler LSP. SMethod_TextDocumentCompletion $ completion recorder
105
- ]
94
+ []
106
95
, pluginNotificationHandlers =
107
96
mconcat
108
97
[ mkPluginNotificationHandler LSP. SMethod_TextDocumentDidOpen $
@@ -304,49 +293,3 @@ deleteFileOfInterest recorder state f = do
304
293
return [toKey IsFileOfInterest f]
305
294
where
306
295
log' = logWith recorder
307
-
308
- -- ----------------------------------------------------------------
309
- -- Completion
310
- -- ----------------------------------------------------------------
311
-
312
- completion :: Recorder (WithPriority Log ) -> PluginMethodHandler IdeState 'LSP.Method_TextDocumentCompletion
313
- completion recorder ide _ complParams = do
314
- let TextDocumentIdentifier uri = complParams ^. JL. textDocument
315
- position = complParams ^. JL. position
316
- mContents <- liftIO $ runAction " cabal-project-plugin.getUriContents" ide $ getUriContents $ toNormalizedUri uri
317
- case (,) <$> mContents <*> uriToFilePath' uri of
318
- Just (cnts, path) -> do
319
- -- We decide on `useWithStale` here, since `useWithStaleFast` often leads to the wrong completions being suggested.
320
- -- In case it fails, we still will get some completion results instead of an error.
321
- mFields <- liftIO $ runAction " cabal-project-plugin.fields" ide $ useWithStale ParseCabalProjectFields $ toNormalizedFilePath path
322
- case mFields of
323
- Nothing ->
324
- pure . InR $ InR Null
325
- Just (fields, _) -> do
326
- let lspPrefInfo = Ghcide. getCompletionPrefixFromRope position cnts
327
- cabalPrefInfo = Completions. getCabalPrefixInfo path lspPrefInfo
328
- let res = computeCompletionsAt recorder ide cabalPrefInfo path fields
329
- liftIO $ fmap InL res
330
- Nothing -> pure . InR $ InR Null
331
-
332
- computeCompletionsAt :: Recorder (WithPriority Log ) -> IdeState -> CTypes. CabalPrefixInfo -> FilePath -> [Syntax. Field Syntax. Position ] -> IO [CompletionItem ]
333
- computeCompletionsAt recorder ide prefInfo fp fields = do
334
- runMaybeT (context fields) >>= \ case
335
- Nothing -> pure []
336
- Just ctx -> do
337
- logWith recorder Debug $ LogCompletionContext ctx pos
338
- let completer = Completions. contextToCompleter ctx
339
- let completerData = CompleterTypes. CompleterData
340
- {
341
- cabalPrefixInfo = prefInfo
342
- , stanzaName =
343
- case fst ctx of
344
- CTypes. Stanza _ name -> name
345
- _ -> Nothing
346
- }
347
- completions <- completer completerRecorder completerData
348
- pure completions
349
- where
350
- pos = CTypes. completionCursorPosition prefInfo
351
- context fields = Completions. getContext completerRecorder prefInfo fields
352
- completerRecorder = cmapWithPrio LogCompletions recorder
0 commit comments