Skip to content

Commit 4ca237e

Browse files
authored
Fix the TCP server (palantir#42)
1 parent c3ec50b commit 4ca237e

4 files changed

Lines changed: 22 additions & 7 deletions

File tree

pyls/language_server.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,29 @@
77
log = logging.getLogger(__name__)
88

99

10+
class _StreamHandlerWrapper(socketserver.StreamRequestHandler, object):
11+
"""A wrapper class that is used to construct a custom handler class."""
12+
13+
def setup(self):
14+
super(_StreamHandlerWrapper, self).setup()
15+
self.delegate = self.DELEGATE_CLASS(self.rfile, self.wfile)
16+
17+
def handle(self):
18+
self.delegate.handle()
19+
20+
1021
def start_tcp_lang_server(bind_addr, port, handler_class):
1122
if not issubclass(handler_class, LanguageServer):
1223
raise ValueError("Handler class must be a subclass of LanguageServer")
13-
server = socketserver.ThreadingTCPServer((bind_addr, port), handler_class)
24+
25+
# Construct a custom wrapper class around the user's handler_class
26+
wrapper_class = type(
27+
handler_class.__name__ + "Handler",
28+
(_StreamHandlerWrapper,),
29+
{'DELEGATE_CLASS': handler_class}
30+
)
31+
32+
server = socketserver.ThreadingTCPServer((bind_addr, port), wrapper_class)
1433
try:
1534
log.info("Serving %s on (%s, %s)", handler_class.__name__, bind_addr, port)
1635
server.serve_forever()

pyls/python_ls.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,6 @@ class PythonLanguageServer(LanguageServer):
2929
REFERENCES = JediReferencesProvider
3030
SIGNATURE = JediSignatureProvider
3131

32-
def __init__(self, *args, **kwargs):
33-
super(PythonLanguageServer, self).__init__(*args, **kwargs)
34-
3532
def capabilities(self):
3633
# TODO: support incremental sync instead of full
3734
return {

pyls/server.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@
22
import json
33
import logging
44
import re
5-
import socketserver
65
import jsonrpc
76

87
log = logging.getLogger(__name__)
98

109

11-
class JSONRPCServer(socketserver.StreamRequestHandler, object):
10+
class JSONRPCServer(object):
1211
""" Read/Write JSON RPC messages """
1312

1413
def __init__(self, rfile, wfile):

vscode-client/src/extension.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,6 @@ function startLangServerTCP(addr: number, documentSelector: string | string[]):
4141
export function activate(context: ExtensionContext) {
4242
context.subscriptions.push(startLangServer("pyls", ["python"]));
4343
// For TCP
44-
// context.subscriptions.push(startLangServerTCP(2087, ["pyls"]));
44+
// context.subscriptions.push(startLangServerTCP(2087, ["python"]));
4545
}
4646

0 commit comments

Comments
 (0)