Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add sql-language-server #326

Merged
merged 6 commits into from Aug 30, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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