euporie 2.8.0__py3-none-any.whl → 2.8.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- euporie/console/_commands.py +143 -0
- euporie/console/_settings.py +58 -0
- euporie/console/app.py +25 -71
- euporie/console/tabs/console.py +267 -147
- euporie/core/__init__.py +1 -9
- euporie/core/__main__.py +31 -5
- euporie/core/_settings.py +104 -0
- euporie/core/app/__init__.py +3 -0
- euporie/core/app/_commands.py +70 -0
- euporie/core/app/_settings.py +427 -0
- euporie/core/{app.py → app/app.py} +214 -572
- euporie/core/app/base.py +51 -0
- euporie/core/{current.py → app/current.py} +13 -4
- euporie/core/app/cursor.py +35 -0
- euporie/core/app/dummy.py +12 -0
- euporie/core/app/launch.py +28 -0
- euporie/core/bars/__init__.py +11 -0
- euporie/core/bars/command.py +182 -0
- euporie/core/bars/menu.py +258 -0
- euporie/core/{widgets → bars}/search.py +154 -57
- euporie/core/{widgets → bars}/status.py +9 -26
- euporie/core/clipboard.py +19 -80
- euporie/core/comm/base.py +8 -6
- euporie/core/comm/ipywidgets.py +21 -12
- euporie/core/comm/registry.py +2 -1
- euporie/core/commands.py +11 -5
- euporie/core/completion.py +3 -2
- euporie/core/config.py +368 -341
- euporie/core/convert/__init__.py +0 -30
- euporie/core/convert/datum.py +131 -60
- euporie/core/convert/formats/__init__.py +31 -0
- euporie/core/convert/formats/ansi.py +46 -30
- euporie/core/convert/formats/common.py +11 -23
- euporie/core/convert/formats/html.py +45 -40
- euporie/core/convert/formats/pil.py +1 -1
- euporie/core/convert/formats/png.py +3 -5
- euporie/core/convert/formats/sixel.py +3 -3
- euporie/core/convert/registry.py +11 -8
- euporie/core/convert/utils.py +50 -23
- euporie/core/diagnostics.py +2 -2
- euporie/core/filters.py +72 -82
- euporie/core/format.py +13 -2
- euporie/core/ft/ansi.py +1 -1
- euporie/core/ft/html.py +36 -36
- euporie/core/ft/table.py +1 -3
- euporie/core/ft/utils.py +4 -1
- euporie/core/graphics.py +216 -124
- euporie/core/history.py +2 -2
- euporie/core/inspection.py +3 -2
- euporie/core/io.py +207 -28
- euporie/core/kernel/__init__.py +1 -0
- euporie/core/{kernel.py → kernel/client.py} +100 -139
- euporie/core/kernel/manager.py +114 -0
- euporie/core/key_binding/bindings/__init__.py +2 -8
- euporie/core/key_binding/bindings/basic.py +47 -7
- euporie/core/key_binding/bindings/completion.py +3 -8
- euporie/core/key_binding/bindings/micro.py +5 -7
- euporie/core/key_binding/bindings/mouse.py +26 -24
- euporie/core/key_binding/bindings/terminal.py +193 -0
- euporie/core/key_binding/bindings/vi.py +46 -0
- euporie/core/key_binding/key_processor.py +43 -2
- euporie/core/key_binding/registry.py +2 -0
- euporie/core/key_binding/utils.py +22 -2
- euporie/core/keys.py +7156 -92
- euporie/core/layout/cache.py +35 -25
- euporie/core/layout/containers.py +280 -74
- euporie/core/layout/decor.py +5 -5
- euporie/core/layout/mouse.py +1 -1
- euporie/core/layout/print.py +16 -3
- euporie/core/layout/scroll.py +26 -28
- euporie/core/log.py +75 -60
- euporie/core/lsp.py +118 -24
- euporie/core/margins.py +60 -31
- euporie/core/path.py +2 -1
- euporie/core/renderer.py +58 -17
- euporie/core/style.py +60 -40
- euporie/core/suggest.py +103 -85
- euporie/core/tabs/__init__.py +34 -0
- euporie/core/tabs/_settings.py +113 -0
- euporie/core/tabs/base.py +11 -435
- euporie/core/tabs/kernel.py +420 -0
- euporie/core/tabs/notebook.py +20 -54
- euporie/core/utils.py +98 -6
- euporie/core/validation.py +1 -1
- euporie/core/widgets/_settings.py +188 -0
- euporie/core/widgets/cell.py +90 -158
- euporie/core/widgets/cell_outputs.py +26 -37
- euporie/core/widgets/decor.py +11 -41
- euporie/core/widgets/dialog.py +55 -44
- euporie/core/widgets/display.py +27 -24
- euporie/core/widgets/file_browser.py +5 -26
- euporie/core/widgets/forms.py +16 -12
- euporie/core/widgets/inputs.py +37 -81
- euporie/core/widgets/layout.py +7 -6
- euporie/core/widgets/logo.py +49 -0
- euporie/core/widgets/menu.py +13 -11
- euporie/core/widgets/pager.py +9 -11
- euporie/core/widgets/palette.py +6 -6
- euporie/hub/app.py +52 -31
- euporie/notebook/_commands.py +24 -0
- euporie/notebook/_settings.py +107 -0
- euporie/notebook/app.py +109 -210
- euporie/notebook/filters.py +1 -1
- euporie/notebook/tabs/__init__.py +46 -7
- euporie/notebook/tabs/_commands.py +714 -0
- euporie/notebook/tabs/_settings.py +32 -0
- euporie/notebook/tabs/display.py +2 -2
- euporie/notebook/tabs/edit.py +12 -7
- euporie/notebook/tabs/json.py +3 -3
- euporie/notebook/tabs/log.py +1 -18
- euporie/notebook/tabs/notebook.py +21 -674
- euporie/notebook/widgets/_commands.py +11 -0
- euporie/notebook/widgets/_settings.py +19 -0
- euporie/notebook/widgets/side_bar.py +14 -34
- euporie/preview/_settings.py +104 -0
- euporie/preview/app.py +8 -30
- euporie/preview/tabs/notebook.py +15 -86
- euporie/web/tabs/web.py +4 -6
- euporie/web/widgets/webview.py +5 -12
- {euporie-2.8.0.dist-info → euporie-2.8.5.dist-info}/METADATA +11 -15
- euporie-2.8.5.dist-info/RECORD +172 -0
- {euporie-2.8.0.dist-info → euporie-2.8.5.dist-info}/WHEEL +1 -1
- {euporie-2.8.0.dist-info → euporie-2.8.5.dist-info}/entry_points.txt +2 -2
- {euporie-2.8.0.dist-info → euporie-2.8.5.dist-info}/licenses/LICENSE +1 -1
- euporie/core/launch.py +0 -59
- euporie/core/terminal.py +0 -527
- euporie-2.8.0.dist-info/RECORD +0 -146
- {euporie-2.8.0.data → euporie-2.8.5.data}/data/share/applications/euporie-console.desktop +0 -0
- {euporie-2.8.0.data → euporie-2.8.5.data}/data/share/applications/euporie-notebook.desktop +0 -0
euporie/core/layout/scroll.py
CHANGED
@@ -23,7 +23,8 @@ from euporie.core.layout.screen import BoundedWritePosition
|
|
23
23
|
from euporie.core.utils import run_in_thread_with_context
|
24
24
|
|
25
25
|
if TYPE_CHECKING:
|
26
|
-
from
|
26
|
+
from collections.abc import Sequence
|
27
|
+
from typing import Callable, Literal
|
27
28
|
|
28
29
|
from prompt_toolkit.key_binding.key_bindings import (
|
29
30
|
KeyBindingsBase,
|
@@ -43,6 +44,8 @@ log = logging.getLogger(__name__)
|
|
43
44
|
class ScrollingContainer(Container):
|
44
45
|
"""A scrollable container which renders only the currently visible children."""
|
45
46
|
|
47
|
+
render_info: WindowRenderInfo | None
|
48
|
+
|
46
49
|
def __init__(
|
47
50
|
self,
|
48
51
|
children: Callable[[], Sequence[AnyContainer]] | Sequence[AnyContainer],
|
@@ -284,25 +287,19 @@ class ScrollingContainer(Container):
|
|
284
287
|
def wrapped(mouse_event: MouseEvent) -> NotImplementedOrNone:
|
285
288
|
response: NotImplementedOrNone = NotImplemented
|
286
289
|
|
287
|
-
if
|
288
|
-
response = self.scroll(-1)
|
289
|
-
elif mouse_event.event_type == MouseEventType.SCROLL_UP:
|
290
|
-
response = self.scroll(1)
|
291
|
-
elif callable(handler):
|
290
|
+
if callable(handler):
|
292
291
|
response = handler(mouse_event)
|
293
292
|
|
293
|
+
if response is NotImplemented:
|
294
|
+
if mouse_event.event_type == MouseEventType.SCROLL_DOWN:
|
295
|
+
response = self.scroll(-1)
|
296
|
+
elif mouse_event.event_type == MouseEventType.SCROLL_UP:
|
297
|
+
response = self.scroll(1)
|
298
|
+
|
294
299
|
# Refresh the child if there was a response
|
295
300
|
if response is None:
|
296
301
|
return response
|
297
302
|
|
298
|
-
# This relies on windows returning NotImplemented when scrolled
|
299
|
-
# to the start or end
|
300
|
-
# if response is NotImplemented:
|
301
|
-
# if mouse_event.event_type == MouseEventType.SCROLL_DOWN:
|
302
|
-
# response = self.scroll(-1)
|
303
|
-
# elif mouse_event.event_type == MouseEventType.SCROLL_UP:
|
304
|
-
# response = self.scroll(1)
|
305
|
-
|
306
303
|
# Select the clicked child if clicked
|
307
304
|
if mouse_event.event_type == MouseEventType.MOUSE_DOWN:
|
308
305
|
if child:
|
@@ -480,10 +477,10 @@ class ScrollingContainer(Container):
|
|
480
477
|
)
|
481
478
|
for y in range(ypos + line, ypos + available_height):
|
482
479
|
for x in range(xpos, xpos + available_width):
|
483
|
-
mouse_handlers.mouse_handlers[y][
|
484
|
-
|
485
|
-
|
486
|
-
|
480
|
+
mouse_handlers.mouse_handlers[y][x] = (
|
481
|
+
self._mouse_handler_wrapper(
|
482
|
+
mouse_handlers.mouse_handlers[y][x]
|
483
|
+
)
|
487
484
|
)
|
488
485
|
# Blit children above the selected that are on screen
|
489
486
|
line = self.selected_child_position
|
@@ -525,10 +522,10 @@ class ScrollingContainer(Container):
|
|
525
522
|
)
|
526
523
|
for y in range(ypos, ypos + line):
|
527
524
|
for x in range(xpos, xpos + available_width):
|
528
|
-
mouse_handlers.mouse_handlers[y][
|
529
|
-
|
530
|
-
|
531
|
-
|
525
|
+
mouse_handlers.mouse_handlers[y][x] = (
|
526
|
+
self._mouse_handler_wrapper(
|
527
|
+
mouse_handlers.mouse_handlers[y][x]
|
528
|
+
)
|
532
529
|
)
|
533
530
|
|
534
531
|
# Dont bother drawing floats
|
@@ -600,9 +597,10 @@ class ScrollingContainer(Container):
|
|
600
597
|
|
601
598
|
def all_children(self) -> Sequence[Container]:
|
602
599
|
"""Return the list of all children of this container."""
|
603
|
-
|
604
|
-
|
605
|
-
|
600
|
+
_children = self._children
|
601
|
+
if self.refresh_children or not self._children:
|
602
|
+
self.refresh_children = False
|
603
|
+
new_children = []
|
606
604
|
new_child_hashes = set()
|
607
605
|
for child in self.children_func():
|
608
606
|
if not (
|
@@ -611,21 +609,21 @@ class ScrollingContainer(Container):
|
|
611
609
|
wrapped_child = self._child_cache[child_hash] = CachedContainer(
|
612
610
|
child, mouse_handler_wrapper=self._mouse_handler_wrapper
|
613
611
|
)
|
614
|
-
|
612
|
+
new_children.append(wrapped_child)
|
615
613
|
new_child_hashes.add(child_hash)
|
614
|
+
_children[:] = new_children
|
616
615
|
|
617
616
|
# Clean up metacache
|
618
617
|
for child_hash in set(self._child_cache) - new_child_hashes:
|
619
618
|
del self._child_cache[child_hash]
|
620
619
|
|
621
|
-
self.refresh_children = False
|
622
620
|
# Clean up positions
|
623
621
|
self.index_positions = {
|
624
622
|
i: pos
|
625
623
|
for i, pos in self.index_positions.items()
|
626
624
|
if i < len(self._children)
|
627
625
|
}
|
628
|
-
return
|
626
|
+
return _children
|
629
627
|
|
630
628
|
def get_children(self) -> list[Container]:
|
631
629
|
"""Return the list of currently visible children to include in the layout."""
|
euporie/core/log.py
CHANGED
@@ -20,12 +20,10 @@ from prompt_toolkit.renderer import (
|
|
20
20
|
from prompt_toolkit.shortcuts.utils import print_formatted_text
|
21
21
|
from prompt_toolkit.styles.pygments import style_from_pygments_cls
|
22
22
|
from prompt_toolkit.styles.style import Style, merge_styles
|
23
|
-
from pygments.styles import get_style_by_name
|
24
23
|
|
25
|
-
from euporie.core.config import add_setting
|
26
24
|
from euporie.core.ft.utils import indent, lex, wrap
|
27
25
|
from euporie.core.io import PseudoTTY
|
28
|
-
from euporie.core.style import LOG_STYLE
|
26
|
+
from euporie.core.style import LOG_STYLE, get_style_by_name
|
29
27
|
from euporie.core.utils import dict_merge
|
30
28
|
|
31
29
|
if TYPE_CHECKING:
|
@@ -42,6 +40,65 @@ log = logging.getLogger(__name__)
|
|
42
40
|
LOG_QUEUE: deque = deque(maxlen=1000)
|
43
41
|
|
44
42
|
|
43
|
+
class BufferedLogs(logging.Handler):
|
44
|
+
"""A handler that collects log records and replays them on exit."""
|
45
|
+
|
46
|
+
def __init__(self, logger: logging.Logger | None = None) -> None:
|
47
|
+
"""Initialize the collector.
|
48
|
+
|
49
|
+
Args:
|
50
|
+
logger: Logger to collect from and replay to. If None, uses root logger.
|
51
|
+
"""
|
52
|
+
super().__init__()
|
53
|
+
self.records: list[logging.LogRecord] = []
|
54
|
+
self._logger = logger or logging.getLogger()
|
55
|
+
self._original_handlers: list[logging.Handler] = []
|
56
|
+
|
57
|
+
def emit(self, record: logging.LogRecord) -> None:
|
58
|
+
"""Store the log record."""
|
59
|
+
self.records.append(record)
|
60
|
+
|
61
|
+
def replay(self) -> None:
|
62
|
+
"""Replay collected logs through the original logger."""
|
63
|
+
for record in self.records:
|
64
|
+
if record.exc_info:
|
65
|
+
# Create a new record to avoid issues with stale exc_info
|
66
|
+
record = logging.LogRecord(
|
67
|
+
record.name,
|
68
|
+
record.levelno,
|
69
|
+
record.pathname,
|
70
|
+
record.lineno,
|
71
|
+
record.msg,
|
72
|
+
record.args,
|
73
|
+
record.exc_info,
|
74
|
+
record.funcName,
|
75
|
+
)
|
76
|
+
self._logger.handle(record)
|
77
|
+
|
78
|
+
def __enter__(self) -> BufferedLogs:
|
79
|
+
"""Store and replace the log handlers."""
|
80
|
+
# Save and remove existing handlers
|
81
|
+
self._original_handlers = self._logger.handlers[:]
|
82
|
+
self._logger.handlers.clear()
|
83
|
+
# Add ourselves as the only handler
|
84
|
+
self._logger.addHandler(self)
|
85
|
+
return self
|
86
|
+
|
87
|
+
def __exit__(
|
88
|
+
self,
|
89
|
+
exc_type: type[BaseException] | None,
|
90
|
+
exc_value: BaseException | None,
|
91
|
+
exc_traceback: TracebackType | None,
|
92
|
+
) -> None:
|
93
|
+
"""Restore the original handlers."""
|
94
|
+
# Remove ourselves
|
95
|
+
self._logger.removeHandler(self)
|
96
|
+
# Restore original handlers
|
97
|
+
self._logger.handlers = self._original_handlers
|
98
|
+
# Replay collected records through original handlers
|
99
|
+
self.replay()
|
100
|
+
|
101
|
+
|
45
102
|
class FtFormatter(logging.Formatter):
|
46
103
|
"""Base class for formatted text logging formatter."""
|
47
104
|
|
@@ -240,12 +297,17 @@ class StdoutFormatter(FtFormatter):
|
|
240
297
|
msg_pad = len(date) + 10
|
241
298
|
msg_pad_1st_line = msg_pad + 1 + len(ref)
|
242
299
|
|
243
|
-
msg_lines =
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
300
|
+
msg_lines = "\n".join(
|
301
|
+
textwrap.wrap(
|
302
|
+
record.message,
|
303
|
+
width=width,
|
304
|
+
initial_indent=" " * msg_pad_1st_line,
|
305
|
+
replace_whitespace=False,
|
306
|
+
)
|
307
|
+
).split("\n")
|
308
|
+
subsequent_indent = " " * msg_pad
|
309
|
+
for i in range(1, len(msg_lines)):
|
310
|
+
msg_lines[i] = f"{subsequent_indent}{msg_lines[i]}"
|
249
311
|
|
250
312
|
output: StyleAndTextTuples = [
|
251
313
|
("class:pygments.literal.date", date),
|
@@ -416,7 +478,7 @@ def setup_logs(config: Config | None = None) -> None:
|
|
416
478
|
}
|
417
479
|
|
418
480
|
if config is not None:
|
419
|
-
log_file = config.
|
481
|
+
log_file = config.log_file or ""
|
420
482
|
log_file_is_stdout = log_file in {"-", "/dev/stdout"}
|
421
483
|
log_level = config.log_level.upper()
|
422
484
|
|
@@ -433,18 +495,14 @@ def setup_logs(config: Config | None = None) -> None:
|
|
433
495
|
# Configure stdout handler
|
434
496
|
if log_file_is_stdout:
|
435
497
|
stdout_level = log_level
|
436
|
-
elif (app_cls := config.app_cls) is not None and (
|
437
|
-
log_stdout_level := app_cls.log_stdout_level
|
438
|
-
):
|
439
|
-
stdout_level = log_stdout_level.upper()
|
440
498
|
else:
|
441
|
-
stdout_level =
|
499
|
+
stdout_level = config.log_level_stdout.upper()
|
442
500
|
log_config["handlers"]["stdout"]["level"] = stdout_level
|
443
|
-
if syntax_theme := config.
|
501
|
+
if syntax_theme := config.syntax_theme:
|
444
502
|
log_config["handlers"]["stdout"]["pygments_theme"] = syntax_theme
|
445
503
|
|
446
504
|
# Configure euporie logger
|
447
|
-
log_config["loggers"]["euporie"]["level"] =
|
505
|
+
log_config["loggers"]["euporie"]["level"] = log_level
|
448
506
|
|
449
507
|
# Update log_config based on additional config dict provided
|
450
508
|
if config.log_config:
|
@@ -463,46 +521,3 @@ def setup_logs(config: Config | None = None) -> None:
|
|
463
521
|
|
464
522
|
# Log uncaught exceptions
|
465
523
|
sys.excepthook = handle_exception
|
466
|
-
|
467
|
-
|
468
|
-
# ################################### Settings ########################################
|
469
|
-
|
470
|
-
|
471
|
-
add_setting(
|
472
|
-
name="log_file",
|
473
|
-
flags=["--log-file"],
|
474
|
-
nargs="?",
|
475
|
-
default="",
|
476
|
-
type_=str,
|
477
|
-
title="the log file path",
|
478
|
-
help_="File path for logs",
|
479
|
-
description="""
|
480
|
-
When set to a file path, the log output will be written to the given path.
|
481
|
-
If no value is given output will be sent to the standard output.
|
482
|
-
""",
|
483
|
-
)
|
484
|
-
|
485
|
-
add_setting(
|
486
|
-
name="log_level",
|
487
|
-
flags=["--log-level"],
|
488
|
-
type_=str,
|
489
|
-
default="warning",
|
490
|
-
title="the log level",
|
491
|
-
help_="Set the log level",
|
492
|
-
choices=["debug", "info", "warning", "error", "critical"],
|
493
|
-
description="""
|
494
|
-
When set, logging events at the given level are emitted.
|
495
|
-
""",
|
496
|
-
)
|
497
|
-
|
498
|
-
add_setting(
|
499
|
-
name="log_config",
|
500
|
-
flags=["--log-config"],
|
501
|
-
type_=str,
|
502
|
-
default=None,
|
503
|
-
title="additional logging configuration",
|
504
|
-
help_="Additional logging configuration",
|
505
|
-
description="""
|
506
|
-
A JSON string specifying additional logging configuration.
|
507
|
-
""",
|
508
|
-
)
|
euporie/core/lsp.py
CHANGED
@@ -13,8 +13,9 @@ from typing import TYPE_CHECKING, NamedTuple
|
|
13
13
|
from prompt_toolkit.utils import Event
|
14
14
|
|
15
15
|
if TYPE_CHECKING:
|
16
|
+
from collections.abc import Coroutine, Sequence
|
16
17
|
from concurrent.futures import Future
|
17
|
-
from typing import Any, Callable
|
18
|
+
from typing import Any, Callable
|
18
19
|
|
19
20
|
|
20
21
|
log = logging.getLogger(__name__)
|
@@ -475,6 +476,7 @@ class LspClient:
|
|
475
476
|
"cellTextDocuments": [],
|
476
477
|
}
|
477
478
|
langs = self.can_change_nb_langs
|
479
|
+
lsp_notebook_cell: dict[str, Any]
|
478
480
|
for cell in cells:
|
479
481
|
if langs and cell.language not in langs:
|
480
482
|
continue
|
@@ -598,6 +600,7 @@ class LspClient:
|
|
598
600
|
},
|
599
601
|
}
|
600
602
|
langs = self.can_change_nb_langs
|
603
|
+
lsp_notebook_cell: dict[str, Any]
|
601
604
|
for cell in cells:
|
602
605
|
# If specified, only sync cells with the languages the server has requested
|
603
606
|
if langs and cell.language not in langs:
|
@@ -657,6 +660,7 @@ class LspClient:
|
|
657
660
|
"change": {"cells": (change := {"data": [], "textContent": []})},
|
658
661
|
}
|
659
662
|
langs = self.can_change_nb_langs
|
663
|
+
lsp_notebook_cell: dict[str, Any]
|
660
664
|
for cell in cells:
|
661
665
|
self._doc_versions[cell.path] += 1
|
662
666
|
# If specified, only sync cells with the languages the server has requested
|
@@ -1032,10 +1036,24 @@ class LspClient:
|
|
1032
1036
|
|
1033
1037
|
KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
1034
1038
|
# Custom additions
|
1035
|
-
"ruff": {"command": ["ruff-lsp"], "languages": {"python"}},
|
1036
1039
|
"typos": {"command": ["typos-lsp"], "languages": set()},
|
1037
1040
|
# Helix's known LSPs
|
1038
1041
|
"als": {"command": ["als"]},
|
1042
|
+
"ada-language-server": {"command": ["ada_language_server"], "languages": {"ada"}},
|
1043
|
+
"ada-gpr-language-server": {
|
1044
|
+
"command": ["ada_language_server", "--language-gpr"],
|
1045
|
+
"languages": {"ada"},
|
1046
|
+
},
|
1047
|
+
"angular": {
|
1048
|
+
"command": [
|
1049
|
+
"ngserver",
|
1050
|
+
"--stdio",
|
1051
|
+
"--tsProbeLocations",
|
1052
|
+
".",
|
1053
|
+
"--ngProbeLocations",
|
1054
|
+
".",
|
1055
|
+
]
|
1056
|
+
},
|
1039
1057
|
"awk-language-server": {"command": ["awk-language-server"], "languages": {"awk"}},
|
1040
1058
|
"bash-language-server": {
|
1041
1059
|
"command": ["bash-language-server", "start"],
|
@@ -1043,11 +1061,16 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1043
1061
|
},
|
1044
1062
|
"bass": {"command": ["bass", "--lsp"], "languages": {"bass"}},
|
1045
1063
|
"bicep-langserver": {"command": ["bicep-langserver"], "languages": {"bicep"}},
|
1064
|
+
"bitbake-language-server": {
|
1065
|
+
"command": ["bitbake-language-server"],
|
1066
|
+
"languages": {"bitbake"},
|
1067
|
+
},
|
1046
1068
|
"bufls": {"command": ["bufls", "serve"], "languages": {"protobuf"}},
|
1047
1069
|
"cairo-language-server": {
|
1048
1070
|
"command": ["cairo-language-server"],
|
1049
1071
|
"languages": {"cairo"},
|
1050
1072
|
},
|
1073
|
+
"circom-lsp": {"command": ["circom-lsp"], "languages": {"circom"}},
|
1051
1074
|
"cl-lsp": {"command": ["cl-lsp", "stdio"], "languages": {"common-lisp"}},
|
1052
1075
|
"clangd": {"command": ["clangd"], "languages": {"opencl", "cpp", "c"}},
|
1053
1076
|
"clojure-lsp": {"command": ["clojure-lsp"], "languages": {"clojure"}},
|
@@ -1071,16 +1094,22 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1071
1094
|
"command": ["docker-langserver", "--stdio"],
|
1072
1095
|
"languages": {"dockerfile"},
|
1073
1096
|
},
|
1097
|
+
"docker-compose-langserver": {
|
1098
|
+
"command": ["docker-compose-langserver", "--stdio"],
|
1099
|
+
"languages": {"docker-compose"},
|
1100
|
+
},
|
1074
1101
|
"dot-language-server": {
|
1075
1102
|
"command": ["dot-language-server", "--stdio"],
|
1076
1103
|
"languages": {"dot"},
|
1077
1104
|
},
|
1105
|
+
"earthlyls": {"command": ["earthlyls"], "languages": {"earthfile"}},
|
1078
1106
|
"elixir-ls": {
|
1079
|
-
"
|
1107
|
+
"config": {"elixirLS": {"dialyzerEnabled": False}},
|
1080
1108
|
"command": ["elixir-ls"],
|
1081
|
-
"languages": {"
|
1109
|
+
"languages": {"heex", "elixir"},
|
1082
1110
|
},
|
1083
1111
|
"elm-language-server": {"command": ["elm-language-server"], "languages": {"elm"}},
|
1112
|
+
"elp": {"command": ["elp", "server"], "languages": {"erlang"}},
|
1084
1113
|
"elvish": {"command": ["elvish", "-lsp"], "languages": {"elvish"}},
|
1085
1114
|
"erlang-ls": {"command": ["erlang_ls"], "languages": {"erlang"}},
|
1086
1115
|
"forc": {"command": ["forc", "lsp"], "languages": {"sway"}},
|
@@ -1090,11 +1119,12 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1090
1119
|
"languages": {"fortran"},
|
1091
1120
|
},
|
1092
1121
|
"fsharp-ls": {
|
1093
|
-
"
|
1122
|
+
"config": {"AutomaticWorkspaceInit": True},
|
1094
1123
|
"command": ["fsautocomplete"],
|
1095
1124
|
"languages": {"fsharp"},
|
1096
1125
|
},
|
1097
1126
|
"gleam": {"command": ["gleam", "lsp"], "languages": {"gleam"}},
|
1127
|
+
"glsl_analyzer": {"command": ["glsl_analyzer"], "languages": {"glsl"}},
|
1098
1128
|
"graphql-language-service": {
|
1099
1129
|
"command": ["graphql-lsp", "server", "-m", "stream"],
|
1100
1130
|
"languages": {"graphql"},
|
@@ -1103,9 +1133,12 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1103
1133
|
"command": ["haskell-language-server-wrapper", "--lsp"],
|
1104
1134
|
"languages": {"cabal", "haskell"},
|
1105
1135
|
},
|
1136
|
+
"hyprls": {"command": ["hyprls"], "languages": {"hyprlang"}},
|
1106
1137
|
"idris2-lsp": {"command": ["idris2-lsp"], "languages": {"idris"}},
|
1107
1138
|
"intelephense": {"command": ["intelephense", "--stdio"], "languages": {"php"}},
|
1108
1139
|
"jdtls": {"command": ["jdtls"], "languages": {"java"}},
|
1140
|
+
"jedi": {"command": ["jedi-language-server"], "languages": {"python"}},
|
1141
|
+
"jq-lsp": {"command": ["jq-lsp"], "languages": {"jq"}},
|
1109
1142
|
"jsonnet-language-server": {
|
1110
1143
|
"command": ["jsonnet-language-server", "-t", "--lint"],
|
1111
1144
|
"languages": {"jsonnet"},
|
@@ -1122,22 +1155,39 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1122
1155
|
],
|
1123
1156
|
"languages": {"julia"},
|
1124
1157
|
},
|
1158
|
+
"koka": {
|
1159
|
+
"command": ["koka", "--language-server", "--lsstdio"],
|
1160
|
+
"languages": {"koka"},
|
1161
|
+
},
|
1125
1162
|
"kotlin-language-server": {
|
1126
1163
|
"command": ["kotlin-language-server"],
|
1127
1164
|
"languages": {"kotlin"},
|
1128
1165
|
},
|
1129
|
-
"lean": {"command": ["lean", "--server"], "languages": {"lean"}},
|
1166
|
+
"lean": {"command": ["lean", "--server", "--memory=1024"], "languages": {"lean"}},
|
1130
1167
|
"ltex-ls": {"command": ["ltex-ls"]},
|
1131
1168
|
"markdoc-ls": {"command": ["markdoc-ls", "--stdio"], "languages": {"markdoc"}},
|
1169
|
+
"markdown-oxide": {"command": ["markdown-oxide"], "languages": {"markdown"}},
|
1132
1170
|
"marksman": {"command": ["marksman", "server"], "languages": {"markdown"}},
|
1133
1171
|
"metals": {
|
1134
|
-
"
|
1172
|
+
"config": {
|
1173
|
+
"isHttpEnabled": True,
|
1174
|
+
"metals": {
|
1175
|
+
"inlayHints": {
|
1176
|
+
"typeParameters": {"enable": True},
|
1177
|
+
"hintsInPatternMatch": {"enable": True},
|
1178
|
+
}
|
1179
|
+
},
|
1180
|
+
},
|
1135
1181
|
"command": ["metals"],
|
1136
1182
|
"languages": {"scala"},
|
1137
1183
|
},
|
1184
|
+
"mesonlsp": {"command": ["mesonlsp", "--lsp"], "languages": {"meson"}},
|
1138
1185
|
"mint": {"command": ["mint", "ls"], "languages": {"mint"}},
|
1186
|
+
"mojo-lsp": {"command": ["mojo-lsp-server"], "languages": {"mojo"}},
|
1139
1187
|
"nil": {"command": ["nil"], "languages": {"nix"}},
|
1140
1188
|
"nimlangserver": {"command": ["nimlangserver"], "languages": {"nim"}},
|
1189
|
+
"nimlsp": {"command": ["nimlsp"]},
|
1190
|
+
"nixd": {"command": ["nixd"], "languages": {"nix"}},
|
1141
1191
|
"nls": {"command": ["nls"], "languages": {"nickel"}},
|
1142
1192
|
"nu-lsp": {"command": ["nu", "--lsp"], "languages": {"nu"}},
|
1143
1193
|
"ocamllsp": {"command": ["ocamllsp"], "languages": {"ocaml", "ocaml-interface"}},
|
@@ -1150,6 +1200,10 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1150
1200
|
"pasls": {"command": ["pasls"], "languages": {"pascal"}},
|
1151
1201
|
"pbkit": {"command": ["pb", "lsp"], "languages": {"protobuf"}},
|
1152
1202
|
"perlnavigator": {"command": ["perlnavigator", "--stdio"], "languages": {"perl"}},
|
1203
|
+
"pest-language-server": {
|
1204
|
+
"command": ["pest-language-server"],
|
1205
|
+
"languages": {"pest"},
|
1206
|
+
},
|
1153
1207
|
"prisma-language-server": {
|
1154
1208
|
"command": ["prisma-language-server", "--stdio"],
|
1155
1209
|
"languages": {"prisma"},
|
@@ -1158,13 +1212,18 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1158
1212
|
"command": ["purescript-language-server", "--stdio"],
|
1159
1213
|
"languages": {"purescript"},
|
1160
1214
|
},
|
1161
|
-
"pylsp": {"command": ["pylsp"], "languages": {"python"}},
|
1162
|
-
"pyright": {"
|
1215
|
+
"pylsp": {"command": ["pylsp"], "languages": {"snakemake", "python"}},
|
1216
|
+
"pyright": {"config": {}, "command": ["pyright-langserver", "--stdio"]},
|
1217
|
+
"basedpyright": {"config": {}, "command": ["basedpyright-langserver", "--stdio"]},
|
1163
1218
|
"pylyzer": {"command": ["pylyzer", "--server"]},
|
1164
1219
|
"qmlls": {"command": ["qmlls"], "languages": {"qml"}},
|
1220
|
+
"quint-language-server": {
|
1221
|
+
"command": ["quint-language-server", "--stdio"],
|
1222
|
+
"languages": {"quint"},
|
1223
|
+
},
|
1165
1224
|
"r": {
|
1166
1225
|
"command": ["R", "--no-echo", "-e", "languageserver::run()"],
|
1167
|
-
"languages": {"
|
1226
|
+
"languages": {"rmarkdown", "r"},
|
1168
1227
|
},
|
1169
1228
|
"racket": {
|
1170
1229
|
"command": ["racket", "-l", "racket-langserver"],
|
@@ -1176,11 +1235,16 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1176
1235
|
"languages": {"rescript"},
|
1177
1236
|
},
|
1178
1237
|
"robotframework_ls": {"command": ["robotframework_ls"], "languages": {"robot"}},
|
1238
|
+
"ruff": {"command": ["ruff", "server"], "languages": {"python"}},
|
1179
1239
|
"serve-d": {"command": ["serve-d"], "languages": {"d"}},
|
1180
1240
|
"slint-lsp": {"command": ["slint-lsp"], "languages": {"slint"}},
|
1181
1241
|
"solargraph": {"command": ["solargraph", "stdio"], "languages": {"ruby"}},
|
1182
1242
|
"solc": {"command": ["solc", "--lsp"], "languages": {"solidity"}},
|
1183
1243
|
"sourcekit-lsp": {"command": ["sourcekit-lsp"], "languages": {"swift"}},
|
1244
|
+
"spade-language-server": {
|
1245
|
+
"command": ["spade-language-server"],
|
1246
|
+
"languages": {"spade"},
|
1247
|
+
},
|
1184
1248
|
"svlangserver": {"command": ["svlangserver"], "languages": {"verilog"}},
|
1185
1249
|
"swipl": {
|
1186
1250
|
"command": [
|
@@ -1196,6 +1260,7 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1196
1260
|
],
|
1197
1261
|
"languages": {"prolog"},
|
1198
1262
|
},
|
1263
|
+
"superhtml": {"command": ["superhtml", "lsp"], "languages": {"html"}},
|
1199
1264
|
"tailwindcss-ls": {"command": ["tailwindcss-language-server", "--stdio"]},
|
1200
1265
|
"taplo": {"command": ["taplo", "lsp", "stdio"], "languages": {"toml"}},
|
1201
1266
|
"templ": {"command": ["templ", "lsp"], "languages": {"templ"}},
|
@@ -1204,36 +1269,38 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1204
1269
|
"languages": {"tfvars", "hcl"},
|
1205
1270
|
},
|
1206
1271
|
"texlab": {"command": ["texlab"], "languages": {"latex", "bibtex"}},
|
1272
|
+
"typespec": {"command": ["tsp-server", "--stdio"], "languages": {"typespec"}},
|
1207
1273
|
"vala-language-server": {
|
1208
1274
|
"command": ["vala-language-server"],
|
1209
1275
|
"languages": {"vala"},
|
1210
1276
|
},
|
1277
|
+
"vale-ls": {"command": ["vale-ls"]},
|
1211
1278
|
"vhdl_ls": {"command": ["vhdl_ls"], "languages": {"vhdl"}},
|
1212
1279
|
"vlang-language-server": {"command": ["v-analyzer"], "languages": {"v"}},
|
1213
1280
|
"vscode-css-language-server": {
|
1214
|
-
"
|
1281
|
+
"config": {"provideFormatter": True, "css": {"validate": {"enable": True}}},
|
1215
1282
|
"command": ["vscode-css-language-server", "--stdio"],
|
1216
1283
|
"languages": {"scss", "css"},
|
1217
1284
|
},
|
1218
1285
|
"vscode-html-language-server": {
|
1219
|
-
"
|
1286
|
+
"config": {"provideFormatter": True},
|
1220
1287
|
"command": ["vscode-html-language-server", "--stdio"],
|
1221
1288
|
"languages": {"html"},
|
1222
1289
|
},
|
1223
1290
|
"vscode-json-language-server": {
|
1224
|
-
"
|
1291
|
+
"config": {"provideFormatter": True, "json": {"validate": {"enable": True}}},
|
1225
1292
|
"command": ["vscode-json-language-server", "--stdio"],
|
1226
|
-
"languages": {"json"},
|
1293
|
+
"languages": {"jsonc", "json"},
|
1227
1294
|
},
|
1228
1295
|
"vuels": {
|
1229
|
-
"
|
1296
|
+
"config": {"typescript": {"tsdk": "node_modules/typescript/lib/"}},
|
1230
1297
|
"command": ["vue-language-server", "--stdio"],
|
1231
1298
|
"languages": {"vue"},
|
1232
1299
|
},
|
1233
1300
|
"wgsl_analyzer": {"command": ["wgsl_analyzer"], "languages": {"wgsl"}},
|
1234
1301
|
"yaml-language-server": {
|
1235
1302
|
"command": ["yaml-language-server", "--stdio"],
|
1236
|
-
"languages": {"yaml"},
|
1303
|
+
"languages": {"yaml", "docker-compose"},
|
1237
1304
|
},
|
1238
1305
|
"zls": {"command": ["zls"], "languages": {"zig"}},
|
1239
1306
|
"blueprint-compiler": {
|
@@ -1241,12 +1308,22 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1241
1308
|
"languages": {"blueprint"},
|
1242
1309
|
},
|
1243
1310
|
"typst-lsp": {"command": ["typst-lsp"], "languages": {"typst"}},
|
1311
|
+
"tinymist": {"command": ["tinymist"], "languages": {"typst"}},
|
1312
|
+
"pkgbuild-language-server": {
|
1313
|
+
"command": ["pkgbuild-language-server"],
|
1314
|
+
"languages": {"pkgbuild"},
|
1315
|
+
},
|
1316
|
+
"helm_ls": {"command": ["helm_ls", "serve"], "languages": {"helm"}},
|
1317
|
+
"ember-language-server": {
|
1318
|
+
"command": ["ember-language-server", "--stdio"],
|
1319
|
+
"languages": {"gts", "gjs", "glimmer"},
|
1320
|
+
},
|
1244
1321
|
"ansible-language-server": {
|
1245
1322
|
"command": ["ansible-language-server", "--stdio"],
|
1246
1323
|
"languages": {"yaml"},
|
1247
1324
|
},
|
1248
1325
|
"lua-language-server": {
|
1249
|
-
"
|
1326
|
+
"config": {
|
1250
1327
|
"Lua": {
|
1251
1328
|
"hint": {
|
1252
1329
|
"enable": True,
|
@@ -1262,7 +1339,7 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1262
1339
|
"languages": {"lua"},
|
1263
1340
|
},
|
1264
1341
|
"gopls": {
|
1265
|
-
"
|
1342
|
+
"config": {
|
1266
1343
|
"hints": {
|
1267
1344
|
"assignVariableTypes": True,
|
1268
1345
|
"compositeLiteralFields": True,
|
@@ -1273,10 +1350,10 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1273
1350
|
}
|
1274
1351
|
},
|
1275
1352
|
"command": ["gopls"],
|
1276
|
-
"languages": {"
|
1353
|
+
"languages": {"go", "gowork", "gotmpl", "gomod"},
|
1277
1354
|
},
|
1278
1355
|
"golangci-lint-lsp": {
|
1279
|
-
"
|
1356
|
+
"config": {
|
1280
1357
|
"command": [
|
1281
1358
|
"golangci-lint",
|
1282
1359
|
"run",
|
@@ -1289,7 +1366,7 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1289
1366
|
"languages": {"go"},
|
1290
1367
|
},
|
1291
1368
|
"rust-analyzer": {
|
1292
|
-
"
|
1369
|
+
"config": {
|
1293
1370
|
"inlayHints": {
|
1294
1371
|
"bindingModeHints": {"enable": False},
|
1295
1372
|
"closingBraceHints": {"minLines": 10},
|
@@ -1303,7 +1380,7 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1303
1380
|
"languages": {"rust"},
|
1304
1381
|
},
|
1305
1382
|
"typescript-language-server": {
|
1306
|
-
"
|
1383
|
+
"config": {
|
1307
1384
|
"hostInfo": "helix",
|
1308
1385
|
"typescript": {
|
1309
1386
|
"inlayHints": {
|
@@ -1329,10 +1406,10 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1329
1406
|
},
|
1330
1407
|
},
|
1331
1408
|
"command": ["typescript-language-server", "--stdio"],
|
1332
|
-
"languages": {"
|
1409
|
+
"languages": {"jsx", "typescript", "javascript", "tsx"},
|
1333
1410
|
},
|
1334
1411
|
"svelteserver": {
|
1335
|
-
"
|
1412
|
+
"config": {
|
1336
1413
|
"configuration": {
|
1337
1414
|
"typescript": {
|
1338
1415
|
"inlayHints": {
|
@@ -1359,4 +1436,21 @@ KNOWN_LSP_SERVERS: dict[str, dict[str, Any]] = {
|
|
1359
1436
|
"command": ["svelteserver", "--stdio"],
|
1360
1437
|
"languages": {"svelte"},
|
1361
1438
|
},
|
1439
|
+
"vscode-eslint-language-server": {
|
1440
|
+
"config": {
|
1441
|
+
"validate": "on",
|
1442
|
+
"experimental": {"useFlatConfig": False},
|
1443
|
+
"rulesCustomizations": [],
|
1444
|
+
"run": "onType",
|
1445
|
+
"problems": {"shortenToSingleLine": False},
|
1446
|
+
"nodePath": "",
|
1447
|
+
"codeAction": {
|
1448
|
+
"disableRuleComment": {"enable": True, "location": "separateLine"},
|
1449
|
+
"showDocumentation": {"enable": True},
|
1450
|
+
},
|
1451
|
+
"workingDirectory": {"mode": "location"},
|
1452
|
+
},
|
1453
|
+
"command": ["vscode-eslint-language-server", "--stdio"],
|
1454
|
+
"languages": {"gts", "gjs"},
|
1455
|
+
},
|
1362
1456
|
}
|