inherd / uncode

Uncode is a conceptual IDE designed for the cloud development, also a cloud-native low-code software development enviorment. Uncode 是一个面向云研发时代设计的下一代概念性 IDE。
https://inherd.org/uncode
MIT License
239 stars 26 forks source link

LSP Support #10

Closed Eliot00 closed 3 years ago

Eliot00 commented 3 years ago

初步的LSP支持,由於在Web環境中需要通過WebSocket鏈接LSP服務端,本地測試可以通過這個腳本包裝服務端:

import json
from tornado import ioloop, process, web, websocket
from pyls_jsonrpc import streams

class LanguageServerWebSocketHandler(websocket.WebSocketHandler):
    writer = None

    def open(self, *args, **kwargs):
        proc = process.Subprocess(
            ['pyls', '-v'],                     # 具体的LSP实现进程,如 'pyls -v'、'ccls --init={"index": {"onChange": true}}'等
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE
        )
        self.writer = streams.JsonRpcStreamWriter(proc.stdin)

        def consume():
            ioloop.IOLoop()
            reader = streams.JsonRpcStreamReader(proc.stdout)
            reader.listen(lambda msg: self.write_message(json.dumps(msg)))

        thread = threading.Thread(target=consume)
        thread.daemon = True
        thread.start()

    def on_message(self, message):
        self.writer.write(json.loads(message))

    def check_origin(self, origin):
        return True
if __name__ == "__main__":
    app = web.Application([
        ("/", LanguageServerWebSocketHandler),
    ])
    app.listen(9999, address="127.0.0.1")
    ioloop.IOLoop.current().start()
phodal commented 3 years ago

可以把那个测试脚本先放文档里,建个 lsp 目录