Safe Haskell | Safe-Inferred |
---|---|
Language | GHC2021 |
Ide.Plugin.Properties
Synopsis
- data PropertyType
- type family ToHsType (t :: PropertyType) where ...
- type family NotElem (s :: Symbol) (r :: [PropertyKey]) :: Constraint where ...
- data MetaData (t :: PropertyType) where
- MetaData :: (IsTEnum t ~ 'False, IsProperties t ~ 'False) => {..} -> MetaData t
- EnumMetaData :: IsTEnum t ~ 'True => {..} -> MetaData t
- PropertiesMetaData :: t ~ TProperties rs => {..} -> MetaData t
- 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))
- SProperties :: SPropertyKey ('PropertyKey s ('TProperties pp))
- data KeyNameProxy (s :: Symbol) = KnownSymbol s => KeyNameProxy
- data KeyNamePath (r :: NonEmptyList Symbol) where
- SingleKey :: KeyNameProxy s -> KeyNamePath (NE s)
- ConsKeysPath :: KeyNameProxy s1 -> KeyNamePath ss -> KeyNamePath (s1 :| ss)
- data Properties (r :: [PropertyKey])
- type HasProperty s k t r = (k ~ 'PropertyKey s t, Elem s r, FindByKeyPath (NE s) r ~ t, FindByKeyName s r ~ t, KnownSymbol s, FindPropertyMeta s r t)
- type HasPropertyByPath props path t = (t ~ FindByKeyPath path props, ParsePropertyPath props path)
- 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)
- definePropertiesProperty :: (KnownSymbol s, NotElem s r) => KeyNameProxy s -> Text -> Properties childrenProps -> Properties r -> Properties ('PropertyKey s ('TProperties childrenProps) : 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
- usePropertyByPathEither :: ParsePropertyPath rs r => KeyNamePath r -> Properties rs -> Object -> Either String (ToHsType (FindByKeyPath r rs))
- usePropertyByPath :: ParsePropertyPath rs r => KeyNamePath r -> Properties rs -> Object -> ToHsType (FindByKeyPath r rs)
- (&) :: a -> (a -> b) -> b
Documentation
data PropertyType Source #
Types properties may have
type family ToHsType (t :: PropertyType) where ... Source #
type family NotElem (s :: Symbol) (r :: [PropertyKey]) :: Constraint where ... Source #
data MetaData (t :: PropertyType) where Source #
Metadata of a property
Constructors
MetaData | |
Fields
| |
EnumMetaData | |
Fields
| |
PropertiesMetaData | |
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)) | |
SProperties :: SPropertyKey ('PropertyKey s ('TProperties pp)) |
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 KeyNamePath (r :: NonEmptyList Symbol) where Source #
a path to a property in a json object
Constructors
SingleKey :: KeyNameProxy s -> KeyNamePath (NE s) | |
ConsKeysPath :: KeyNameProxy s1 -> KeyNamePath ss -> KeyNamePath (s1 :| ss) |
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 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, FindByKeyPath (NE s) r ~ t, FindByKeyName s r ~ t, KnownSymbol s, FindPropertyMeta s r t) Source #
In row r
, there is a PropertyKey
k
, which has name s
and carries haskell type t
type HasPropertyByPath props path t = (t ~ FindByKeyPath path props, ParsePropertyPath props path) Source #
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
definePropertiesProperty :: (KnownSymbol s, NotElem s r) => KeyNameProxy s -> Text -> Properties childrenProps -> Properties r -> Properties ('PropertyKey s ('TProperties childrenProps) : r) Source #
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
usePropertyByPathEither :: ParsePropertyPath rs r => KeyNamePath r -> Properties rs -> Object -> Either String (ToHsType (FindByKeyPath r rs)) Source #
usePropertyByPath :: ParsePropertyPath rs r => KeyNamePath r -> Properties rs -> Object -> ToHsType (FindByKeyPath r rs) Source #