Repository: spyder-ide/spyder

Issue:
No handler for workspace/executeCommand request
<!--- **PLEASE READ:** When submitting here, please ensure you've completed the following checklist and checked the boxes to confirm. Issue reports without it may be closed. Thanks! --->

### Issue Report Checklist

* [x] Searched the [issues page](https://github.com/spyder-ide/spyder/issues?q=is%3Aissue) for similar reports
* [x] Read the relevant sections of the [Spyder Troubleshooting Guide](https://github.com/spyder-ide/spyder/wiki/Troubleshooting-Guide-and-FAQ) and followed its advice
* [x] Reproduced the issue after updating with ``conda update spyder`` (or ``pip``, if not using Anaconda)
* [ ] Could not reproduce inside ``jupyter qtconsole`` (if console-related)
* [ ] Tried basic troubleshooting (if a bug/error)
    * [ ] Restarted Spyder
    * [ ] Reset preferences with ``spyder --reset``
    * [ ] Reinstalled the latest version of [Anaconda](https://www.anaconda.com/download/)
    * [x] Tried the other applicable steps from the Troubleshooting Guide
* [x] Completed the **Problem Description**, **Steps to Reproduce** and **Version** sections below


## Problem Description

When a ``workspace/executeCommand`` request is made to the completions plugin, the spyder doesn't handle the response from the executed command. This unexpected behavior happens due to the fact that there is no handler method defined for this request as the spyder's LSP completion plugin architecture requires.

### What steps reproduce the problem?

1.  Make a ``workspace/executeCommand`` request with a command to the completion plugin to a language server that sends the response from the command;
2. Spyder ignores the response.

### What is the expected output? What do you see instead?

It is expected that the spyder allows catching the response for the executed command as specified by the [Language Server Protocol](https://microsoft.github.io/language-server-protocol/specifications/specification-current/):

> The arguments are typically specified when a command is returned from the server to the client. Example requests that return a command are textDocument/codeAction or textDocument/codeLens.  <br><br>*Response*:  <br>* result: ``any`` | ``null``  <br>* error: code and message set in case an exception happens during the request. 


## Versions
<!--- You can get this information from Help > About Spyder...
or (if Spyder won't launch) the "conda list" command
from the Anaconda Prompt/Terminal/command line. --->

* Spyder version: 5.1.1 None
* Python version: 3.8.11 64-bit
* Qt version: 5.12.10
* PyQt5 version: 5.12.3
* Operating System: Windows 10

### Dependencies
<!--- Please go to the menu entry Help > Dependencies,
press the Copy to clipboard button and paste below --->

```

# Mandatory:
atomicwrites >=1.2.0              :  1.4.0 (OK)
chardet >=2.0.0                   :  4.0.0 (OK)
cloudpickle >=0.5.0               :  1.6.0 (OK)
cookiecutter >=1.6.0              :  1.7.3 (OK)
diff_match_patch >=20181111       :  20200713 (OK)
intervaltree >=3.0.2              :  3.1.0 (OK)
IPython >=7.6.0                   :  7.27.0 (OK)
jedi >=0.17.2;<0.19.0             :  0.18.0 (OK)
jsonschema >=3.2.0                :  3.2.0 (OK)
keyring >=17.0.0                  :  23.1.0 (OK)
nbconvert >=4.0                   :  6.1.0 (OK)
numpydoc >=0.6.0                  :  1.1.0 (OK)
paramiko >=2.4.0                  :  2.7.2 (OK)
parso >=0.7.0;<0.9.0              :  0.8.2 (OK)
pexpect >=4.4.0                   :  4.8.0 (OK)
pickleshare >=0.4                 :  0.7.5 (OK)
psutil >=5.3                      :  5.8.0 (OK)
pygments >=2.0                    :  2.10.0 (OK)
pylint >=2.5.0                    :  2.10.2 (OK)
pyls_spyder >=0.4.0               :  0.4.0 (OK)
pylsp >=1.2.1;<1.3.0              :  1.2.1 (OK)
pylsp_black >=1.0.0               :  None (OK)
qdarkstyle =3.0.2                 :  3.0.2 (OK)
qstylizer >=0.1.10                :  0.2.1 (OK)
qtawesome >=1.0.2                 :  1.0.3 (OK)
qtconsole >=5.1.0                 :  5.1.1 (OK)
qtpy >=1.5.0                      :  1.10.0 (OK)
rtree >=0.9.7                     :  0.9.7 (OK)
setuptools >=49.6.0               :  52.0.0.post20210125 (OK)
sphinx >=0.6.6                    :  4.1.2 (OK)
spyder_kernels >=2.1.0;<2.2.0     :  2.1.0 (OK)
textdistance >=4.2.0              :  4.2.1 (OK)
three_merge >=0.1.1               :  0.1.1 (OK)
watchdog >=0.10.3                 :  2.1.5 (OK)
zmq >=17                          :  22.2.1 (OK)

# Optional:
cython >=0.21                     :  None (OK)
matplotlib >=2.0.0                :  None (OK)
numpy >=1.7                       :  1.21.2 (OK)
pandas >=1.1.1                    :  1.3.2 (OK)
scipy >=0.17.0                    :  1.7.1 (OK)
sympy >=0.7.3                     :  1.8 (OK)

# Spyder plugins:
spyder_f_language.plugin 1.4.dev0 :  1.4.dev (OK)

```



Discussion:

Resolving patch:
diff --git a/spyder/plugins/completion/providers/languageserver/providers/workspace.py b/spyder/plugins/completion/providers/languageserver/providers/workspace.py
--- a/spyder/plugins/completion/providers/languageserver/providers/workspace.py
+++ b/spyder/plugins/completion/providers/languageserver/providers/workspace.py
@@ -136,6 +136,16 @@ def send_execute_command(self, params):
         }
         return params
 
+    @handles(CompletionRequestTypes.WORKSPACE_EXECUTE_COMMAND)
+    def handle_execute_command_response(self, response, req_id):
+        if req_id in self.req_reply:
+            self.req_reply[req_id](
+                CompletionRequestTypes.WORKSPACE_EXECUTE_COMMAND,
+                {'params': response}
+            )
+
+        return response
+
     @send_response(method=CompletionRequestTypes.WORKSPACE_APPLY_EDIT)
     def send_edit_response(self, edits):
         params = {


Test patch: