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

Allow suppressing UI blocking dialogs #2546

Open
wants to merge 27 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
76420cc
add 'show_ui_blocking_message' config
eugenesvk Nov 6, 2024
2a92fc6
allow replacing blocking dialog modals with a status+console message
eugenesvk Nov 6, 2024
81e3567
add 'show_ui_blocking_err_message' config
eugenesvk Nov 6, 2024
f552660
allow replacing blocking error dialog modals with a status+console me…
eugenesvk Nov 6, 2024
1bbcef4
add "see console"
eugenesvk Nov 6, 2024
c0c9ded
use window instead of sublime for message dialogs
eugenesvk Nov 6, 2024
3747b46
use window instead of sublime for error dialogs
eugenesvk Nov 6, 2024
74c0af3
remove ⚠️ for messages (leave ❗ for errors)
eugenesvk Nov 7, 2024
d78e139
combine two blocking options into one suppress_error_dialogs
eugenesvk Nov 7, 2024
96884ff
suppress dialogs by default
eugenesvk Nov 7, 2024
a2743ce
swap logging logick to reflect the settings change
eugenesvk Nov 7, 2024
39f6429
move setting to other
eugenesvk Nov 7, 2024
9d40852
use longer names
eugenesvk Nov 7, 2024
987ce91
add missing window arg
eugenesvk Nov 7, 2024
5b99040
accept optional sublime Window in notify functions
eugenesvk Nov 7, 2024
33ab71f
fix style
eugenesvk Nov 7, 2024
27aa180
remove comments
eugenesvk Nov 27, 2024
d61affa
update type/var name
eugenesvk Nov 27, 2024
726a781
return if no window
eugenesvk Nov 27, 2024
8595bf2
shorten status message to remove LSP
eugenesvk Nov 27, 2024
5ab0e73
moved notification logging functions to a separate file to avoid circ…
eugenesvk Nov 27, 2024
546a8df
consolidate error notification into 1 function
eugenesvk Nov 27, 2024
6bdb715
fix flake8 style
eugenesvk Nov 27, 2024
76a222e
add LSP prefix to console log messages
eugenesvk Nov 27, 2024
52d5ee7
make status message optional
eugenesvk Nov 27, 2024
89c4bd9
remove severity level from log messages
eugenesvk Nov 27, 2024
ac0c301
update default config
eugenesvk Nov 27, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
consolidate error notification into 1 function
with an extra severe argument to downgrade to a non-error modal dialog if needed
eugenesvk committed Nov 27, 2024
commit 546a8df5abfebcf67b37c5c83ee0c8773bc4e8e0
24 changes: 7 additions & 17 deletions plugin/core/logging_notify.py
Original file line number Diff line number Diff line change
@@ -2,28 +2,18 @@
import sublime
from .settings import userprefs


def notify(window: sublime.Window | None, message: str, status_message: str = 'LSP: see console log…') -> None:
"""Pick either of the 2 ways to show a user notification message:
- via a detailed console message and a short status message
- via a blocking modal dialog"""
if not window:
return
if userprefs().suppress_error_dialogs:
window.status_message(status_message)
print(message)
else:
sublime.message_dialog(message)


def notify_error(window: sublime.Window | None, message: str, status_message: str = '❗LSP: see console log…') -> None:
def notify_error(window: sublime.Window | None, message: str, status_message: str = 'LSP: see console log…',
severe: bool = True) -> None:
jwortmann marked this conversation as resolved.
Show resolved Hide resolved
"""Pick either of the 2 ways to show a user error notification message:
- via a detailed console message and a short status message
- via a blocking error modal dialog"""
- via a blocking error modal dialog (with severe=false non-error modal dialog)"""
if not window:
return
if userprefs().suppress_error_dialogs:
window.status_message(status_message)
print(message)
else:
sublime.error_message(message)
if severe:
sublime.error_message(message)
else:
sublime.message_dialog(message)
4 changes: 2 additions & 2 deletions plugin/core/windows.py
Original file line number Diff line number Diff line change
@@ -7,7 +7,7 @@
from .diagnostics_storage import is_severity_included
from .logging import debug
from .logging import exception_log
from .logging_notify import notify
from .logging_notify import notify_error
from .message_request_handler import MessageRequestHandler
from .panels import LOG_LINES_LIMIT_SETTING_NAME
from .panels import MAX_LOG_LINES_LIMIT_OFF
@@ -302,7 +302,7 @@ def start_async(self, config: ClientConfig, initiating_view: sublime.View) -> No
print("Server output:\n{}".format(e.output.decode('utf-8', 'replace')))
self._config_manager.disable_config(config.name, only_for_session=True)
config.erase_view_status(initiating_view)
notify(self._window, message, status)
notify_error(self._window, message, status)
# Continue with handling pending listeners
self._new_session = None
sublime.set_timeout_async(self._dequeue_listener_async)
6 changes: 3 additions & 3 deletions plugin/core/workspace.py
Original file line number Diff line number Diff line change
@@ -4,7 +4,7 @@
from .types import matches_pattern
from .types import sublime_pattern_to_glob
from .url import filename_to_uri
from .logging_notify import notify
from .logging_notify import notify_error
from typing import Any
import sublime
import os
@@ -149,7 +149,7 @@ def enable_in_project(window: sublime.Window, config_name: str) -> None:
else:
message = f"Can't enable {config_name} in the current workspace. Ensure that the project is saved first."
status = f"Can't enable {config_name} in this workspace… See console"
notify(window, message, status)
notify_error(window, message, status)


def disable_in_project(window: sublime.Window, config_name: str) -> None:
@@ -163,4 +163,4 @@ def disable_in_project(window: sublime.Window, config_name: str) -> None:
else:
message = f"Can't disable {config_name} in the current workspace. Ensure that the project is saved first."
status = f"Can't enable {config_name} in this workspace… See console"
notify(window, message, status)
notify_error(window, message, status)
4 changes: 2 additions & 2 deletions plugin/execute_command.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from __future__ import annotations
from .core.logging_notify import notify
from .core.logging_notify import notify_error
from .core.protocol import Error
from .core.protocol import ExecuteCommandParams
from .core.registry import LspTextCommand
@@ -61,7 +61,7 @@ def handle_error_async(self, error: Error, command_name: str) -> None:
"""
message = f"command {command_name} failed. Reason: {str(error)}"
status = f"{command_name} failed… See console"
notify(self.view.window(), message, status)
notify_error(self.view.window(), message, status)

def _expand_variables(self, command_args: list[Any]) -> list[Any]:
view = self.view
3 changes: 1 addition & 2 deletions plugin/tooling.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from __future__ import annotations
from .core.css import css
from .core.logging import debug
from .core.logging_notify import notify
from .core.logging_notify import notify_error
from .core.registry import windows
from .core.sessions import get_plugin
@@ -313,7 +312,7 @@ def run(self) -> None:
view = wm.window.active_view()
if not view:
message = 'Troubleshooting must be run with a file opened'
notify(self.window, message, message)
notify_error(self.window, message, message)
return
active_view = view
configs = wm.get_config_manager().get_configs()