88WORD_RE = re .compile (r'\w' )
99jediPreview = False
1010
11+ class RedirectStdout (object ):
12+ def __init__ (self , new_stdout = None ):
13+ """If stdout is None, redirect to /dev/null"""
14+ self ._new_stdout = new_stdout or open (os .devnull , 'w' )
15+
16+ def __enter__ (self ):
17+ sys .stdout .flush ()
18+ oldstdout_fno = self .oldstdout_fno = os .dup (sys .stdout .fileno ())
19+ os .dup2 (self ._new_stdout .fileno (), 1 )
20+
21+ def __exit__ (self , exc_type , exc_value , traceback ):
22+ self ._new_stdout .flush ()
23+ os .dup2 (self .oldstdout_fno , 1 )
1124
1225class JediCompletion (object ):
1326 basic_types = {
@@ -533,12 +546,12 @@ def _process_request(self, request):
533546 lookup = request .get ('lookup' , 'completions' )
534547
535548 if lookup == 'names' :
536- return self ._write_response ( self . _serialize_definitions (
549+ return self ._serialize_definitions (
537550 jedi .api .names (
538551 source = request .get ('source' , None ),
539552 path = request .get ('path' , '' ),
540553 all_scopes = True ),
541- request ['id' ]))
554+ request ['id' ])
542555
543556 script = jedi .api .Script (
544557 source = request .get ('source' , None ), line = request ['line' ] + 1 ,
@@ -548,29 +561,27 @@ def _process_request(self, request):
548561 defs = self ._get_definitionsx (script .goto_definitions (), request ['id' ])
549562 if len (defs ) == 0 :
550563 defs = self ._get_definitionsx (script .goto_assignments (), request ['id' ])
551- return self . _write_response ( json .dumps ({'id' : request ['id' ], 'results' : defs }) )
564+ return json .dumps ({'id' : request ['id' ], 'results' : defs })
552565 if lookup == 'tooltip' :
553566 if jediPreview :
554567 defs = self ._get_definitionsx (script .goto_definitions (), request ['id' ], True )
555568 if len (defs ) == 0 :
556569 defs = self ._get_definitionsx (script .goto_assignments (), request ['id' ], True )
557- return self . _write_response ( json .dumps ({'id' : request ['id' ], 'results' : defs }) )
570+ return json .dumps ({'id' : request ['id' ], 'results' : defs })
558571 else :
559- return self ._write_response ( self . _serialize_tooltip (script .goto_definitions (), request ['id' ]) )
572+ return self ._serialize_tooltip (script .goto_definitions (), request ['id' ])
560573 elif lookup == 'arguments' :
561- return self ._write_response ( self . _serialize_arguments (
562- script , request ['id' ]))
574+ return self ._serialize_arguments (
575+ script , request ['id' ])
563576 elif lookup == 'usages' :
564- return self ._write_response ( self . _serialize_usages (
565- script .usages (), request ['id' ]))
577+ return self ._serialize_usages (
578+ script .usages (), request ['id' ])
566579 elif lookup == 'methods' :
567- return self ._write_response (
568- self ._serialize_methods (script , request ['id' ],
569- request .get ('prefix' , '' )))
580+ return self ._serialize_methods (script , request ['id' ],
581+ request .get ('prefix' , '' ))
570582 else :
571- return self ._write_response (
572- self ._serialize_completions (script , request ['id' ],
573- request .get ('prefix' , '' )))
583+ return self ._serialize_completions (script , request ['id' ],
584+ request .get ('prefix' , '' ))
574585
575586 def _write_response (self , response ):
576587 sys .stdout .write (response + '\n ' )
@@ -585,7 +596,9 @@ def watch(self):
585596 sys .stderr .write ('Received EOF from the standard input,exiting' + '\n ' )
586597 sys .stderr .flush ()
587598 return
588- self ._process_request (rq )
599+ with RedirectStdout ():
600+ response = self ._process_request (rq )
601+ self ._write_response (response )
589602
590603 except Exception :
591604 sys .stderr .write (traceback .format_exc () + '\n ' )
0 commit comments