hls-plugin-api-2.7.0.0: Haskell Language Server API for plugin communication
Safe HaskellNone
LanguageGHC2021

Ide.Plugin.Properties

Synopsis

Documentation

data PropertyType #

Types properties may have

type family ToHsType (t :: PropertyType) where ... #

type family NotElem (s :: Symbol) (r :: [PropertyKey]) where ... #

Equations

NotElem s ('PropertyKey s _1 ': _2) = TypeError (('Text "The key \8216" ':<>: 'Text s) ':<>: 'Text "\8217 is already defined") :: Constraint 
NotElem s (_1 ': xs) = NotElem s xs 
NotElem s ('[] :: [PropertyKey]) = () 

data MetaData (t :: PropertyType) where #

Metadata of a property

Constructors

MetaData 

Fields

EnumMetaData 

Fields

data PropertyKey #

Used at type level for name-type mapping in Properties

data SPropertyKey (k :: PropertyKey) where #

Singleton type of PropertyKey

Constructors

SNumber :: forall (s :: Symbol). SPropertyKey ('PropertyKey s 'TNumber) 
SInteger :: forall (s :: Symbol). SPropertyKey ('PropertyKey s 'TInteger) 
SString :: forall (s :: Symbol). SPropertyKey ('PropertyKey s 'TString) 
SBoolean :: forall (s :: Symbol). SPropertyKey ('PropertyKey s 'TBoolean) 
SObject :: forall a (s :: Symbol). (ToJSON a, FromJSON a) => Proxy a -> SPropertyKey ('PropertyKey s ('TObject a)) 
SArray :: forall a (s :: Symbol). (ToJSON a, FromJSON a) => Proxy a -> SPropertyKey ('PropertyKey s ('TArray a)) 
SEnum :: forall a (s :: Symbol). (ToJSON a, FromJSON a, Eq a, Show a) => Proxy a -> SPropertyKey ('PropertyKey s ('TEnum a)) 

data KeyNameProxy (s :: Symbol) #

A proxy type in order to allow overloaded labels as properties' names at the call site

Constructors

KnownSymbol s => KeyNameProxy 

Instances

Instances details
(KnownSymbol s', s ~ s') => IsLabel s (KeyNameProxy s') # 
Instance details

Defined in Ide.Plugin.Properties

Methods

fromLabel :: KeyNameProxy s' #

data Properties (r :: [PropertyKey]) #

Properties is a partial implementation of json schema, without supporting union types and validation. In hls, it defines a set of properties 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 emptyProperties and useProperty to create and consume Properties.

type HasProperty (s :: Symbol) (k :: PropertyKey) (t :: PropertyType) (r :: [PropertyKey]) = (k ~ 'PropertyKey s t, Elem s r, FindByKeyName s r ~ t, KnownSymbol s, FindPropertyMeta s r t) #

In row r, there is a PropertyKey k, which has name s and carries haskell type t

emptyProperties :: Properties ('[] :: [PropertyKey]) #

Creates a Properties that defines no property

Useful to start a definitions chain, for example: properties = emptyProperties & defineStringProperty #exampleString "Description of exampleString" Foo & defineNumberProperty #exampleNumber "Description of exampleNumber" 233

defineNumberProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]). (KnownSymbol s, NotElem s r) 
=> KeyNameProxy s 
-> Text

description

-> Double

default value

-> Properties r 
-> Properties ('PropertyKey s 'TNumber ': r) 

Defines a number property

defineIntegerProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]). (KnownSymbol s, NotElem s r) 
=> KeyNameProxy s 
-> Text

description

-> Int

default value

-> Properties r 
-> Properties ('PropertyKey s 'TInteger ': r) 

Defines an integer property

defineStringProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]). (KnownSymbol s, NotElem s r) 
=> KeyNameProxy s 
-> Text

description

-> Text

default value

-> Properties r 
-> Properties ('PropertyKey s 'TString ': r) 

Defines a string property

defineBooleanProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]). (KnownSymbol s, NotElem s r) 
=> KeyNameProxy s 
-> Text

description

-> Bool

default value

-> Properties r 
-> Properties ('PropertyKey s 'TBoolean ': r) 

Defines a boolean property

defineObjectProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]) a. (KnownSymbol s, NotElem s r, ToJSON a, FromJSON a) 
=> KeyNameProxy s 
-> Text

description

-> a

default value

-> Properties r 
-> Properties ('PropertyKey s ('TObject a) ': r) 

Defines an object property

defineArrayProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]) a. (KnownSymbol s, NotElem s r, ToJSON a, FromJSON a) 
=> KeyNameProxy s 
-> Text

description

-> [a]

default value

-> Properties r 
-> Properties ('PropertyKey s ('TArray a) ': r) 

Defines an array property

defineEnumProperty #

Arguments

:: forall (s :: Symbol) (r :: [PropertyKey]) a. (KnownSymbol s, NotElem s r, ToJSON a, FromJSON a, Eq a, Show a) 
=> KeyNameProxy s 
-> Text

description

-> [(a, Text)]

valid enum members with each of description

-> a 
-> Properties r 
-> Properties ('PropertyKey s ('TEnum a) ': r) 

Defines an enum property

toDefaultJSON :: forall (r :: [PropertyKey]). Properties r -> [Pair] #

Converts a properties definition into kv pairs with default values from MetaData

toVSCodeExtensionSchema :: forall (r :: [PropertyKey]). Text -> Properties r -> [Pair] #

Converts a properties definition into kv pairs as vscode schema

usePropertyEither :: forall (s :: Symbol) (k :: PropertyKey) (t :: PropertyType) (r :: [PropertyKey]). HasProperty s k t r => KeyNameProxy s -> Properties r -> Object -> Either String (ToHsType t) #

Given the name of a defined property, generates a JSON parser of plcConfig

useProperty :: forall (s :: Symbol) (k :: PropertyKey) (t :: PropertyType) (r :: [PropertyKey]). HasProperty s k t r => KeyNameProxy s -> Properties r -> Object -> ToHsType t #

Like usePropertyEither but returns defaultValue on parse error

(&) :: a -> (a -> b) -> b infixl 1 #

& is a reverse application operator. This provides notational convenience. Its precedence is one higher than that of the forward application operator $, which allows & to be nested in $.

This is a version of flip id, where id is specialized from a -> a to (a -> b) -> (a -> b) which by the associativity of (->) is (a -> b) -> a -> b. flipping this yields a -> (a -> b) -> b which is the type signature of &

Examples

Expand
>>> 5 & (+1) & show
"6"
>>> sqrt $ [1 / n^2 | n <- [1..1000]] & sum & (*6)
3.1406380562059946

Since: base-4.8.0.0