fix(python): HTTP request from pip-requirements-mode

pip-requirements-mode fetches the pypi.org package list via HTTP
request, which blocks. This can sometimes take unbearably long in cases
where the user has a slow or no internet connection.

This fix defers this behavior until the first time completion is
invoked.

Fix: #5998
This commit is contained in:
Henrik Lissner 2022-04-16 02:57:21 +02:00
parent f7e127af58
commit 04b76fd0ce
No known key found for this signature in database
GPG key ID: B60957CA074D39A3

View file

@ -311,6 +311,24 @@
:after cython-mode)
(use-package! pip-requirements
:defer t
:config
;; HACK `pip-requirements-mode' performs a sudden HTTP request to
;; https://pypi.org/simple, which causes unexpected hangs (see #5998). This
;; advice defers this behavior until the first time completion is invoked.
;; REVIEW More sensible behavior should be PRed upstream.
(defadvice! +python--init-completion-a (&rest args)
"Call `pip-requirements-fetch-packages' first time completion is invoked."
:before #'pip-requirements-complete-at-point
(unless pip-packages (pip-requirements-fetch-packages)))
(defadvice! +python--inhibit-pip-requirements-fetch-packages-a (fn &rest args)
"No-op `pip-requirements-fetch-packages', which can be expensive."
:around #'pip-requirements-mode
(letf ((#'pip-requirements-fetch-packages #'ignore))
(apply fn args))))
;;
;;; LSP