f41a77b4da77466dfba087ba88dd72954b176818
[lsp-test.git] / src / Language / Haskell / LSP / Test / Messages.hs
1 {-# LANGUAGE RankNTypes #-}
2 module Language.Haskell.LSP.Test.Messages where
3
4 import Data.Aeson
5 import Language.Haskell.LSP.Messages
6 import Language.Haskell.LSP.Types
7
8 isServerResponse :: FromServerMessage -> Bool
9 isServerResponse (RspInitialize               _) = True
10 isServerResponse (RspShutdown                 _) = True
11 isServerResponse (RspHover                    _) = True
12 isServerResponse (RspCompletion               _) = True
13 isServerResponse (RspCompletionItemResolve    _) = True
14 isServerResponse (RspSignatureHelp            _) = True
15 isServerResponse (RspDefinition               _) = True
16 isServerResponse (RspTypeDefinition           _) = True
17 isServerResponse (RspFindReferences           _) = True
18 isServerResponse (RspDocumentHighlights       _) = True
19 isServerResponse (RspDocumentSymbols          _) = True
20 isServerResponse (RspWorkspaceSymbols         _) = True
21 isServerResponse (RspCodeAction               _) = True
22 isServerResponse (RspCodeLens                 _) = True
23 isServerResponse (RspCodeLensResolve          _) = True
24 isServerResponse (RspDocumentFormatting       _) = True
25 isServerResponse (RspDocumentRangeFormatting  _) = True
26 isServerResponse (RspDocumentOnTypeFormatting _) = True
27 isServerResponse (RspRename                   _) = True
28 isServerResponse (RspExecuteCommand           _) = True
29 isServerResponse (RspError                    _) = True
30 isServerResponse (RspDocumentLink             _) = True
31 isServerResponse (RspDocumentLinkResolve      _) = True
32 isServerResponse (RspWillSaveWaitUntil        _) = True
33 isServerResponse _                               = False
34
35 isServerRequest :: FromServerMessage -> Bool
36 isServerRequest (ReqRegisterCapability       _) = True
37 isServerRequest (ReqApplyWorkspaceEdit       _) = True
38 isServerRequest (ReqShowMessage              _) = True
39 isServerRequest (ReqUnregisterCapability     _) = True
40 isServerRequest _                               = False
41
42 isServerNotification :: FromServerMessage -> Bool
43 isServerNotification (NotPublishDiagnostics       _) = True
44 isServerNotification (NotLogMessage               _) = True
45 isServerNotification (NotShowMessage              _) = True
46 isServerNotification (NotTelemetry                _) = True
47 isServerNotification (NotCancelRequestFromServer  _) = True
48 isServerNotification _                               = False
49
50 handleServerMessage
51     :: forall a.
52        (forall b c. RequestMessage ServerMethod b c -> a)
53     -> (forall d. ResponseMessage d -> a)
54     -> (forall e. NotificationMessage ServerMethod e -> a)
55     -> FromServerMessage
56     -> a
57 handleServerMessage request response notification msg = case msg of
58     (ReqRegisterCapability       m) -> request m
59     (ReqApplyWorkspaceEdit       m) -> request m
60     (ReqShowMessage              m) -> request m
61     (ReqUnregisterCapability     m) -> request m
62     (ReqCustomServer             m) -> request m
63     (RspInitialize               m) -> response m
64     (RspShutdown                 m) -> response m
65     (RspHover                    m) -> response m
66     (RspCompletion               m) -> response m
67     (RspCompletionItemResolve    m) -> response m
68     (RspSignatureHelp            m) -> response m
69     (RspDefinition               m) -> response m
70     (RspFindReferences           m) -> response m
71     (RspDocumentHighlights       m) -> response m
72     (RspDocumentSymbols          m) -> response m
73     (RspWorkspaceSymbols         m) -> response m
74     (RspCodeAction               m) -> response m
75     (RspCodeLens                 m) -> response m
76     (RspCodeLensResolve          m) -> response m
77     (RspDocumentFormatting       m) -> response m
78     (RspDocumentRangeFormatting  m) -> response m
79     (RspDocumentOnTypeFormatting m) -> response m
80     (RspRename                   m) -> response m
81     (RspExecuteCommand           m) -> response m
82     (RspError                    m) -> response m
83     (RspDocumentLink             m) -> response m
84     (RspDocumentLinkResolve      m) -> response m
85     (RspWillSaveWaitUntil        m) -> response m
86     (RspTypeDefinition           m) -> response m
87     (RspImplementation           m) -> response m
88     (RspDocumentColor            m) -> response m
89     (RspColorPresentation        m) -> response m
90     (RspFoldingRange             m) -> response m
91     (RspCustomServer             m) -> response m
92     (NotPublishDiagnostics       m) -> notification m
93     (NotLogMessage               m) -> notification m
94     (NotShowMessage              m) -> notification m
95     (NotProgressStart            m) -> notification m
96     (NotProgressReport           m) -> notification m
97     (NotProgressDone             m) -> notification m
98     (NotTelemetry                m) -> notification m
99     (NotCancelRequestFromServer  m) -> notification m
100     (NotCustomServer             m) -> notification m
101
102 handleClientMessage
103     :: forall a.
104        (forall b c . (ToJSON b, ToJSON c) => RequestMessage ClientMethod b c -> a)
105     -> (forall d . ToJSON d => ResponseMessage d -> a)
106     -> (forall e . ToJSON e => NotificationMessage ClientMethod e -> a)
107     -> FromClientMessage
108     -> a
109 handleClientMessage request response notification msg = case msg of
110  (ReqInitialize               m) -> request m
111  (ReqShutdown                 m) -> request m
112  (ReqHover                    m) -> request m
113  (ReqCompletion               m) -> request m
114  (ReqCompletionItemResolve    m) -> request m
115  (ReqSignatureHelp            m) -> request m
116  (ReqDefinition               m) -> request m
117  (ReqFindReferences           m) -> request m
118  (ReqDocumentHighlights       m) -> request m
119  (ReqDocumentSymbols          m) -> request m
120  (ReqWorkspaceSymbols         m) -> request m
121  (ReqCodeAction               m) -> request m
122  (ReqCodeLens                 m) -> request m
123  (ReqCodeLensResolve          m) -> request m
124  (ReqDocumentFormatting       m) -> request m
125  (ReqDocumentRangeFormatting  m) -> request m
126  (ReqDocumentOnTypeFormatting m) -> request m
127  (ReqPrepareRename            m) -> request m
128  (ReqRename                   m) -> request m
129  (ReqExecuteCommand           m) -> request m
130  (ReqDocumentLink             m) -> request m
131  (ReqDocumentLinkResolve      m) -> request m
132  (ReqWillSaveWaitUntil        m) -> request m
133  (ReqImplementation           m) -> request m
134  (ReqTypeDefinition           m) -> request m
135  (ReqDocumentColor            m) -> request m
136  (ReqColorPresentation        m) -> request m
137  (ReqFoldingRange             m) -> request m
138  (RspApplyWorkspaceEdit       m) -> response m
139  (RspFromClient               m) -> response m
140  (NotInitialized              m) -> notification m
141  (NotExit                     m) -> notification m
142  (NotCancelRequestFromClient  m) -> notification m
143  (NotDidChangeConfiguration   m) -> notification m
144  (NotDidOpenTextDocument      m) -> notification m
145  (NotDidChangeTextDocument    m) -> notification m
146  (NotDidCloseTextDocument     m) -> notification m
147  (NotWillSaveTextDocument     m) -> notification m
148  (NotDidSaveTextDocument      m) -> notification m
149  (NotDidChangeWatchedFiles    m) -> notification m
150  (NotDidChangeWorkspaceFolders m) -> notification m
151  (NotProgressCancel           m) -> notification m
152  (ReqCustomClient             m) -> request m
153  (NotCustomClient             m) -> notification m