Skip to content

Commit 9c65875

Browse files
authored
Merge pull request #538 from bollwyvl/investigate-conf-d
add extra conf.d config reader for servers, fix conf.d names
2 parents ab0d721 + 217d8b7 commit 9c65875

File tree

11 files changed

+76
-3
lines changed

11 files changed

+76
-3
lines changed

.github/workflows/job.test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,5 +429,7 @@ jobs:
429429
set -eux
430430
jupyter labextension list
431431
jupyter server extension list
432+
jupyter serverextension list
432433
jupyter labextension list 2>&1 | grep -ie "jupyterlab-lsp.*enabled.*ok" -
433434
jupyter server extension list 2>&1 | grep -ie "jupyter_lsp.*enabled" -
435+
jupyter serverextension list 2>&1 | grep -ie "jupyter_lsp.*enabled" -

CHANGELOG.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,16 @@
11
## CHANGELOG
22

3+
### `jupyter-lsp 1.1.4` (unreleased)
4+
5+
- bug fixes:
6+
7+
- ensures `jupyter*_config.d` paths are searched for `language_servers`
8+
as documented in _Configuring_ ([#535])
9+
- uses more explicit file name for enabling `jupyter-lsp` in `notebook` and
10+
`jupyter_server ([#535])
11+
12+
[#535]: https://github.com/krassowski/jupyterlab-lsp/pull/535
13+
314
### `@krassowski/jupyterlab-lsp 3.4.1` (2020-02-16)
415

516
- bug fixes:

python_packages/jupyter_lsp/jupyter_lsp/constants.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@
88
EP_LISTENER_ALL_V1 = "jupyter_lsp_listener_all_v1"
99
EP_LISTENER_CLIENT_V1 = "jupyter_lsp_listener_client_v1"
1010
EP_LISTENER_SERVER_V1 = "jupyter_lsp_listener_server_v1"
11+
12+
# jupyter*config.d where language_servers can be defined
13+
APP_CONFIG_D_SECTIONS = ["_", "_notebook_", "_server_"]

python_packages/jupyter_lsp/jupyter_lsp/manager.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from typing import Dict, Text, Tuple
66

77
import entrypoints
8+
from jupyter_core.paths import jupyter_config_path
9+
from jupyter_server.services.config import ConfigManager
810
from jupyter_server.transutils import _
911
from traitlets import Bool
1012
from traitlets import Dict as Dict_
@@ -13,6 +15,7 @@
1315
from traitlets import Unicode, default
1416

1517
from .constants import (
18+
APP_CONFIG_D_SECTIONS,
1619
EP_LISTENER_ALL_V1,
1720
EP_LISTENER_CLIENT_V1,
1821
EP_LISTENER_SERVER_V1,
@@ -32,6 +35,11 @@
3235
class LanguageServerManager(LanguageServerManagerAPI):
3336
"""Manage language servers"""
3437

38+
conf_d_language_servers = Schema(
39+
validator=LANGUAGE_SERVER_SPEC_MAP,
40+
help=_("extra language server specs, keyed by implementation, from conf.d"),
41+
) # type: KeyedLanguageServerSpecs
42+
3543
language_servers = Schema(
3644
validator=LANGUAGE_SERVER_SPEC_MAP,
3745
help=_("a dict of language server specs, keyed by implementation"),
@@ -72,6 +80,21 @@ def _default_language_servers(self):
7280
def _default_virtual_documents_dir(self):
7381
return os.getenv("JP_LSP_VIRTUAL_DIR", ".virtual_documents")
7482

83+
@default("conf_d_language_servers")
84+
def _default_conf_d_language_servers(self):
85+
language_servers = {} # type: KeyedLanguageServerSpecs
86+
87+
manager = ConfigManager(read_config_path=jupyter_config_path())
88+
89+
for app in APP_CONFIG_D_SECTIONS:
90+
language_servers.update(
91+
**manager.get(f"jupyter{app}config")
92+
.get(self.__class__.__name__, {})
93+
.get("language_servers", {})
94+
)
95+
96+
return language_servers
97+
7598
def __init__(self, **kwargs):
7699
"""Before starting, perform all necessary configuration"""
77100
super().__init__(**kwargs)
@@ -87,6 +110,7 @@ def init_language_servers(self) -> None:
87110

88111
# copy the language servers before anybody monkeys with them
89112
language_servers_from_config = dict(self.language_servers)
113+
language_servers_from_config.update(self.conf_d_language_servers)
90114

91115
if self.autodetect:
92116
language_servers.update(self._autodetect_language_servers())

python_packages/jupyter_lsp/jupyter_lsp/tests/conftest.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111

1212
# local imports
1313
from jupyter_lsp import LanguageServerManager
14+
from jupyter_lsp.constants import APP_CONFIG_D_SECTIONS
1415
from jupyter_lsp.handlers import LanguageServersHandler, LanguageServerWebSocketHandler
1516

16-
# these should always be available in a test environment ()
17+
# these should always be available in a test environment
1718
KNOWN_SERVERS = [
1819
"bash-language-server",
1920
"dockerfile-language-server-nodejs",
@@ -46,6 +47,28 @@ def manager() -> LanguageServerManager:
4647
return LanguageServerManager()
4748

4849

50+
@fixture
51+
def echo_spec():
52+
return {"argv": ["echo", "no server here"], "languages": ["klingon"], "version": 2}
53+
54+
55+
@fixture
56+
def echo_conf_json(echo_spec) -> str:
57+
return json.dumps(
58+
{"LanguageServerManager": {"language_servers": {"_echo_": echo_spec}}},
59+
indent=2,
60+
sort_keys=True,
61+
)
62+
63+
64+
@fixture(params=sorted(APP_CONFIG_D_SECTIONS))
65+
def app_config_d(request, tmp_path, monkeypatch) -> pathlib.Path:
66+
conf_d = tmp_path / f"jupyter{request.param}config.d"
67+
conf_d.mkdir()
68+
monkeypatch.setenv("JUPYTER_CONFIG_PATH", f"{tmp_path}")
69+
return conf_d
70+
71+
4972
@fixture(params=sorted(KNOWN_SERVERS))
5073
def known_server(request):
5174
return request.param
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
def test_conf_d_language_servers(echo_conf_json, handlers, app_config_d):
2+
(app_config_d / "echo.json").write_text(echo_conf_json)
3+
handler, ws_handler = handlers
4+
manager = handler.manager
5+
manager.initialize()
6+
assert "_echo_" in [*manager.language_servers]

python_packages/jupyter_lsp/setup.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,11 @@
1515
data_files=[
1616
(
1717
"etc/jupyter/jupyter_server_config.d",
18-
["jupyter_lsp/etc/jupyter_server_config.json"],
18+
["jupyter_lsp/etc/jupyter-lsp-jupyter-server.json"],
1919
),
2020
(
2121
"etc/jupyter/jupyter_notebook_config.d",
22-
["jupyter_lsp/etc/jupyter_notebook_config.json"],
22+
["jupyter_lsp/etc/jupyter-lsp-notebook.json"],
2323
),
2424
],
2525
)

scripts/utest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ def run_tests():
2626
"jupyter_lsp",
2727
"--cov-report",
2828
"term-missing:skip-covered",
29+
"--no-cov-on-fail",
2930
"-p",
3031
"no:warnings",
3132
"--flake8",

0 commit comments

Comments
 (0)