Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/src/migrating_to_lsp_plugin.md
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ from LSP.plugin import uri_handler
def on_open_foo_uri(self, uri: DocumentUri, flags: sublime.NewFileFlags) -> Promise[sublime.Sheet | None]:
title, content, syntax = render_foo_uri(uri)
if session := self.weaksession():
return session.open_scratch_buffer(title, content, syntax, uri, None, flags)
return session.open_scratch_buffer(title, content, syntax, flags).then(lambda view: view.sheet())
return Promise.resolve(None)
```

Expand Down
37 changes: 17 additions & 20 deletions plugin/core/sessions.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,7 @@
from typing import Union
from typing_extensions import TypeAlias
from typing_extensions import TypeGuard
from urllib.parse import urldefrag
from weakref import WeakSet
import itertools
import mdpopups
Expand Down Expand Up @@ -1520,32 +1521,29 @@ def _open_uri_with_plugin_async(
group: int,
) -> Promise[sublime.View | None] | None:
# I cannot type-hint an unpacked tuple
pair: PackagedTask[tuple[str | None, str, str]] = Promise.packaged_task()
pair: PackagedTask[tuple[str, str, str]] = Promise.packaged_task()
promise, resolve = pair
# It'd be nice to have automatic tuple unpacking continuations
callback = lambda a, b, c: pair[1]((a, b, c)) # noqa: E731
callback = lambda a, b, c: resolve((a or 'untitled', b, c)) # noqa: E731
if plugin.on_open_uri_async(uri, callback):
result: PackagedTask[sublime.View | None] = Promise.packaged_task()
pair[0].then(lambda tup: self.open_scratch_buffer(*tup, uri, r, flags, group)).then(result[1])
return result[0]
return promise.then(lambda tup: self.open_scratch_buffer(*tup, flags, group)) \
.then(lambda view: self._on_sheet_opened(view.sheet(), uri, r))
# resolve unused promise
resolve(('', '', ''))
return None
Comment on lines 1522 to 1533
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two PackagedTask's were unnecessary - one is enough.


def open_scratch_buffer(
self,
title: str | None,
title: str,
content: str,
syntax: str,
uri: DocumentUri,
r: Range | None,
flags: sublime.NewFileFlags = sublime.NewFileFlags.NONE,
group: int = -1,
) -> Promise[sublime.View | None]:
task: PackagedTask[sublime.View | None] = Promise.packaged_task()
) -> Promise[sublime.View]:
task: PackagedTask[sublime.View] = Promise.packaged_task()
promise, resolve = task

def continue_on_main_thread() -> None:
if title is None:
resolve(None)
return
if group > -1:
self.window.focus_group(group)
view = self.window.new_file(syntax=syntax, flags=flags)
Expand All @@ -1555,20 +1553,19 @@ def continue_on_main_thread() -> None:
view.set_name(title)
view.run_command("append", {"characters": content})
view.set_read_only(True)
self._on_sheet_opened(view.sheet(), uri, r).then(resolve)
resolve(view)

sublime.set_timeout(continue_on_main_thread)
return promise

def _on_sheet_opened(
self, sheet: sublime.Sheet | None, uri: DocumentUri, r: Range | None
) -> Promise[sublime.View | None]:
def _on_sheet_opened(self, sheet: sublime.Sheet | None, uri: DocumentUri, r: Range | None) -> sublime.View | None:
if sheet and (view := sheet.view()):
view.settings().set('lsp_uri', uri) # Preserve original URI given by the language server
uri_no_fragment = urldefrag(uri).url
view.settings().set('lsp_uri', uri_no_fragment)
if r:
center_selection(view, r)
return Promise.resolve(view)
return Promise.resolve(None)
return view
return None

def open_location_async(
self,
Expand Down
Loading