@@ -17,8 +17,10 @@ import qualified Data.ByteString as BS
1717import Data.Hashable
1818import Data.HashMap.Strict (HashMap )
1919import qualified Data.HashMap.Strict as HashMap
20+ import qualified Data.List as List
2021import qualified Data.List.NonEmpty as NE
2122import qualified Data.Maybe as Maybe
23+ import qualified Data.Text ()
2224import qualified Data.Text as T
2325import qualified Data.Text.Encoding as Encoding
2426import Data.Text.Utf16.Rope.Mixed as Rope
@@ -33,17 +35,21 @@ import Development.IDE.Graph (Key,
3335import Development.IDE.LSP.HoverDefinition (foundHover )
3436import qualified Development.IDE.Plugin.Completions.Logic as Ghcide
3537import Development.IDE.Types.Shake (toKey )
38+ import qualified Distribution.CabalSpecVersion as Cabal
3639import qualified Distribution.Fields as Syntax
3740import Distribution.Package (Dependency )
3841import Distribution.PackageDescription (allBuildDepends ,
3942 depPkgName ,
4043 unPackageName )
4144import Distribution.PackageDescription.Configuration (flattenPackageDescription )
45+ import Distribution.Parsec.Error
4246import qualified Distribution.Parsec.Position as Syntax
4347import GHC.Generics
48+ import qualified Ide.Plugin.Cabal.CabalAdd as CabalAdd
4449import Ide.Plugin.Cabal.Completion.CabalFields as CabalFields
4550import qualified Ide.Plugin.Cabal.Completion.Completer.Types as CompleterTypes
4651import qualified Ide.Plugin.Cabal.Completion.Completions as Completions
52+ import qualified Ide.Plugin.Cabal.Completion.Data as Data
4753import Ide.Plugin.Cabal.Completion.Types (ParseCabalCommonSections (ParseCabalCommonSections ),
4854 ParseCabalFields (.. ),
4955 ParseCabalFile (.. ))
@@ -63,10 +69,6 @@ import Language.LSP.Protocol.Types
6369import qualified Language.LSP.VFS as VFS
6470import Text.Regex.TDFA
6571
66-
67- import qualified Data.Text ()
68- import qualified Ide.Plugin.Cabal.CabalAdd as CabalAdd
69-
7072data Log
7173 = LogModificationTime NormalizedFilePath FileVersion
7274 | LogShake Shake. Log
@@ -247,7 +249,31 @@ cabalRules recorder plId = do
247249 let warningDiags = fmap (Diagnostics. warningDiagnostic file) pWarnings
248250 case pm of
249251 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
251277 allDiags = errorDiags <> warningDiags
252278 pure (allDiags, Nothing )
253279 Right gpd -> do
0 commit comments