@@ -152,7 +152,8 @@ class PlaygroundServer
152
152
languages . DocumentFormattingEditProvider ,
153
153
languages . CompletionItemProvider ,
154
154
languages . DocumentSemanticTokensProvider ,
155
- languages . DocumentRangeSemanticTokensProvider
155
+ languages . DocumentRangeSemanticTokensProvider ,
156
+ languages . SignatureHelpProvider
156
157
{
157
158
private typeDefinitionProviderDisposable : IDisposable ;
158
159
private editorOpenerDisposable : IDisposable ;
@@ -162,6 +163,7 @@ class PlaygroundServer
162
163
private completionDisposable : IDisposable ;
163
164
private semanticTokensDisposable : IDisposable ;
164
165
private rangeSemanticTokensDisposable : IDisposable ;
166
+ private signatureHelpDisposable : IDisposable ;
165
167
166
168
constructor (
167
169
private monaco : Monaco ,
@@ -191,9 +193,13 @@ class PlaygroundServer
191
193
this . editorOpenerDisposable = monaco . editor . registerEditorOpener ( this ) ;
192
194
this . formatDisposable =
193
195
monaco . languages . registerDocumentFormattingEditProvider ( "python" , this ) ;
196
+ this . signatureHelpDisposable =
197
+ monaco . languages . registerSignatureHelpProvider ( "python" , this ) ;
194
198
}
195
199
196
200
triggerCharacters : string [ ] = [ "." ] ;
201
+ signatureHelpTriggerCharacters : string [ ] = [ "(" , "," ] ;
202
+ signatureHelpRetriggerCharacters : string [ ] = [ ")" ] ;
197
203
198
204
getLegend ( ) : languages . SemanticTokensLegend {
199
205
return {
@@ -292,6 +298,61 @@ class PlaygroundServer
292
298
293
299
resolveCompletionItem : undefined ;
294
300
301
+ provideSignatureHelp (
302
+ model : editor . ITextModel ,
303
+ position : Position ,
304
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
305
+ _token : CancellationToken ,
306
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
307
+ _context : languages . SignatureHelpContext ,
308
+ ) : languages . ProviderResult < languages . SignatureHelpResult > {
309
+ const selectedFile = this . props . files . selected ;
310
+
311
+ if ( selectedFile == null ) {
312
+ return ;
313
+ }
314
+
315
+ const selectedHandle = this . props . files . handles [ selectedFile ] ;
316
+
317
+ if ( selectedHandle == null ) {
318
+ return ;
319
+ }
320
+
321
+ const signatureHelp = this . props . workspace . signatureHelp (
322
+ selectedHandle ,
323
+ new TyPosition ( position . lineNumber , position . column ) ,
324
+ ) ;
325
+
326
+ if ( signatureHelp == null ) {
327
+ return undefined ;
328
+ }
329
+
330
+ return {
331
+ dispose ( ) { } ,
332
+ value : {
333
+ signatures : signatureHelp . signatures . map ( ( sig ) => ( {
334
+ label : sig . label ,
335
+ documentation : sig . documentation
336
+ ? { value : sig . documentation }
337
+ : undefined ,
338
+ parameters : sig . parameters . map ( ( param ) => ( {
339
+ label : param . label ,
340
+ documentation : param . documentation
341
+ ? { value : param . documentation }
342
+ : undefined ,
343
+ } ) ) ,
344
+ activeParameter : sig . active_parameter ,
345
+ } ) ) ,
346
+ activeSignature : signatureHelp . active_signature ?? 0 ,
347
+ activeParameter :
348
+ signatureHelp . active_signature != null
349
+ ? ( signatureHelp . signatures [ signatureHelp . active_signature ]
350
+ ?. active_parameter ?? 0 )
351
+ : 0 ,
352
+ } ,
353
+ } ;
354
+ }
355
+
295
356
provideInlayHints (
296
357
_model : editor . ITextModel ,
297
358
range : Range ,
@@ -569,6 +630,7 @@ class PlaygroundServer
569
630
this . rangeSemanticTokensDisposable . dispose ( ) ;
570
631
this . semanticTokensDisposable . dispose ( ) ;
571
632
this . completionDisposable . dispose ( ) ;
633
+ this . signatureHelpDisposable . dispose ( ) ;
572
634
}
573
635
}
574
636
0 commit comments