@@ -5,22 +5,26 @@ module Development.IDE.Plugin.Plugins.FillHole
5
5
import Control.Monad (guard )
6
6
import Data.Char
7
7
import qualified Data.Text as T
8
+ import Development.IDE.GHC.Util (textInRange )
8
9
import Development.IDE.Plugin.Plugins.Diagnostic
9
10
import Language.LSP.Protocol.Types (Diagnostic (.. ),
10
11
TextEdit (TextEdit ))
11
12
import Text.Regex.TDFA (MatchResult (.. ),
12
13
(=~) )
13
14
14
- suggestFillHole :: Diagnostic -> [(T. Text , TextEdit )]
15
- suggestFillHole Diagnostic {_range= _range,.. }
15
+ suggestFillHole :: Maybe T. Text -> Diagnostic -> [(T. Text , TextEdit )]
16
+ suggestFillHole contents Diagnostic {_range= _range,.. }
16
17
| Just holeName <- extractHoleName _message
17
18
, (holeFits, refFits) <- processHoleSuggestions (T. lines _message) =
18
- let isInfixHole = _message =~ addBackticks holeName :: Bool in
19
+ let isInfixHole = textInDiagnosticRange =~ addBackticks holeName :: Bool in
19
20
map (proposeHoleFit holeName False isInfixHole) holeFits
20
21
++ map (proposeHoleFit holeName True isInfixHole) refFits
21
22
| otherwise = []
22
23
where
23
24
extractHoleName = fmap (headOrThrow " impossible" ) . flip matchRegexUnifySpaces " Found hole: ([^ ]*)"
25
+ textInDiagnosticRange = case contents of
26
+ Nothing -> " "
27
+ Just text -> textInRange _range text
24
28
addBackticks text = " `" <> text <> " `"
25
29
addParens text = " (" <> text <> " )"
26
30
proposeHoleFit holeName parenthise isInfixHole name =
0 commit comments