Skip to content

Commit

Permalink
Merge pull request #326 from krassowski/add-sql-server
Browse files Browse the repository at this point in the history
Add sql-language-server
  • Loading branch information
krassowski committed Aug 30, 2020
2 parents d7ac678 + 19a2755 commit 574abcc
Show file tree
Hide file tree
Showing 12 changed files with 1,409 additions and 40 deletions.
8 changes: 8 additions & 0 deletions CHANGELOG.md
@@ -1,5 +1,13 @@
## CHANGELOG

### `jupyter-lsp 0.9.2` (unreleased)

- autodetects the `sql` language server for `.sql` files ([#328][])
- diagnostics are provided by `sqlint` which requires Node 11+
to work well (in contrast to currently required Node 10+).

[#328]: https://github.com/krassowski/jupyterlab-lsp/pull/328

### `@krassowski/jupyterlab-lsp 1.2.0` (unreleased)

- features
Expand Down
3 changes: 3 additions & 0 deletions atest/01_Editor.robot
Expand Up @@ -60,6 +60,9 @@ TypeScript
${def} = Set Variable xpath:(//span[contains(@class, 'cm-variable')][contains(text(), 'inc')])[last()]
Editor Shows Features for Language TypeScript example.ts Diagnostics=The left-hand side of an arithmetic Jump to Definition=${def} Rename=${def}

SQL
Editor Shows Features for Language SQL example.sql Diagnostics=Expected

YAML
Editor Shows Features for Language YAML example.yaml Diagnostics=duplicate key

Expand Down
2 changes: 1 addition & 1 deletion atest/05_Features/Completion.robot
Expand Up @@ -130,7 +130,7 @@ Cell Editor Should Equal
Select Completer Suggestion
[Arguments] ${text}
${suggestion} = Set Variable css:.jp-Completer-item[data-value="${text}"]
Wait Until Element Is Visible ${suggestion} timeout=10s
Wait Until Element Is Visible ${suggestion} timeout=10s
Mouse Over ${suggestion}
Click Element ${suggestion} code

Expand Down
1 change: 1 addition & 0 deletions atest/examples/example.sql
@@ -0,0 +1 @@
SELECT * FR
5 changes: 4 additions & 1 deletion docs/rtd.yml
@@ -1,8 +1,11 @@
# minimal possible conda env for modern nodejs
name: jupyterlab-lsp-docs

channels:
- conda-forge

dependencies:
- nodejs
- nodejs >=11,<14
- pip
- python >=3.8,<3.9.0a0
- pip:
Expand Down
4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -16,6 +16,7 @@
"lerna": "^3.13.2",
"precise-commits": "^1.0.2",
"prettier": "^2.0.5",
"sql-language-server": "^0.11.4",
"typescript": "~3.9.5",
"unified-language-server": "^0.3.0",
"vscode-css-languageserver-bin": "^1.4.0",
Expand All @@ -24,8 +25,7 @@
"yaml-language-server": "~0.4.0"
},
"husky": {
"hooks": {
}
"hooks": {}
},
"prettier": {
"arrowParens": "avoid",
Expand Down
3 changes: 3 additions & 0 deletions py_src/jupyter_lsp/specs/__init__.py
@@ -1,11 +1,13 @@
""" default specs
"""
# flake8: noqa: F401

from .bash_language_server import BashLanguageServer
from .dockerfile_language_server_nodejs import DockerfileLanguageServerNodeJS
from .javascript_typescript_langserver import JavascriptTypescriptLanguageServer
from .pyls import PythonLanguageServer
from .r_languageserver import RLanguageServer
from .sql_language_server import SQLLanguageServer
from .texlab import Texlab
from .unified_language_server import UnifiedLanguageServer
from .vscode_css_languageserver import VSCodeCSSLanguageServer
Expand All @@ -23,4 +25,5 @@
r = RLanguageServer()
tex = Texlab()
ts = JavascriptTypescriptLanguageServer()
sql = SQLLanguageServer()
yaml = YAMLLanguageServer()
60 changes: 60 additions & 0 deletions py_src/jupyter_lsp/specs/config/sql-language-server.schema.json
@@ -0,0 +1,60 @@
{
"properties": {
"personalConfig": {
"connections": {
"type": "array",
"default": [
{
"name": "default sqlite3 connection",
"adapter": "sqlite3",
"filename": ":memory:",
"projectPaths": ["."]
}
],
"items": {
"type": "object",
"properties": {
"name": {
"description": "Connection name (free-form text)",
"type": "string"
},
"adapter": {
"description": "Database type",
"type": "string",
"enum": ["mysql", "postgresql", "postgres", "sqlite3"]
},
"host": {
"description": "Database host",
"type": "string"
},
"port": {
"description": "Database port",
"type": "number"
},
"user": {
"description": "Database user",
"type": "string"
},
"database": {
"description": "Database name",
"type": "string"
},
"password": {
"description": "Database password",
"type": "string"
},
"filename": {
"description": "Database filename - only for sqlite3 (required); use ':memory:' for in-memory database",
"type": "string"
},
"projectPaths": {
"description": "Project path that you want to apply (if you don't set it configuration will not apply automatically when lsp's started up)",
"type": "array",
"items": { "type": "string" }
}
}
}
}
}
}
}
34 changes: 34 additions & 0 deletions py_src/jupyter_lsp/specs/sql_language_server.py
@@ -0,0 +1,34 @@
from .config import load_config_schema
from .utils import NodeModuleSpec


class SQLLanguageServer(NodeModuleSpec):
"""Supports mysql, postgres and sqlite3"""

node_module = key = "sql-language-server"
script = ["dist", "bin", "cli.js"]
languages = [
"sql",
]
args = ["up", "--method", "stdio"]
spec = dict(
display_name=key,
mime_types=[
"application/sql",
"text/sql",
"text/x-sql",
"text/x-mysql",
"text/x-mariadb",
"text/x-pgsql",
],
urls=dict(
home="https://github.com/joe-re/{}".format(key),
issues="https://github.com/joe-re/{}/issues".format(key),
),
install=dict(
npm="npm install --save-dev {}".format(key),
yarn="yarn add --dev {}".format(key),
jlpm="jlpm add --dev {}".format(key),
),
config_schema=load_config_schema(key),
)
8 changes: 4 additions & 4 deletions py_src/jupyter_lsp/tests/conftest.py
Expand Up @@ -3,13 +3,12 @@
import shutil
from typing import Text

from notebook.notebookapp import NotebookApp
from pytest import fixture
from tornado.queues import Queue

# local imports
from jupyter_lsp import LanguageServerManager
from jupyter_lsp.handlers import LanguageServersHandler, LanguageServerWebSocketHandler
from notebook.notebookapp import NotebookApp
from pytest import fixture
from tornado.queues import Queue

# these should always be available in a test environment ()
KNOWN_SERVERS = [
Expand All @@ -18,6 +17,7 @@
"javascript-typescript-langserver",
"pyls",
"unified-language-server",
"sql-language-server",
"vscode-css-languageserver-bin",
"vscode-html-languageserver-bin",
"vscode-json-languageserver-bin",
Expand Down
1 change: 1 addition & 0 deletions setup.cfg
Expand Up @@ -43,6 +43,7 @@ jupyter_lsp_spec_v1 =
python-language-server = jupyter_lsp.specs:py
r-languageserver = jupyter_lsp.specs:r
texlab = jupyter_lsp.specs:tex
sql-language-server = jupyter_lsp.specs:sql
unified-language-server = jupyter_lsp.specs:md
vscode-css-languageserver-bin = jupyter_lsp.specs:css
vscode-html-languageserver-bin = jupyter_lsp.specs:html
Expand Down

0 comments on commit 574abcc

Please sign in to comment.