1{-# LANGUAGE TemplateHaskell       #-}
2{-# LANGUAGE DuplicateRecordFields #-}
3
4module Language.LSP.Types.WorkspaceSymbol where
5
6import Data.Aeson.TH
7import Data.Default
8import Language.LSP.Types.Common
9import Language.LSP.Types.DocumentSymbol
10import Language.LSP.Types.Progress
11import Language.LSP.Types.Utils
12import Data.Text (Text)
13
14data WorkspaceSymbolKindClientCapabilities =
15  WorkspaceSymbolKindClientCapabilities
16   { -- | The symbol kind values the client supports. When this
17     -- property exists the client also guarantees that it will
18     -- handle values outside its set gracefully and falls back
19     -- to a default value when unknown.
20     --
21     -- If this property is not present the client only supports
22     -- the symbol kinds from `File` to `Array` as defined in
23     -- the initial version of the protocol.
24     _valueSet :: Maybe (List SymbolKind)
25   } deriving (Show, Read, Eq)
26
27deriveJSON lspOptions ''WorkspaceSymbolKindClientCapabilities
28
29data WorkspaceSymbolTagClientCapabilities =
30  WorkspaceSymbolTagClientCapabilities
31    { -- | The tags supported by the client.
32      _valueSet :: Maybe (List SymbolTag)
33    }
34  deriving (Show, Read, Eq)
35
36deriveJSON lspOptions ''WorkspaceSymbolTagClientCapabilities
37
38instance Default WorkspaceSymbolKindClientCapabilities where
39  def = WorkspaceSymbolKindClientCapabilities (Just $ List allKinds)
40    where allKinds = [ SkFile
41                     , SkModule
42                     , SkNamespace
43                     , SkPackage
44                     , SkClass
45                     , SkMethod
46                     , SkProperty
47                     , SkField
48                     , SkConstructor
49                     , SkEnum
50                     , SkInterface
51                     , SkFunction
52                     , SkVariable
53                     , SkConstant
54                     , SkString
55                     , SkNumber
56                     , SkBoolean
57                     , SkArray
58                     ]
59
60data WorkspaceSymbolClientCapabilities =
61  WorkspaceSymbolClientCapabilities
62    { _dynamicRegistration :: Maybe Bool -- ^Symbol request supports dynamic
63                                         -- registration.
64    , _symbolKind :: Maybe WorkspaceSymbolKindClientCapabilities -- ^ Specific capabilities for the `SymbolKind`.
65      -- | The client supports tags on `SymbolInformation`.
66      -- Clients supporting tags have to handle unknown tags gracefully.
67      --
68      -- @since 3.16.0
69    , _tagSupport :: Maybe WorkspaceSymbolTagClientCapabilities
70    } deriving (Show, Read, Eq)
71
72deriveJSON lspOptions ''WorkspaceSymbolClientCapabilities
73
74-- -------------------------------------
75
76makeExtendingDatatype "WorkspaceSymbolOptions" [''WorkDoneProgressOptions] []
77deriveJSON lspOptions ''WorkspaceSymbolOptions
78
79makeExtendingDatatype "WorkspaceSymbolRegistrationOptions"
80  [''WorkspaceSymbolOptions] []
81deriveJSON lspOptions ''WorkspaceSymbolRegistrationOptions
82
83-- -------------------------------------
84
85makeExtendingDatatype "WorkspaceSymbolParams"
86  [ ''WorkDoneProgressParams
87  , ''PartialResultParams
88  ]
89  [("_query", [t| Text |])]
90
91deriveJSON lspOptions ''WorkspaceSymbolParams
92