Skip to content

Commit 0f1e4e7

Browse files
committed
fix #602
1 parent 2b6c455 commit 0f1e4e7

1 file changed

Lines changed: 29 additions & 16 deletions

File tree

pythonFiles/completion.py

Lines changed: 29 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,19 @@
88
WORD_RE = re.compile(r'\w')
99
jediPreview = 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

1225
class 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

Comments
 (0)