Safe Haskell | None |
---|---|
Language | Haskell2010 |
Ide.Plugin.Properties
Synopsis
- data PropertyType
- type family ToHsType (t :: PropertyType) where ...
- data MetaData (t :: PropertyType) where
- data PropertyKey = PropertyKey Symbol PropertyType
- data SPropertyKey (k :: PropertyKey) where
- SNumber :: SPropertyKey ('PropertyKey s 'TNumber)
- SInteger :: SPropertyKey ('PropertyKey s 'TInteger)
- SString :: SPropertyKey ('PropertyKey s 'TString)
- SBoolean :: SPropertyKey ('PropertyKey s 'TBoolean)
- SObject :: (ToJSON a, FromJSON a) => Proxy a -> SPropertyKey ('PropertyKey s ('TObject a))
- SArray :: (ToJSON a, FromJSON a) => Proxy a -> SPropertyKey ('PropertyKey s ('TArray a))
- SEnum :: (ToJSON a, FromJSON a, Eq a, Show a) => Proxy a -> SPropertyKey ('PropertyKey s ('TEnum a))
- data KeyNameProxy (s :: Symbol) = KnownSymbol s => KeyNameProxy
- data Properties (r :: [PropertyKey])
- type HasProperty s k t r = (k ~ 'PropertyKey s t, Elem s r, FindByKeyName s r ~ t, KnownSymbol s)
- emptyProperties :: Properties '[]
- defineNumberProperty :: (KnownSymbol s, NotElem s r) => KeyNameProxy s -> Text -> Double -> Properties r -> Properties ('PropertyKey s 'TNumber ': r)
- defineIntegerProperty :: (KnownSymbol s, NotElem s r) => KeyNameProxy s -> Text -> Int -> Properties r -> Properties ('PropertyKey s 'TInteger ': r)
- defineStringProperty :: (KnownSymbol s, NotElem s r) => KeyNameProxy s -> Text -> Text -> Properties r -> Properties ('PropertyKey s 'TString ': r)
- defineBooleanProperty :: (KnownSymbol s, NotElem s r) => KeyNameProxy s -> Text -> Bool -> Properties r -> Properties ('PropertyKey s 'TBoolean ': r)
- defineObjectProperty :: (KnownSymbol s, NotElem s r, ToJSON a, FromJSON a) => KeyNameProxy s -> Text -> a -> Properties r -> Properties ('PropertyKey s ('TObject a) ': r)
- defineArrayProperty :: (KnownSymbol s, NotElem s r, ToJSON a, FromJSON a) => KeyNameProxy s -> Text -> [a] -> Properties r -> Properties ('PropertyKey s ('TArray a) ': r)
- defineEnumProperty :: (KnownSymbol s, NotElem s r, ToJSON a, FromJSON a, Eq a, Show a) => KeyNameProxy s -> Text -> [(a, Text)] -> a -> Properties r -> Properties ('PropertyKey s ('TEnum a) ': r)
- toDefaultJSON :: Properties r -> [Pair]
- toVSCodeExtensionSchema :: Text -> Properties r -> [Pair]
- usePropertyEither :: HasProperty s k t r => KeyNameProxy s -> Properties r -> Object -> Either String (ToHsType t)
- useProperty :: HasProperty s k t r => KeyNameProxy s -> Properties r -> Object -> ToHsType t
- (&) :: a -> (a -> b) -> b
Documentation
data PropertyType Source #
Types properties may have
type family ToHsType (t :: PropertyType) where ... Source #
data MetaData (t :: PropertyType) where Source #
Metadata of a property
Constructors
MetaData | |
Fields
| |
EnumMetaData | |
Fields
|
data PropertyKey Source #
Used at type level for name-type mapping in Properties
Constructors
PropertyKey Symbol PropertyType |
data SPropertyKey (k :: PropertyKey) where Source #
Singleton type of PropertyKey
Constructors
SNumber :: SPropertyKey ('PropertyKey s 'TNumber) | |
SInteger :: SPropertyKey ('PropertyKey s 'TInteger) | |
SString :: SPropertyKey ('PropertyKey s 'TString) | |
SBoolean :: SPropertyKey ('PropertyKey s 'TBoolean) | |
SObject :: (ToJSON a, FromJSON a) => Proxy a -> SPropertyKey ('PropertyKey s ('TObject a)) | |
SArray :: (ToJSON a, FromJSON a) => Proxy a -> SPropertyKey ('PropertyKey s ('TArray a)) | |
SEnum :: (ToJSON a, FromJSON a, Eq a, Show a) => Proxy a -> SPropertyKey ('PropertyKey s ('TEnum a)) |
data KeyNameProxy (s :: Symbol) Source #
A proxy type in order to allow overloaded labels as properties' names at the call site
Constructors
KnownSymbol s => KeyNameProxy |
Instances
(KnownSymbol s', s ~ s') => IsLabel s (KeyNameProxy s') Source # | |
Defined in Ide.Plugin.Properties Methods fromLabel :: KeyNameProxy s' # |
data Properties (r :: [PropertyKey]) Source #
Properties
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 emptyProperties
and useProperty
to create and consume Properties
.
type HasProperty s k t r = (k ~ 'PropertyKey s t, Elem s r, FindByKeyName s r ~ t, KnownSymbol s) Source #
In row r
, there is a PropertyKey
k
, which has name s
and carries haskell type t
emptyProperties :: Properties '[] Source #
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
Arguments
:: (KnownSymbol s, NotElem s r) | |
=> KeyNameProxy s | |
-> Text | description |
-> Double | default value |
-> Properties r | |
-> Properties ('PropertyKey s 'TNumber ': r) |
Defines a number property
defineIntegerProperty Source #
Arguments
:: (KnownSymbol s, NotElem s r) | |
=> KeyNameProxy s | |
-> Text | description |
-> Int | default value |
-> Properties r | |
-> Properties ('PropertyKey s 'TInteger ': r) |
Defines an integer property
Arguments
:: (KnownSymbol s, NotElem s r) | |
=> KeyNameProxy s | |
-> Text | description |
-> Text | default value |
-> Properties r | |
-> Properties ('PropertyKey s 'TString ': r) |
Defines a string property
defineBooleanProperty Source #
Arguments
:: (KnownSymbol s, NotElem s r) | |
=> KeyNameProxy s | |
-> Text | description |
-> Bool | default value |
-> Properties r | |
-> Properties ('PropertyKey s 'TBoolean ': r) |
Defines a boolean property
Arguments
:: (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
Arguments
:: (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
Arguments
:: (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 :: Properties r -> [Pair] Source #
Converts a properties definition into kv pairs with default values from MetaData
toVSCodeExtensionSchema :: Text -> Properties r -> [Pair] Source #
Converts a properties definition into kv pairs as vscode schema
usePropertyEither :: HasProperty s k t r => KeyNameProxy s -> Properties r -> Object -> Either String (ToHsType t) Source #
Given the name of a defined property, generates a JSON parser of plcConfig
useProperty :: HasProperty s k t r => KeyNameProxy s -> Properties r -> Object -> ToHsType t Source #
Like usePropertyEither
but returns defaultValue
on parse error