Îõ³h&aíÁ      !"#$%&'()*+,-./0123456789:;<=>?@ Safe-Inferred"ÂÚã hls-cabal-pluginGiven a diagnostic returned by ë, if it represents an "Unknown SPDX license identifier"-error along with a suggestion, then return a AË for replacing the the incorrect license identifier with the suggestion.Bhls-cabal-plugin0License name of every license supported by cabal!hls-cabal-pluginGiven a diagnostic returned by Ú, provide possible corrections for SPDX license identifiers based on the list specified in Cabal. Results are sorted by best fit, and prefer solutions that have smaller length distance to the original word.Òtake 2 $ licenseErrorSuggestion (T.pack "Unknown SPDX license identifier: 'BSD3'")6[("BSD3","BSD-3-Clause"),("BSD3","BSD-3-Clause-LBNL")] hls-cabal-plugin+File for which the diagnostic was generatedhls-cabal-plugin Output of !hls-cabal-plugin Output of hls-cabal-pluginÀ(Original (incorrect) license identifier, suggested replacement)  ! !  Safe-Inferred‡"hls-cabal-pluginUTF-8 encoded bytestring  ""   Safe-Inferred"%Ôè p#hls-cabal-plugin.Produce a diagnostic from a Cabal parser error$hls-cabal-plugin0Produce a diagnostic from a Cabal parser warningChls-cabal-pluginÛThe Cabal parser does not output a _range_ for a warning/error, only a single source code Ú. We define the range to be _from_ this position _to_ the first column of the next line.%hls-cabal-plugin Convert a  from Cabal to a D that LSP understands.ìPrefer this function over hand-rolled unpacking/packing, since LSP is zero-based, while Cabal is one-based.,positionFromCabalPosition $ Lib.Position 1 1 Position 0 0Ehls-cabal-plugin Create a Ehls-cabal-pluginCabal file pathhls-cabal-plugin$Where does the diagnostic come from?hls-cabal-pluginSeverityhls-cabal-plugin4Which source code range should the editor highlight?hls-cabal-plugin#The message displayed by the editor #$% #$% Safe-Inferred"%'1;ÁÂÃÌÔÚãè×Fhls-cabal-plugin³Cabal files that are currently open in the lsp-client. Specific actions happen when these files are saved, closed or modified, such as generating diagnostics, re-parsing, etc... We need to store the open files to parse them again if we restart the shake session. Restarting of the shake session happens whenever these files are modified.Ghls-cabal-pluginºHelper function to restart the shake session, specifically for modifying .cabal files. No special logic, just group up a bunch of functions you need for the base Notification Handlers.§To make sure diagnostics are up to date, we need to tell shake that the file was touched and needs to be re-parsed. That's what we do when we record the dirty key that our parsing rule depends on. Then we restart the shake session, so that changes to our virtual files are actually picked up.Hhls-cabal-plugin°This is the kick function for the cabal plugin. We run this action, whenever we shake session us run/restarted, which triggers actions to produce diagnostics for cabal files.èIt is paramount that this kick-function can be run quickly, since it is a blocking function invocation.Ihls-cabal-plugin6The rule that initialises the files of interest state.Needs to be run on start-up. &(')*+,-. .&(')*+,-Ê                   !"#$%&'()'()'(*'(+'(,'(-'(.'(/'(0123456789:;<=>?@ABCDEFGHIJKLMNOP'QRST'UVWXYZ[Ü/hls-cabal-plugin-2.0.0.0-AqVEaaInY13ExoZm8OCrINIde.Plugin.Cabal.ParseIde.Plugin.Cabal.LicenseSuggestIde.Plugin.Cabal.DiagnosticsIde.Plugin.CabalIde.Plugin.Cabal.DiagerrorDiagnosticbaseGHC.BaseNonEmpty:| Cabal-3.6.3.0,Distribution.Types.GenericPackageDescriptionpackageDescriptiongpdScannedVersiongenPackageFlagscondTestSuitescondSubLibraries condLibrarycondForeignLibscondExecutablescondBenchmarksGenericPackageDescriptionDistribution.Types.VersionVersionDistribution.Parsec.ErrorPErrorDistribution.Parsec.WarningPWarningDistribution.Parsec.PositionPositionGHC.IOFilePath text-1.2.5.0Data.Text.InternalText$ghcide-2.0.0.0-CkqMLm1apMuG7gZqD0vay!Development.IDE.Types.DiagnosticsFileDiagnostic(lsp-types-1.6.0.0-ADWGUPu2vzQDpYvK7KrBVsLanguage.LSP.Types.Diagnostic Diagnostic$sel:_range:Diagnostic$sel:_severity:Diagnostic$sel:_code:Diagnostic$sel:_source:Diagnostic$sel:_message:Diagnostic$sel:_tags:Diagnostic#$sel:_relatedInformation:DiagnosticlicenseErrorActionlicenseErrorSuggestionparseCabalFileContentswarningDiagnosticpositionFromCabalPositionLogLogModificationTimeLogShake LogDocOpenedLogDocModified LogDocSaved LogDocClosedLogFOI descriptor $fPrettyLog$fNFDataParseCabal$fHashableParseCabal#$fIsIdeGlobalTYPEOfInterestCabalVar$fNFDataIsCabalFileOfInterest$fHashableIsCabalFileOfInterest!$fNFDataCabalFileOfInterestResult#$fHashableCabalFileOfInterestResult$fEqCabalFileOfInterestResult$fShowCabalFileOfInterestResult"$fGenericCabalFileOfInterestResult$fEqIsCabalFileOfInterest$fShowIsCabalFileOfInterest$fGenericIsCabalFileOfInterest$fEqParseCabal$fShowParseCabal$fGenericParseCabal $fShowLogLanguage.LSP.Types.CodeAction CodeAction licenseNamestoBeginningOfNextLineLanguage.LSP.Types.LocationRangemkDiagOfInterestCabalVarrestartCabalShakeSessionkickofInterestRules