@@ -66,6 +66,7 @@ import OpenTelemetry.Eventlog
66
66
import Options.Applicative (ParserInfo )
67
67
import System.IO.Unsafe
68
68
import Text.Regex.TDFA.Text ()
69
+ import System.FilePath
69
70
70
71
-- ---------------------------------------------------------------------
71
72
@@ -158,7 +159,7 @@ defaultConfigDescriptor = ConfigDescriptor True False (mkCustomConfig emptyPrope
158
159
class HasTracing (MessageParams m ) => PluginMethod m where
159
160
160
161
-- | Parse the configuration to check if this plugin is enabled
161
- pluginEnabled :: SMethod m -> PluginId -> Config -> Bool
162
+ pluginEnabled :: SMethod m -> MessageParams m -> PluginDescriptor c -> Config -> Bool
162
163
163
164
-- | How to combine responses from different plugins
164
165
combineResponses
@@ -173,11 +174,14 @@ class HasTracing (MessageParams m) => PluginMethod m where
173
174
combineResponses _method _config _caps _params = sconcat
174
175
175
176
instance PluginMethod TextDocumentCodeAction where
176
- pluginEnabled _ = pluginEnabledConfig plcCodeActionsOn
177
+ pluginEnabled _ msgParams pluginDesc
178
+ | pluginResponsible uri pluginDesc = pluginEnabledConfig plcCodeActionsOn (pluginId pluginDesc)
179
+ | otherwise = const False
180
+ where
181
+ uri = msgParams ^. J. textDocument . J. uri
177
182
combineResponses _method _config (ClientCapabilities _ textDocCaps _ _) (CodeActionParams _ _ _ _ context) resps =
178
183
fmap compat $ List $ filter wasRequested $ (\ (List x) -> x) $ sconcat resps
179
184
where
180
-
181
185
compat :: (Command |? CodeAction ) -> (Command |? CodeAction )
182
186
compat x@ (InL _) = x
183
187
compat x@ (InR action)
@@ -196,12 +200,31 @@ instance PluginMethod TextDocumentCodeAction where
196
200
, Just caKind <- ca ^. kind = caKind `elem` allowed
197
201
| otherwise = False
198
202
203
+ pluginResponsible :: Uri -> PluginDescriptor c -> Bool
204
+ pluginResponsible uri pluginDesc
205
+ | Just fp <- mfp
206
+ , T. pack (takeExtension fp) `elem` pluginFileType pluginDesc = True
207
+ | otherwise = False
208
+ where
209
+ mfp = uriToFilePath uri
210
+
199
211
instance PluginMethod TextDocumentCodeLens where
200
- pluginEnabled _ = pluginEnabledConfig plcCodeLensOn
212
+ pluginEnabled _ msgParams pluginDesc config =
213
+ pluginResponsible uri pluginDesc
214
+ && pluginEnabledConfig plcCodeLensOn (pluginId pluginDesc) config
215
+ where
216
+ uri = msgParams ^. J. textDocument . J. uri
217
+
201
218
instance PluginMethod TextDocumentRename where
202
- pluginEnabled _ = pluginEnabledConfig plcRenameOn
219
+ pluginEnabled _ msgParams pluginDesc config = pluginResponsible uri pluginDesc
220
+ && pluginEnabledConfig plcRenameOn (pluginId pluginDesc) config
221
+ where
222
+ uri = msgParams ^. J. textDocument . J. uri
203
223
instance PluginMethod TextDocumentHover where
204
- pluginEnabled _ = pluginEnabledConfig plcHoverOn
224
+ pluginEnabled _ msgParams pluginDesc config = pluginResponsible uri pluginDesc
225
+ && pluginEnabledConfig plcHoverOn (pluginId pluginDesc) config
226
+ where
227
+ uri = msgParams ^. J. textDocument . J. uri
205
228
combineResponses _ _ _ _ (catMaybes . toList -> hs) = h
206
229
where
207
230
r = listToMaybe $ mapMaybe (^. range) hs
@@ -210,7 +233,10 @@ instance PluginMethod TextDocumentHover where
210
233
hh -> Just $ Hover hh r
211
234
212
235
instance PluginMethod TextDocumentDocumentSymbol where
213
- pluginEnabled _ = pluginEnabledConfig plcSymbolsOn
236
+ pluginEnabled _ msgParams pluginDesc config = pluginResponsible uri pluginDesc
237
+ && pluginEnabledConfig plcSymbolsOn (pluginId pluginDesc) config
238
+ where
239
+ uri = msgParams ^. J. textDocument . J. uri
214
240
combineResponses _ _ (ClientCapabilities _ tdc _ _) params xs = res
215
241
where
216
242
uri' = params ^. textDocument . uri
@@ -232,7 +258,10 @@ instance PluginMethod TextDocumentDocumentSymbol where
232
258
in [si] <> children'
233
259
234
260
instance PluginMethod TextDocumentCompletion where
235
- pluginEnabled _ = pluginEnabledConfig plcCompletionOn
261
+ pluginEnabled _ msgParams pluginDesc config = pluginResponsible uri pluginDesc
262
+ && pluginEnabledConfig plcCompletionOn (pluginId pluginDesc) config
263
+ where
264
+ uri = msgParams ^. J. textDocument . J. uri
236
265
combineResponses _ conf _ _ (toList -> xs) = snd $ consumeCompletionResponse limit $ combine xs
237
266
where
238
267
limit = maxCompletions conf
@@ -261,22 +290,39 @@ instance PluginMethod TextDocumentCompletion where
261
290
consumeCompletionResponse n (InR (CompletionList isCompleteResponse (List xx)))
262
291
263
292
instance PluginMethod TextDocumentFormatting where
264
- pluginEnabled STextDocumentFormatting pid conf =
265
- PluginId (formattingProvider conf) == pid || PluginId (cabalFormattingProvider conf) == pid
293
+ pluginEnabled STextDocumentFormatting msgParams pluginDesc conf =
294
+ pluginResponsible uri pluginDesc
295
+ && (PluginId (formattingProvider conf) == pid || PluginId (cabalFormattingProvider conf) == pid)
296
+ where
297
+ uri = msgParams ^. J. textDocument . J. uri
298
+ pid = pluginId pluginDesc
266
299
combineResponses _ _ _ _ x = sconcat x
267
300
301
+
268
302
instance PluginMethod TextDocumentRangeFormatting where
269
- pluginEnabled _ pid conf = PluginId (formattingProvider conf) == pid
303
+ pluginEnabled _ msgParams pluginDesc conf = pluginResponsible uri pluginDesc
304
+ && PluginId (formattingProvider conf) == pid
305
+ where
306
+ uri = msgParams ^. J. textDocument . J. uri
307
+ pid = pluginId pluginDesc
270
308
combineResponses _ _ _ _ (x :| _) = x
271
309
272
310
instance PluginMethod TextDocumentPrepareCallHierarchy where
273
- pluginEnabled _ = pluginEnabledConfig plcCallHierarchyOn
311
+ pluginEnabled _ msgParams pluginDesc conf = pluginResponsible uri pluginDesc
312
+ && pluginEnabledConfig plcCallHierarchyOn pid conf
313
+ where
314
+ uri = msgParams ^. J. textDocument . J. uri
315
+ pid = pluginId pluginDesc
274
316
275
317
instance PluginMethod CallHierarchyIncomingCalls where
276
- pluginEnabled _ = pluginEnabledConfig plcCallHierarchyOn
318
+ pluginEnabled _ _ pluginDesc conf = pluginEnabledConfig plcCallHierarchyOn pid conf
319
+ where
320
+ pid = pluginId pluginDesc
277
321
278
322
instance PluginMethod CallHierarchyOutgoingCalls where
279
- pluginEnabled _ = pluginEnabledConfig plcCallHierarchyOn
323
+ pluginEnabled _ _ pluginDesc conf = pluginEnabledConfig plcCallHierarchyOn pid conf
324
+ where
325
+ pid = pluginId pluginDesc
280
326
281
327
-- ---------------------------------------------------------------------
282
328
0 commit comments