@@ -78,6 +78,7 @@ import Data.Hashable (Hashable)
7878import Data.HashMap.Strict (HashMap )
7979import qualified Data.HashMap.Strict as HashMap
8080import Data.Kind (Type )
81+ import qualified Data.List as List
8182import Data.List.Extra (find , sortOn )
8283import Data.List.NonEmpty (NonEmpty (.. ), toList )
8384import qualified Data.Map as Map
@@ -192,7 +193,7 @@ instance ToJSON Config where
192193 , " formattingProvider" .= formattingProvider
193194 , " cabalFormattingProvider" .= cabalFormattingProvider
194195 , " maxCompletions" .= maxCompletions
195- , " sessionLoading " .= sessionLoading
196+ , " componentsLoading " .= sessionLoading
196197 , " linkSourceTo" .= linkSourceTo
197198 , " linkDocTo" .= linkDocTo
198199 , " plugin" .= Map. mapKeysMonotonic (\ (PluginId p) -> p) plugins
@@ -240,24 +241,40 @@ data SessionLoadingPreferenceConfig
240241 --
241242 -- The cradle can decide how to handle these situations, and whether
242243 -- to honour the preference at all.
244+ | PreferMultiWholeProjectLoading
245+ -- ^ Prefer loading all the components specified in the cradle, if possible.
243246 deriving stock (Eq , Ord , Show , Generic )
244247
245248instance Pretty SessionLoadingPreferenceConfig where
246- pretty PreferSingleComponentLoading = " Prefer Single Component Loading"
247- pretty PreferMultiComponentLoading = " Prefer Multiple Components Loading"
249+ pretty PreferSingleComponentLoading = " Prefer Single Component Loading"
250+ pretty PreferMultiComponentLoading = " Prefer Multiple Components Loading"
251+ pretty PreferMultiWholeProjectLoading = " Prefer Whole Project Loading"
248252
249253instance ToJSON SessionLoadingPreferenceConfig where
250254 toJSON PreferSingleComponentLoading =
251- String " singleComponent "
255+ String " single "
252256 toJSON PreferMultiComponentLoading =
253- String " multipleComponents"
257+ String " multi: needed-only"
258+ toJSON PreferMultiWholeProjectLoading =
259+ String " multi: whole-project"
254260
255261instance FromJSON SessionLoadingPreferenceConfig where
256262 parseJSON (String val) = case val of
257263 " singleComponent" -> pure PreferSingleComponentLoading
264+ " single" -> pure PreferSingleComponentLoading
258265 " multipleComponents" -> pure PreferMultiComponentLoading
266+ " multi: needed-only" -> pure PreferMultiComponentLoading
267+ " multi: whole-project" -> pure PreferMultiWholeProjectLoading
259268 _ -> A. prependFailure " parsing SessionLoadingPreferenceConfig failed, "
260- (A. parseFail $ " Expected one of \" singleComponent\" or \" multipleComponents\" but got " <> T. unpack val )
269+ (A. parseFail $ unwords [" Expected one of" , expected, " but got" , T. unpack val] )
270+ where
271+ expected = concat [" [" , List. intercalate " , " fields, " ]" ]
272+ fields = map (show @ String )
273+ [" single" , " multi: only-needed" , " multi: whole-project" ]
274+ ++
275+ [ show @ String old_value ++ " (deprecated)"
276+ | old_value <- [" singleComponent" ," multiComponent" ]
277+ ]
261278 parseJSON o = A. prependFailure " parsing SessionLoadingPreferenceConfig failed, "
262279 (A. typeMismatch " String" o)
263280
0 commit comments