support sql lsp
diff --git a/server/python-language-server.py b/server/lsp-server.py
similarity index 71%
rename from server/python-language-server.py
rename to server/lsp-server.py
index f491a92..a56e021 100644
--- a/server/python-language-server.py
+++ b/server/lsp-server.py
@@ -20,21 +20,16 @@
from tornado import ioloop, process, websocket, web
-class PythonWebSocketHandler(websocket.WebSocketHandler):
+class LanguageWebSocketHandler(websocket.WebSocketHandler):
writer = None
+ proc = None
def open(self, *args: str, **kwargs: str):
- proc = process.Subprocess(
- ['pylsp','-v'],
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE
- )
-
- self.writer = streams.JsonRpcStreamWriter(proc.stdin)
+ self.writer = streams.JsonRpcStreamWriter(self.proc.stdin)
def consume():
ioloop.IOLoop()
- reader = streams.JsonRpcStreamReader(proc.stdout)
+ reader = streams.JsonRpcStreamReader(self.proc.stdout)
reader.listen(lambda msg: self.write_message(json.dumps(msg)))
thread = threading.Thread(target=consume)
@@ -47,9 +42,27 @@
def check_origin(self, origin):
return True
+
+class PythonWebSocketHandler(LanguageWebSocketHandler):
+ proc = process.Subprocess(
+ ['pylsp','-v'],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE
+ )
+
+
+class SQLWebSocketHandler(LanguageWebSocketHandler):
+ proc = process.Subprocess(
+ ['sqls', '-c', './sql.yml'],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE
+ )
+
+
if __name__ == "__main__":
app = web.Application([
(r"/python", PythonWebSocketHandler),
+ (r"/sql", SQLWebSocketHandler)
])
app.listen(3001)
ioloop.IOLoop.current().start()
diff --git a/server/sql.yml b/server/sql.yml
new file mode 100644
index 0000000..0648003
--- /dev/null
+++ b/server/sql.yml
@@ -0,0 +1,5 @@
+lowercaseKeywords: false
+connections:
+ - alias: mysql
+ driver: mysql
+ dataSourceName: root:root@tcp(127.0.0.1:3306)/demo
diff --git a/studio/components/monaco/index.tsx b/studio/components/monaco/index.tsx
index e265d0a..b014373 100644
--- a/studio/components/monaco/index.tsx
+++ b/studio/components/monaco/index.tsx
@@ -65,7 +65,7 @@
let editor = null as monaco.editor.IStandaloneCodeEditor | null
const formItem = useFormItem({})
- const url = createUrl('localhost', 3001, '/python')
+ const url = createUrl('localhost', 3001, `/${props.options.language}`)
const webSocket = new WebSocket(url)
webSocket.onopen = () => {
@@ -87,7 +87,7 @@
name: 'Studio Language Client',
clientOptions: {
// use a language id as a document selector
- documentSelector: ['python'],
+ documentSelector: ['python', 'sql'],
// disable the default error handler
errorHandler: {
error: () => ({ action: ErrorAction.Continue }),