h&>j7i      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred"%&)*/1chls-plugin-apiIn row r , there is a  k, which has name s and carries haskell type thls-plugin-apiA proxy type in order to allow overloaded labels as properties' names at the call sitehls-plugin-api is a partial implementation of json schema, without supporting union types and validation. In hls, it defines a set of properties which used in dedicated configuration of a plugin. A property is an immediate child of the json object in each plugin's "config" section. It was designed to be compatible with vscode's settings UI. Use   and " to create and consume .hls-plugin-apiExistential wrapper of , with an extra hls-plugin-apiSingleton type of hls-plugin-api,Used at type level for name-type mapping in hls-plugin-apiMetadata of a propertyhls-plugin-apiTypes properties may have hls-plugin-api Creates a  that defines no property3Useful to start a definitions chain, for example:  properties = emptyProperties & defineStringProperty #exampleString "Description of exampleString" Foo & defineNumberProperty #exampleNumber "Description of exampleNumber" 233 !hls-plugin-apiGiven the name of a defined property, generates a JSON parser of  plcConfig"hls-plugin-apiLike ! but returns  on parse error#hls-plugin-apiDefines a number property$hls-plugin-apiDefines an integer property%hls-plugin-apiDefines a string property&hls-plugin-apiDefines a boolean property'hls-plugin-apiDefines an object property(hls-plugin-apiDefines an array property)hls-plugin-apiDefines an enum property*hls-plugin-apiConverts a properties definition into kv pairs with default values from +hls-plugin-api?Converts a properties definition into kv pairs as vscode schema#hls-plugin-api descriptionhls-plugin-api default value$hls-plugin-api descriptionhls-plugin-api default value%hls-plugin-api descriptionhls-plugin-api default value&hls-plugin-api descriptionhls-plugin-api default value'hls-plugin-api descriptionhls-plugin-api default value(hls-plugin-api descriptionhls-plugin-api default value)hls-plugin-api descriptionhls-plugin-api+valid enum members with each of description+  !"#$%&'()*++  #$%&'()*+!" Safe-Inferred 189:?-hls-plugin-api!A map from code ranges to values./hls-plugin-api of  corresponds to a 0hls-plugin-api Construct a - from a  accessor and a list of values.2hls-plugin-api Filter a - by a given .-./012-./012 Safe-Inferred"%&'()*/01;<=?,Ahls-plugin-api+Format the given Text as a whole or only a Range of it. Range must be relative to the text to format. To format the whole document, read the Text from the file and use B as the FormattingType.Uhls-plugin-apiCombine handlers for theWhls-plugin-api*Methods which have a PluginMethod instanceYhls-plugin-api*Methods which have a PluginMethod instancehls-plugin-apiPlugin Notification methods. No specific methods at the moment, but might contain more in the future.\hls-plugin-api0How to combine responses from different plugins.For example, for Hover requests, we might have multiple producers of Hover information, we do not want to decide which one to display to the user but allow here to define how to merge two hover request responses into one glorious hover box.However, sometimes only one handler of a request can realistically exist, such as TextDocumentFormatting, it is safe to just unconditionally report back one arbitrary result (arbitrary since it should only be one anyway).]hls-plugin-api)Methods that can be handled by plugins.  ExtraParams captures any extra data the IDE passes to the handlers for this method Only methods for which we know how to combine responses can be instances of ]^hls-plugin-apiParse the configuration to check if this plugin is enabled. Perform sanity checks on the message to see whether plugin is enabled for this message in particular. If a plugin is not enabled, its handlers, commands, etc... will not be run for the given message.Semantically, this method described whether a Plugin is enabled configuration wise and is allowed to respond to the message. This might depend on the URI that is associated to the Message Parameters, but doesn't have to. There are requests with no associated URI that, consequentially, can't inspect the URI.Common reason why a plugin might not be allowed to respond although it is enabled: * Plugin can not handle requests associated to the specific URI * Since the implementation of  >https://github.com/haskell/haskell-language-server/issues/2940 cabal plugins HLS knows plugins specific for Haskell and specific for 6https://cabal.readthedocs.io/en/3.6/cabal-package.htmlCabal file descriptionsStrictly speaking, we are conflating two concepts here: * Dynamically enabled (e.g. enabled on a per-message basis) * Statically enabled (e.g. by configuration in the lsp-client) * Strictly speaking, this might also change dynamicallyBut there is no use to split it up currently into two different methods for now._hls-plugin-apiDescribes the configuration a plugin. A plugin may be configurable in such form: { "plugin-id": { "globalOn": true, "codeActionsOn": true, "codeLensOn": true, "config": { "property1": "foo" } } } globalOn,  codeActionsOn, and  codeLensOn etc. are called generic configs, which can be inferred from handlers registered by the plugin. config1 is called custom config, which is defined using .ahls-plugin-api%Initial values for the generic configbhls-plugin-apiWhether or not to generate  diagnosticsOn config. Diagnostics emit in arbitrary shake rules, so we can't know statically if the plugin produces diagnosticschls-plugin-apiCustom config.dhls-plugin-apiAn existential wrapper of hhls-plugin-api Unique identifier of the plugin.ihls-plugin-apiPlugin handlers are called in priority order, higher priority firstqhls-plugin-apiFile extension of the files the plugin is responsible for. The plugin is only allowed to handle files with these extensions When writing handlers, etc. for this plugin it can be assumed that all handled files are of this type. The file extension must have a leading .rhls-plugin-apiA PluginConfig is a generic configuration for a given HLS plugin. It provides a "big switch" to turn it on or off as a whole, as well as small switches per feature, and a slot for custom config. This provides a regular naming scheme for all plugin config.hls-plugin-apiWe (initially anyway) mirror the hie configuration, so that existing clients can simply switch executable and not have any nasty surprises. There will be surprises relating to config options being ignored, initially though.hls-plugin-apiHooks for modifying the  at different times of the compilation process. Plugins can install a  via o in their f.hls-plugin-api9Invoked immediately at the package level. Changes to the  made in  are guaranteed to be seen everywhere in the compilation pipeline.hls-plugin-apiInvoked just before the parsing step, and reset immediately afterwards.  allows plugins to enable language extensions only during parsing. for example, to let them enable certain pieces of syntax.hls-plugin-api+Smart constructor that deduplicates pluginshls-plugin-api3Lookup the plugin that exposes a particular commandhls-plugin-apiCheck whether the given plugin descriptor is responsible for the file with the given path. Compares the file extension of the file at the given path with the file extension the plugin is responsible for.hls-plugin-api-Make a handler for plugins with no extra datahls-plugin-api-Make a handler for plugins with no extra datahls-plugin-apiSet up a plugin descriptor, initialized with default values. This is plugin descriptor is prepared for haskell files, such as .hs .lhs .hs-bootand handlers will be enabled for files with the appropriate file extensions.hls-plugin-apiSet up a plugin descriptor, initialized with default values. This is plugin descriptor is prepared for .cabal2 files and as such, will only respond / run when .cabal files are currently in scope.2Handles files with the following extensions: * .cabalhls-plugin-api&Lookup the current config for a pluginhls-plugin-apiChecks that a given plugin is both enabled and the specific feature is enabledhls-plugin-apiGet the operating system process id for the running server instance. This should be the same for the lifetime of the instance, and different from that of any other currently running instance.\hls-plugin-apiIDE Configuration^hls-plugin-api Method type.hls-plugin-apiWhether a plugin is enabled might depend on the message parameters eg q< specifies what file extension a plugin is allowed to handlehls-plugin-apiContains meta information such as PluginId and what file types this plugin is able to handle.hls-plugin-api-Generic config description, expected to hold r configuration for this pluginhls-plugin-apiIs this plugin enabled and allowed to respond to the given request with the given parameters?9:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgihkjlmnopqrstuvwxyz{|}~fgihkjlmnopqYZWXrstuvwxyz{|}~_`abcde;<=>ABC@?9:GHIJKLMFDEUVQR]^NSTOP[\ Safe-Inferred "(1?/jhls-plugin-apiGiven a DidChangeConfigurationNotification message, this function returns the parsed Config object if possible.hls-plugin-api Parse the r. Since we need to fall back to default values if we do not find one in the input, we need the map of plugin-provided defaults, as in .rstuvwxyz{|}~rstuvwxyz{|}~ Safe-Inferred"15 hls-plugin-apiExtend to the line below and above to replace newline character.0normalize (Range (Position 5 5) (Position 5 10))#Range (Position 5 0) (Position 6 0)hls-plugin-apiExtend  to the start of the next line.5extendNextLine (Range (Position 5 5) (Position 5 10))#Range (Position 5 5) (Position 6 0)hls-plugin-apiExtend " to the start of the current line.6extendLineStart (Range (Position 5 5) (Position 5 10))$Range (Position 5 0) (Position 5 10)hls-plugin-api Generate a ! value from a pair of source Texthls-plugin-apiA pure version of  for testinghls-plugin-apiReturns the current client configuration. It is not wise to permanently cache the returned value of this function, as clients can at runtime change their configuration.hls-plugin-apiReturns the current plugin configuration. It is not wise to permanently cache the returned value of this function, as clients can change their configuration at runtime.hls-plugin-api>Returns the value of a property defined by the current plugin.hls-plugin-api*Gets the range that covers the entire texthls-plugin-apiUnescape printable escape sequences within double quotes. This is useful if you have to call  indirectly, and it escapes some characters which you would prefer to display as is.hls-plugin-apiParser for a string that contains double quotes. Returns unescaped string.#^#^ Safe-Inferred "%&()*17]hls-plugin-apiGenerates a default ", but remains only effective itemshls-plugin-apiGenerates json schema used in haskell vscode extension Similar to 2 but simpler, since schema has a flatten structure   !"#$%&'()*+,-./01234556789:;<=>?@ABBCDEFGHIJJKLLMNOPPQRRSSTTUUVVWWXYZ[\\]^_``aabcdefghijkllmnopqrstuvwxyz{|}}~   -hls-plugin-api-2.0.0.1-F0MLp1kxDa252ShnvMF0d5Ide.Plugin.PropertiesIde.PluginUtilsIde.Plugin.RangeMap Ide.TypesIde.Plugin.ConfigIde.Plugin.ConfigUtilsbase Data.Function&(lsp-types-1.6.0.0-8d2dNttOZPh48sGAb1prI9Language.LSP.Types.LocationpositionInRange HasProperty KeyNameProxy Properties SPropertyKeySNumberSIntegerSStringSBooleanSObjectSArraySEnum PropertyKeyMetaData EnumMetaData defaultValue description enumValuesenumDescriptionsToHsType PropertyTypeTNumberTIntegerTStringTBooleanTObjectTArrayTEnumemptyPropertiesusePropertyEither usePropertydefineNumberPropertydefineIntegerPropertydefineStringPropertydefineBooleanPropertydefineObjectPropertydefineArrayPropertydefineEnumProperty toDefaultJSONtoVSCodeExtensionSchema$fIsLabelsKeyNameProxyRangeMap unRangeMapfromList fromList' filterByRange$fNFDataRangeMap$fSemigroupRangeMap$fMonoidRangeMap$fFunctorRangeMap$fFoldableRangeMap$fTraversableRangeMap HasTracing traceWithSpanFallbackCodeActionParamsfallbackWorkspaceEditfallbackCommandFormattingHandlerFormattingMethodFormattingType FormatText FormatRangePluginIdCommandFunction PluginCommand commandId commandDesc commandFunc CommandIdPluginMethodHandlerPluginNotificationHandlersPluginHandlersPluginNotificationHandler PluginHandlerIdeNotification IdeMethodPluginRequestMethodcombineResponses PluginMethod pluginEnabledConfigDescriptorconfigInitialGenericConfigconfigHasDiagnosticsconfigCustomConfig CustomConfigPluginDescriptorpluginIdpluginPriority pluginRulespluginCommandspluginHandlerspluginConfigDescriptorpluginNotificationHandlerspluginModifyDynflags pluginClipluginFileType PluginConfig plcGlobalOnplcCallHierarchyOnplcCodeActionsOn plcCodeLensOnplcDiagnosticsOn plcHoverOn plcSymbolsOnplcCompletionOn plcRenameOnplcSelectionRangeOnplcFoldingRangeOn plcConfig CheckParents NeverCheck CheckOnSave AlwaysCheckConfig checkParents checkProjectformattingProvidercabalFormattingProvidermaxCompletionsplugins IdeCommandDynFlagsModificationsdynFlagsModifyGlobaldynFlagsModifyParser IdePluginslookupCommandProvideripMapmkCustomConfigdefaultConfigDescriptormkPluginHandlermkPluginNotificationHandlerdefaultPluginPrioritydefaultPluginDescriptordefaultCabalPluginDescriptorconfigForPluginpluginEnabledConfigmkFormattingHandlers responseError mkLspCommand mkLspCmdIdgetPid getProcessIDinstallSigUsr1Handler$fMonoidDynFlagsModifications $fSemigroupDynFlagsModifications$fShowIdeCommand$fToJSONPluginConfig$fDefaultPluginConfig$fIsStringCommandId$fIsStringPluginId$fDefaultConfig$fToJSONConfig$fHasTracingCompletionItem,$fHasTracingCallHierarchyOutgoingCallsParams,$fHasTracingCallHierarchyIncomingCallsParams!$fHasTracingWorkspaceSymbolParams$fHasTracingMaybe$fHasTracingInitializeParams($fHasTracingDidChangeConfigurationParams+$fHasTracingDidChangeWorkspaceFoldersParams'$fHasTracingDidChangeWatchedFilesParams $fHasTracingExecuteCommandParams$fHasTracingValue $fHasTracinga"$fMonoidPluginNotificationHandlers%$fSemigroupPluginNotificationHandlers$fMonoidPluginHandlers$fSemigroupPluginHandlers$fGCompareMethodIdeNotification$fGEqMethodIdeNotification$fGCompareMethodIdeMethod$fGEqMethodIdeMethod%$fPluginNotificationMethodInitialized9$fPluginNotificationMethodWorkspaceDidChangeConfiguration<$fPluginNotificationMethodWorkspaceDidChangeWorkspaceFolders8$fPluginNotificationMethodWorkspaceDidChangeWatchedFiles.$fPluginNotificationMethodTextDocumentDidClose-$fPluginNotificationMethodTextDocumentDidSave/$fPluginNotificationMethodTextDocumentDidChange-$fPluginNotificationMethodTextDocumentDidOpen%$fPluginMethodNotificationInitialized9$fPluginMethodNotificationWorkspaceDidChangeConfiguration<$fPluginMethodNotificationWorkspaceDidChangeWorkspaceFolders8$fPluginMethodNotificationWorkspaceDidChangeWatchedFiles.$fPluginMethodNotificationTextDocumentDidClose-$fPluginMethodNotificationTextDocumentDidSave/$fPluginMethodNotificationTextDocumentDidChange-$fPluginMethodNotificationTextDocumentDidOpen!$fPluginRequestMethodCustomMethod/$fPluginRequestMethodCallHierarchyOutgoingCalls/$fPluginRequestMethodCallHierarchyIncomingCalls-$fPluginRequestMethodTextDocumentFoldingRange/$fPluginRequestMethodTextDocumentSelectionRange5$fPluginRequestMethodTextDocumentPrepareCallHierarchy0$fPluginRequestMethodTextDocumentRangeFormatting+$fPluginRequestMethodTextDocumentFormatting+$fPluginRequestMethodTextDocumentCompletion*$fPluginRequestMethodCompletionItemResolve/$fPluginRequestMethodTextDocumentDocumentSymbol&$fPluginRequestMethodTextDocumentHover'$fPluginRequestMethodTextDocumentRename)$fPluginRequestMethodTextDocumentCodeLens$$fPluginRequestMethodWorkspaceSymbol+$fPluginRequestMethodTextDocumentReferences2$fPluginRequestMethodTextDocumentDocumentHighlight/$fPluginRequestMethodTextDocumentTypeDefinition+$fPluginRequestMethodTextDocumentDefinition!$fPluginMethodRequestCustomMethod/$fPluginMethodRequestCallHierarchyOutgoingCalls/$fPluginMethodRequestCallHierarchyIncomingCalls-$fPluginMethodRequestTextDocumentFoldingRange/$fPluginMethodRequestTextDocumentSelectionRange5$fPluginMethodRequestTextDocumentPrepareCallHierarchy0$fPluginMethodRequestTextDocumentRangeFormatting+$fPluginMethodRequestTextDocumentFormatting+$fPluginMethodRequestTextDocumentCompletion*$fPluginMethodRequestCompletionItemResolve/$fPluginMethodRequestTextDocumentDocumentSymbol&$fPluginMethodRequestTextDocumentHover'$fPluginMethodRequestTextDocumentRename)$fPluginMethodRequestTextDocumentCodeLens$$fPluginMethodRequestWorkspaceSymbol+$fPluginMethodRequestTextDocumentReferences2$fPluginMethodRequestTextDocumentDocumentHighlight/$fPluginMethodRequestTextDocumentTypeDefinition+$fPluginMethodRequestTextDocumentDefinition+$fPluginRequestMethodTextDocumentCodeAction+$fPluginMethodRequestTextDocumentCodeAction$fMonoidIdePlugins$fSemigroupIdePlugins!$fGenericFallbackCodeActionParams $fToJSONFallbackCodeActionParams"$fFromJSONFallbackCodeActionParams $fShowConfig $fEqConfig$fShowPluginId$fReadPluginId $fEqPluginId $fOrdPluginId$fFromJSONPluginId$fHashablePluginId$fShowCommandId$fReadCommandId $fEqCommandId$fOrdCommandId$fShowPluginConfig$fEqPluginConfig$fEqCheckParents$fOrdCheckParents$fShowCheckParents$fGenericCheckParents$fFromJSONCheckParents$fToJSONCheckParentsgetConfigFromNotification parseConfig WithDeletionsIncludeDeletions SkipDeletions normalizeextendNextLineextendLineStartdiffTextmakeDiffTextEditmakeDiffTextEditAdditive diffText'pluginDescToIdePluginsidePluginsToPluginDescgetClientConfiggetPluginConfigusePropertyLsp extractRange fullRangesubRange allLspCmdIds' allLspCmdIdsgetNormalizedFilePaththrowPluginError handleMaybe handleMaybeMpluginResponseunescape$fEqWithDeletionspluginsToDefaultConfigpluginsToVSCodeExtensionSchemaSomePropertyKeyWithMetaData,hw-fingertree-0.1.2.1-Jt8yOHT1a4A9G93GW2k2km(HaskellWorks.Data.IntervalMap.FingerTreeIntervalPositionRangePluginNotificationMethodGHC.Base.ghcGHC.Driver.SessionDynFlagslookupPluginIdpluginResponsible parsePlugins Language.LSP.Types.WorkspaceEdit WorkspaceEditGHC.ShowshowescapedTextParser