h&71      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ Safe-Inferred"%&1;=?hls-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-apiGiven a DidChangeConfigurationNotification message, this function returns the parsed Config object if possible.   Safe-Inferred"%&)*/1+hls-plugin-apiIn row r , there is a 7 k, which has name s and carries haskell type t,hls-plugin-apiA proxy type in order to allow overloaded labels as properties' names at the call site.hls-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 I and K to create and consume ..hls-plugin-apiExistential wrapper of /, with an extra 9/hls-plugin-apiSingleton type of 77hls-plugin-api,Used at type level for name-type mapping in .9hls-plugin-apiMetadata of a propertyAhls-plugin-apiTypes properties may haveIhls-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 Jhls-plugin-apiGiven the name of a defined property, generates a JSON parser of  plcConfigKhls-plugin-apiLike J but returns < on parse errorLhls-plugin-apiDefines a number propertyMhls-plugin-apiDefines an integer propertyNhls-plugin-apiDefines a string propertyOhls-plugin-apiDefines a boolean propertyPhls-plugin-apiDefines an object propertyQhls-plugin-apiDefines an array propertyRhls-plugin-apiDefines an enum propertyShls-plugin-apiConverts a properties definition into kv pairs with default values from 9Thls-plugin-api?Converts a properties definition into kv pairs as vscode schemaLhls-plugin-api descriptionhls-plugin-api default valueMhls-plugin-api descriptionhls-plugin-api default valueNhls-plugin-api descriptionhls-plugin-api default valueOhls-plugin-api descriptionhls-plugin-api default valuePhls-plugin-api descriptionhls-plugin-api default valueQhls-plugin-api descriptionhls-plugin-api default valueRhls-plugin-api descriptionhls-plugin-api+valid enum members with each of description++,-./0123456789:;=<>?@AGBCDEFHIJKLMNOPQRST+AGBCDEFH@9:;=<>?78/0123456,-.+ILMNOPQRSTJK Safe-Inferred"%&'()*/01;<=?+^hls-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 _ as the FormattingType.rhls-plugin-apiCombine handlers for thethls-plugin-api*Methods which have a PluginMethod instancevhls-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.yhls-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).zhls-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 z{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 ..~hls-plugin-api+Whether or not to generate generic configs.hls-plugin-apiWhether or not to generate  diagnosticsOn config. Diagnostics emit in arbitrary shake rules, so we can't know statically if the plugin produces diagnosticshls-plugin-apiCustom config.hls-plugin-apiAn existential wrapper of .hls-plugin-api Unique identifier of the plugin.hls-plugin-apiPlugin handlers are called in priority order, higher priority firsthls-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 .hls-plugin-apiHooks for modifying the  at different times of the compilation process. Plugins can install a  via  in their .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-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.yhls-plugin-apiIDE Configuration{hls-plugin-api Method type.hls-plugin-apiWhether a plugin is enabled might depend on the message parameters eg < 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  configuration for this pluginhls-plugin-apiIs this plugin enabled and allowed to respond to the given request with the given parameters?VWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~vwtu|}~XYZ[^_`]\VWdefghijcabrsnoz{kpqlmxy Safe-Inferred"1/hls-plugin-apiExtend to the line below and above to replace newline character.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 runitime 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 text { { Safe-Inferred "%&()*11hls-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     !"#$%&'()*+,-./01234456789:;<=>>??@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]]^_`abcdeefgghijkklmmnnooppqqrrstuvwwxyz{{||}~ -hls-plugin-api-1.5.0.0-BXQtiafHCTK9l5i8ZO3ecWIde.Plugin.PropertiesIde.PluginUtilsIde.Plugin.Config Ide.TypesIde.Plugin.ConfigUtilsbase Data.Function&(lsp-types-1.6.0.0-37GVhjtWBU7AMNwED5fpL1Language.LSP.Types.LocationpositionInRange PluginConfig plcGlobalOnplcCallHierarchyOnplcCodeActionsOn plcCodeLensOnplcDiagnosticsOn plcHoverOn plcSymbolsOnplcCompletionOn plcRenameOnplcSelectionRangeOn plcConfigConfig checkParents checkProjectformattingProvidermaxCompletionsplugins CheckParents NeverCheck CheckOnSave AlwaysCheckgetConfigFromNotification parseConfig$fFromJSONPluginConfig$fToJSONPluginConfig$fDefaultPluginConfig$fToJSONConfig$fDefaultConfig $fShowConfig $fEqConfig$fShowPluginConfig$fEqPluginConfig$fEqCheckParents$fOrdCheckParents$fShowCheckParents$fGenericCheckParents$fFromJSONCheckParents$fToJSONCheckParents HasProperty KeyNameProxy Properties SPropertyKeySNumberSIntegerSStringSBooleanSObjectSArraySEnum PropertyKeyMetaData EnumMetaData defaultValue description enumValuesenumDescriptionsToHsType PropertyTypeTNumberTIntegerTStringTBooleanTObjectTArrayTEnumemptyPropertiesusePropertyEither usePropertydefineNumberPropertydefineIntegerPropertydefineStringPropertydefineBooleanPropertydefineObjectPropertydefineArrayPropertydefineEnumProperty toDefaultJSONtoVSCodeExtensionSchema$fIsLabelsKeyNameProxy HasTracing traceWithSpanFallbackCodeActionParamsfallbackWorkspaceEditfallbackCommandFormattingHandlerFormattingMethodFormattingType FormatText FormatRangePluginIdCommandFunction PluginCommand commandId commandDesc commandFunc CommandIdPluginMethodHandlerPluginNotificationHandlersPluginHandlersPluginNotificationHandler PluginHandlerIdeNotification IdeMethodPluginRequestMethodcombineResponses PluginMethod pluginEnabledConfigDescriptorconfigEnableGenericConfigconfigHasDiagnosticsconfigCustomConfig CustomConfigPluginDescriptorpluginIdpluginPriority pluginRulespluginCommandspluginHandlerspluginConfigDescriptorpluginNotificationHandlerspluginModifyDynflags pluginClipluginFileType IdeCommandDynFlagsModificationsdynFlagsModifyGlobaldynFlagsModifyParser IdePluginslookupCommandProvideripMapmkCustomConfigdefaultConfigDescriptormkPluginHandlermkPluginNotificationHandlerdefaultPluginPrioritydefaultPluginDescriptordefaultCabalPluginDescriptorconfigForPluginpluginEnabledConfigmkFormattingHandlers responseError mkLspCommand mkLspCmdIdgetPid getProcessIDinstallSigUsr1Handler$fMonoidDynFlagsModifications $fSemigroupDynFlagsModifications$fShowIdeCommand$fIsStringCommandId$fIsStringPluginId,$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/$fPluginRequestMethodTextDocumentSelectionRange5$fPluginRequestMethodTextDocumentPrepareCallHierarchy0$fPluginRequestMethodTextDocumentRangeFormatting+$fPluginRequestMethodTextDocumentFormatting+$fPluginRequestMethodTextDocumentCompletion/$fPluginRequestMethodTextDocumentDocumentSymbol&$fPluginRequestMethodTextDocumentHover'$fPluginRequestMethodTextDocumentRename)$fPluginRequestMethodTextDocumentCodeLens$$fPluginRequestMethodWorkspaceSymbol+$fPluginRequestMethodTextDocumentReferences2$fPluginRequestMethodTextDocumentDocumentHighlight/$fPluginRequestMethodTextDocumentTypeDefinition+$fPluginRequestMethodTextDocumentDefinition!$fPluginMethodRequestCustomMethod/$fPluginMethodRequestCallHierarchyOutgoingCalls/$fPluginMethodRequestCallHierarchyIncomingCalls/$fPluginMethodRequestTextDocumentSelectionRange5$fPluginMethodRequestTextDocumentPrepareCallHierarchy0$fPluginMethodRequestTextDocumentRangeFormatting+$fPluginMethodRequestTextDocumentFormatting+$fPluginMethodRequestTextDocumentCompletion/$fPluginMethodRequestTextDocumentDocumentSymbol&$fPluginMethodRequestTextDocumentHover'$fPluginMethodRequestTextDocumentRename)$fPluginMethodRequestTextDocumentCodeLens$$fPluginMethodRequestWorkspaceSymbol+$fPluginMethodRequestTextDocumentReferences2$fPluginMethodRequestTextDocumentDocumentHighlight/$fPluginMethodRequestTextDocumentTypeDefinition+$fPluginMethodRequestTextDocumentDefinition+$fPluginRequestMethodTextDocumentCodeAction+$fPluginMethodRequestTextDocumentCodeAction$fMonoidIdePlugins$fSemigroupIdePlugins!$fGenericFallbackCodeActionParams $fToJSONFallbackCodeActionParams"$fFromJSONFallbackCodeActionParams$fShowPluginId$fReadPluginId $fEqPluginId $fOrdPluginId$fFromJSONPluginId$fHashablePluginId$fShowCommandId$fReadCommandId $fEqCommandId$fOrdCommandId WithDeletionsIncludeDeletions SkipDeletions normalizediffTextmakeDiffTextEditmakeDiffTextEditAdditive diffText'pluginDescToIdePluginsidePluginsToPluginDescgetClientConfiggetPluginConfigusePropertyLsp extractRange fullRangesubRange allLspCmdIds' allLspCmdIdsgetNormalizedFilePaththrowPluginError handleMaybe handleMaybeMpluginResponse$fEqWithDeletionspluginsToDefaultConfigpluginsToVSCodeExtensionSchemaSomePropertyKeyWithMetaDataPluginNotificationMethodGHC.Base.ghcGHC.Driver.SessionDynFlagslookupPluginIdpluginResponsible Language.LSP.Types.WorkspaceEdit WorkspaceEdit