@@ -17,8 +17,10 @@ import qualified Data.ByteString as BS
17
17
import Data.Hashable
18
18
import Data.HashMap.Strict (HashMap )
19
19
import qualified Data.HashMap.Strict as HashMap
20
+ import qualified Data.List as List
20
21
import qualified Data.List.NonEmpty as NE
21
22
import qualified Data.Maybe as Maybe
23
+ import qualified Data.Text ()
22
24
import qualified Data.Text as T
23
25
import qualified Data.Text.Encoding as Encoding
24
26
import Data.Text.Utf16.Rope.Mixed as Rope
@@ -33,17 +35,21 @@ import Development.IDE.Graph (Key,
33
35
import Development.IDE.LSP.HoverDefinition (foundHover )
34
36
import qualified Development.IDE.Plugin.Completions.Logic as Ghcide
35
37
import Development.IDE.Types.Shake (toKey )
38
+ import qualified Distribution.CabalSpecVersion as Cabal
36
39
import qualified Distribution.Fields as Syntax
37
40
import Distribution.Package (Dependency )
38
41
import Distribution.PackageDescription (allBuildDepends ,
39
42
depPkgName ,
40
43
unPackageName )
41
44
import Distribution.PackageDescription.Configuration (flattenPackageDescription )
45
+ import Distribution.Parsec.Error
42
46
import qualified Distribution.Parsec.Position as Syntax
43
47
import GHC.Generics
48
+ import qualified Ide.Plugin.Cabal.CabalAdd as CabalAdd
44
49
import Ide.Plugin.Cabal.Completion.CabalFields as CabalFields
45
50
import qualified Ide.Plugin.Cabal.Completion.Completer.Types as CompleterTypes
46
51
import qualified Ide.Plugin.Cabal.Completion.Completions as Completions
52
+ import qualified Ide.Plugin.Cabal.Completion.Data as Data
47
53
import Ide.Plugin.Cabal.Completion.Types (ParseCabalCommonSections (ParseCabalCommonSections ),
48
54
ParseCabalFields (.. ),
49
55
ParseCabalFile (.. ))
@@ -63,10 +69,6 @@ import Language.LSP.Protocol.Types
63
69
import qualified Language.LSP.VFS as VFS
64
70
import Text.Regex.TDFA
65
71
66
-
67
- import qualified Data.Text ()
68
- import qualified Ide.Plugin.Cabal.CabalAdd as CabalAdd
69
-
70
72
data Log
71
73
= LogModificationTime NormalizedFilePath FileVersion
72
74
| LogShake Shake. Log
@@ -247,7 +249,31 @@ cabalRules recorder plId = do
247
249
let warningDiags = fmap (Diagnostics. warningDiagnostic file) pWarnings
248
250
case pm of
249
251
Left (_cabalVersion, pErrorNE) -> do
250
- let errorDiags = NE. toList $ NE. map (Diagnostics. errorDiagnostic file) pErrorNE
252
+ let regex :: T. Text
253
+ -- We don't support the cabal version, this should not be an error, as the
254
+ -- user did not do anything wrong. Instead we cast it to a warning
255
+ regex = " Unsupported cabal-version [0-9]+.[0-9]*"
256
+ unsupportedCabalHelpText = unlines
257
+ [ " The used cabal version is not fully supported by HLS. This means that some functionality might not work as expected."
258
+ , " If you face any issues try to downgrade to a supported cabal version."
259
+ , " "
260
+ , " Supported versions are: " <>
261
+ List. intercalate " , "
262
+ (fmap Cabal. showCabalSpecVersion Data. supportedCabalVersions)
263
+ ]
264
+ errorDiags =
265
+ NE. toList $
266
+ NE. map
267
+ ( \ pe@ (PError pos text) ->
268
+ if text =~ regex
269
+ then Diagnostics. warningDiagnostic file (Syntax. PWarning Syntax. PWTOther pos $
270
+ unlines
271
+ [ text
272
+ , unsupportedCabalHelpText
273
+ ])
274
+ else Diagnostics. errorDiagnostic file pe
275
+ )
276
+ pErrorNE
251
277
allDiags = errorDiags <> warningDiags
252
278
pure (allDiags, Nothing )
253
279
Right gpd -> do
0 commit comments