diff --git a/notification.css b/notification.css index 0c6ac9bcc..4d2883489 100644 --- a/notification.css +++ b/notification.css @@ -2,14 +2,15 @@ margin: 0.5rem; padding: 1rem; } -.notification .message { - margin-top: 1rem; - margin-bottom: 3rem; + +.notification h2 { + margin-bottom: 1rem; } .notification .actions a { - text-decoration: none; - padding: 0.5rem; border: 2px solid color(var(--foreground) alpha(0.25)); color: var(--foreground); + margin-top: 3rem; + padding: 0.5rem; + text-decoration: none; } diff --git a/plugin/core/message_request_handler.py b/plugin/core/message_request_handler.py index 1329860b9..8c6fb1677 100644 --- a/plugin/core/message_request_handler.py +++ b/plugin/core/message_request_handler.py @@ -1,75 +1,59 @@ +from .protocol import MessageType from .protocol import Response +from .protocol import ShowMessageRequestParams from .sessions import Session -from .typing import Any, List, Callable +from .typing import Any, Dict, List from .views import show_lsp_popup +from .views import text2html import sublime +ICONS = { + MessageType.Error: '❗', + MessageType.Warning: '⚠️', + MessageType.Info: 'ℹ️', + MessageType.Log: '📝' +} # type: Dict[MessageType, str] + + class MessageRequestHandler(): - def __init__(self, view: sublime.View, session: Session, request_id: Any, params: dict, source: str) -> None: + def __init__( + self, view: sublime.View, session: Session, request_id: Any, params: ShowMessageRequestParams, source: str + ) -> None: self.session = session self.request_id = request_id self.request_sent = False self.view = view self.actions = params.get("actions", []) - self.titles = list(action.get("title") for action in self.actions) - self.message = params.get('message', '') + self.action_titles = list(action.get("title") for action in self.actions) + self.message = params['message'] self.message_type = params.get('type', 4) self.source = source - def _send_user_choice(self, href: int = -1) -> None: - if not self.request_sent: - self.request_sent = True - self.view.hide_popup() - # when noop; nothing was selected e.g. the user pressed escape - param = None - index = int(href) - if index != -1: - param = self.actions[index] - response = Response(self.request_id, param) - self.session.send_response(response) - def show(self) -> None: - show_notification( + formatted = [] # type: List[str] + formatted.append("
" + " ".join(buttons) + "
") - - return "".join(formatted) - - -def show_notification(view: sublime.View, source: str, message_type: int, message: str, titles: List[str], - on_navigate: Callable, on_hide: Callable) -> None: - stylesheet = sublime.load_resource("Packages/LSP/notification.css") - contents = message_content(source, message_type, message, titles) - show_lsp_popup( - view, - contents, - css=stylesheet, - wrapper_class='notification', - on_navigate=on_navigate, - on_hide=on_hide) + def _send_user_choice(self, href: int = -1) -> None: + if self.request_sent: + return + self.request_sent = True + self.view.hide_popup() + index = int(href) + param = self.actions[index] if index != -1 else None + response = Response(self.request_id, param) + self.session.send_response(response) diff --git a/plugin/core/views.py b/plugin/core/views.py index 5221f0fbf..a55d1a239 100644 --- a/plugin/core/views.py +++ b/plugin/core/views.py @@ -610,9 +610,17 @@ def text_document_code_action_params( LSP_POPUP_SPACER_HTML = '' -def show_lsp_popup(view: sublime.View, contents: str, location: int = -1, md: bool = False, flags: int = 0, - css: Optional[str] = None, wrapper_class: Optional[str] = None, - on_navigate: Optional[Callable] = None, on_hide: Optional[Callable] = None) -> None: +def show_lsp_popup( + view: sublime.View, + contents: str, + location: int = -1, + md: bool = False, + flags: int = 0, + css: Optional[str] = None, + wrapper_class: Optional[str] = None, + on_navigate: Optional[Callable[..., None]] = None, + on_hide: Optional[Callable[..., None]] = None +) -> None: css = css if css is not None else lsp_css().popups wrapper_class = wrapper_class if wrapper_class is not None else lsp_css().popups_classname contents += LSP_POPUP_SPACER_HTML