unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Eglot tests on EMBA
@ 2023-03-15 12:09 Michael Albinus
  2023-03-29 14:34 ` Michael Albinus
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Albinus @ 2023-03-15 12:09 UTC (permalink / raw)
  To: emacs-devel

Hi,

FTR, I have changed test/infra/Dockerfile.emba to install also clangd on
the server. This shall enable some of the Eglot tests, which are skipped
at all ATM. Pushed to the emacs-29 branch.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-15 12:09 Eglot tests on EMBA Michael Albinus
@ 2023-03-29 14:34 ` Michael Albinus
  2023-03-29 14:46   ` João Távora
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Albinus @ 2023-03-29 14:34 UTC (permalink / raw)
  To: emacs-devel; +Cc: João Távora

Michael Albinus <michael.albinus@gmx.de> writes:

Hi,

> FTR, I have changed test/infra/Dockerfile.emba to install also clangd on
> the server. This shall enable some of the Eglot tests, which are skipped
> at all ATM. Pushed to the emacs-29 branch.

This has been extended for the master branch. On EMBA, there are now two
jobs build-image-eglot and test-eglot, which run in every scheduled
pipeline for the master branch. See for example
<https://emba.gnu.org/emacs/emacs/-/jobs/65322> and
<https://emba.gnu.org/emacs/emacs/-/jobs/65324>. The result,
eglot-tests.log from the latter job, can be retrieved as artifact via
<https://emba.gnu.org/emacs/emacs/-/jobs/65324/artifacts/download>.

While 36 (of 50) tests pass, we have also one failing and 13 skipped jobs:

--8<---------------cut here---------------start------------->8---
Ran 50 tests, 36 results as expected, 1 unexpected, 13 skipped (2023-03-29 14:07:00+0000, 75.388590 sec)

1 unexpected results:
   FAILED  eglot-test-multiline-eldoc  "eglot--tests-force-full-eldoc didn't deliver"

13 skipped results:
  SKIPPED  eglot-test-eclipse-connect  ((skip-unless (executable-find "jdtls")) :form (executable-find "jdtls") :value nil)
  SKIPPED  eglot-test-javascript-basic  ((skip-unless (and (executable-find "typescript-language-server") (executable-find "tsserver"))) :form (and (executable-find "typescript-language-server") (executable-find "tsserver")) :value nil)
  SKIPPED  eglot-test-json-basic  ((skip-unless (executable-find "vscode-json-languageserver")) :form (executable-find "vscode-json-languageserver") :value nil)
  SKIPPED  eglot-test-path-to-uri-windows  ((skip-unless (eq system-type 'windows-nt)) :form (eq gnu/linux windows-nt) :value nil)
  SKIPPED  eglot-test-project-wide-diagnostics-rust-analyzer  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
  SKIPPED  eglot-test-project-wide-diagnostics-typescript  ((skip-unless (and (executable-find "typescript-language-server") (executable-find "tsserver"))) :form (and (executable-find "typescript-language-server") (executable-find "tsserver")) :value nil)
  SKIPPED  eglot-test-python-autopep-formatting  ((skip-unless (and (executable-find "pylsp") (executable-find "autopep8"))) :form (and (executable-find "pylsp") (executable-find "autopep8")) :value nil)
  SKIPPED  eglot-test-python-yapf-formatting  ((skip-unless (and (executable-find "pylsp") (not (executable-find "autopep8")) (or (executable-find "yapf") (executable-find "yapf3")))) :form (and (executable-find "pylsp") (not (executable-find "autopep8")) (or (executable-find "yapf") (executable-find "yapf3"))) :value nil)
  SKIPPED  eglot-test-rust-analyzer-hover-after-edit  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
  SKIPPED  eglot-test-rust-analyzer-watches-files  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
  SKIPPED  eglot-test-rust-on-type-formatting  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
  SKIPPED  eglot-test-snippet-completions  ((skip-unless (and (executable-find "pylsp") (functionp 'yas-minor-mode))) :form (and (executable-find "pylsp") (functionp 'yas-minor-mode)) :value nil)
  SKIPPED  eglot-test-snippet-completions-with-company  ((skip-unless (and (executable-find "pylsp") (functionp 'yas-minor-mode) (functionp 'company-complete))) :form (and (executable-find "pylsp") (functionp 'yas-minor-mode) (functionp 'company-complete)) :value nil)
--8<---------------cut here---------------end--------------->8---

Could somebody check why the test eglot-test-multiline-eldoc fails? And
are there recipes how to install the missing dependencies in Debian
bullseye, in order to activate the missing tests? I've digged for
recipes of clangd and pylisp (see test/infra/Dockerfile.emba target
emacs-eglot); doing it for the other dependencies would be too much for
me.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-29 14:34 ` Michael Albinus
@ 2023-03-29 14:46   ` João Távora
  2023-03-30 12:45     ` João Távora
  0 siblings, 1 reply; 10+ messages in thread
From: João Távora @ 2023-03-29 14:46 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

[-- Attachment #1: Type: text/plain, Size: 4474 bytes --]

I can check the eldoc/eglot tests later, looks like I introduced it in a
recent commit and the test might need updating.

João

On Wed, Mar 29, 2023, 15:34 Michael Albinus <michael.albinus@gmx.de> wrote:

> Michael Albinus <michael.albinus@gmx.de> writes:
>
> Hi,
>
> > FTR, I have changed test/infra/Dockerfile.emba to install also clangd on
> > the server. This shall enable some of the Eglot tests, which are skipped
> > at all ATM. Pushed to the emacs-29 branch.
>
> This has been extended for the master branch. On EMBA, there are now two
> jobs build-image-eglot and test-eglot, which run in every scheduled
> pipeline for the master branch. See for example
> <https://emba.gnu.org/emacs/emacs/-/jobs/65322> and
> <https://emba.gnu.org/emacs/emacs/-/jobs/65324>. The result,
> eglot-tests.log from the latter job, can be retrieved as artifact via
> <https://emba.gnu.org/emacs/emacs/-/jobs/65324/artifacts/download>.
>
> While 36 (of 50) tests pass, we have also one failing and 13 skipped jobs:
>
> --8<---------------cut here---------------start------------->8---
> Ran 50 tests, 36 results as expected, 1 unexpected, 13 skipped (2023-03-29
> 14:07:00+0000, 75.388590 sec)
>
> 1 unexpected results:
>    FAILED  eglot-test-multiline-eldoc  "eglot--tests-force-full-eldoc
> didn't deliver"
>
> 13 skipped results:
>   SKIPPED  eglot-test-eclipse-connect  ((skip-unless (executable-find
> "jdtls")) :form (executable-find "jdtls") :value nil)
>   SKIPPED  eglot-test-javascript-basic  ((skip-unless (and
> (executable-find "typescript-language-server") (executable-find
> "tsserver"))) :form (and (executable-find "typescript-language-server")
> (executable-find "tsserver")) :value nil)
>   SKIPPED  eglot-test-json-basic  ((skip-unless (executable-find
> "vscode-json-languageserver")) :form (executable-find
> "vscode-json-languageserver") :value nil)
>   SKIPPED  eglot-test-path-to-uri-windows  ((skip-unless (eq system-type
> 'windows-nt)) :form (eq gnu/linux windows-nt) :value nil)
>   SKIPPED  eglot-test-project-wide-diagnostics-rust-analyzer
> ((skip-unless (executable-find "rust-analyzer")) :form (executable-find
> "rust-analyzer") :value nil)
>   SKIPPED  eglot-test-project-wide-diagnostics-typescript  ((skip-unless
> (and (executable-find "typescript-language-server") (executable-find
> "tsserver"))) :form (and (executable-find "typescript-language-server")
> (executable-find "tsserver")) :value nil)
>   SKIPPED  eglot-test-python-autopep-formatting  ((skip-unless (and
> (executable-find "pylsp") (executable-find "autopep8"))) :form (and
> (executable-find "pylsp") (executable-find "autopep8")) :value nil)
>   SKIPPED  eglot-test-python-yapf-formatting  ((skip-unless (and
> (executable-find "pylsp") (not (executable-find "autopep8")) (or
> (executable-find "yapf") (executable-find "yapf3")))) :form (and
> (executable-find "pylsp") (not (executable-find "autopep8")) (or
> (executable-find "yapf") (executable-find "yapf3"))) :value nil)
>   SKIPPED  eglot-test-rust-analyzer-hover-after-edit  ((skip-unless
> (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer")
> :value nil)
>   SKIPPED  eglot-test-rust-analyzer-watches-files  ((skip-unless
> (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer")
> :value nil)
>   SKIPPED  eglot-test-rust-on-type-formatting  ((skip-unless
> (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer")
> :value nil)
>   SKIPPED  eglot-test-snippet-completions  ((skip-unless (and
> (executable-find "pylsp") (functionp 'yas-minor-mode))) :form (and
> (executable-find "pylsp") (functionp 'yas-minor-mode)) :value nil)
>   SKIPPED  eglot-test-snippet-completions-with-company  ((skip-unless (and
> (executable-find "pylsp") (functionp 'yas-minor-mode) (functionp
> 'company-complete))) :form (and (executable-find "pylsp") (functionp
> 'yas-minor-mode) (functionp 'company-complete)) :value nil)
> --8<---------------cut here---------------end--------------->8---
>
> Could somebody check why the test eglot-test-multiline-eldoc fails? And
> are there recipes how to install the missing dependencies in Debian
> bullseye, in order to activate the missing tests? I've digged for
> recipes of clangd and pylisp (see test/infra/Dockerfile.emba target
> emacs-eglot); doing it for the other dependencies would be too much for
> me.
>
> Best regards, Michael.
>

[-- Attachment #2: Type: text/html, Size: 5766 bytes --]

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-29 14:46   ` João Távora
@ 2023-03-30 12:45     ` João Távora
  2023-03-31 10:31       ` Michael Albinus
  0 siblings, 1 reply; 10+ messages in thread
From: João Távora @ 2023-03-30 12:45 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

Michael, eglot-test-multiline-eldoc doesn't fail locally for me (or
in the GitHub CI system (https://github.com/joaotavora/eglot/actions)
though that is not running master.

After reading the logs,  I think it comes down to how you installed
pylsp on EMBA.   I think you should do it with

   pip install "python-lsp-server[all]"

which install its "providers", which are some type of contribs.

We could have code in eglot-tests.el to check if these "providers"
are installed into pylsp, but I think it's better to just install
pylsp like I provided, and start thinking of some other less
problematic server for these tests.

Maybe move the test to clangd.  I think it would be equally
valid.  But I've not made up my mind if Eglot tests should test
a wide or narrow field of language servers.  Opinions welcome.

João

On Wed, Mar 29, 2023 at 3:46 PM João Távora <joaotavora@gmail.com> wrote:
>
> I can check the eldoc/eglot tests later, looks like I introduced it in a recent commit and the test might need updating.
>
> João
>
> On Wed, Mar 29, 2023, 15:34 Michael Albinus <michael.albinus@gmx.de> wrote:
>>
>> Michael Albinus <michael.albinus@gmx.de> writes:
>>
>> Hi,
>>
>> > FTR, I have changed test/infra/Dockerfile.emba to install also clangd on
>> > the server. This shall enable some of the Eglot tests, which are skipped
>> > at all ATM. Pushed to the emacs-29 branch.
>>
>> This has been extended for the master branch. On EMBA, there are now two
>> jobs build-image-eglot and test-eglot, which run in every scheduled
>> pipeline for the master branch. See for example
>> <https://emba.gnu.org/emacs/emacs/-/jobs/65322> and
>> <https://emba.gnu.org/emacs/emacs/-/jobs/65324>. The result,
>> eglot-tests.log from the latter job, can be retrieved as artifact via
>> <https://emba.gnu.org/emacs/emacs/-/jobs/65324/artifacts/download>.
>>
>> While 36 (of 50) tests pass, we have also one failing and 13 skipped jobs:
>>
>> --8<---------------cut here---------------start------------->8---
>> Ran 50 tests, 36 results as expected, 1 unexpected, 13 skipped (2023-03-29 14:07:00+0000, 75.388590 sec)
>>
>> 1 unexpected results:
>>    FAILED  eglot-test-multiline-eldoc  "eglot--tests-force-full-eldoc didn't deliver"
>>
>> 13 skipped results:
>>   SKIPPED  eglot-test-eclipse-connect  ((skip-unless (executable-find "jdtls")) :form (executable-find "jdtls") :value nil)
>>   SKIPPED  eglot-test-javascript-basic  ((skip-unless (and (executable-find "typescript-language-server") (executable-find "tsserver"))) :form (and (executable-find "typescript-language-server") (executable-find "tsserver")) :value nil)
>>   SKIPPED  eglot-test-json-basic  ((skip-unless (executable-find "vscode-json-languageserver")) :form (executable-find "vscode-json-languageserver") :value nil)
>>   SKIPPED  eglot-test-path-to-uri-windows  ((skip-unless (eq system-type 'windows-nt)) :form (eq gnu/linux windows-nt) :value nil)
>>   SKIPPED  eglot-test-project-wide-diagnostics-rust-analyzer  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
>>   SKIPPED  eglot-test-project-wide-diagnostics-typescript  ((skip-unless (and (executable-find "typescript-language-server") (executable-find "tsserver"))) :form (and (executable-find "typescript-language-server") (executable-find "tsserver")) :value nil)
>>   SKIPPED  eglot-test-python-autopep-formatting  ((skip-unless (and (executable-find "pylsp") (executable-find "autopep8"))) :form (and (executable-find "pylsp") (executable-find "autopep8")) :value nil)
>>   SKIPPED  eglot-test-python-yapf-formatting  ((skip-unless (and (executable-find "pylsp") (not (executable-find "autopep8")) (or (executable-find "yapf") (executable-find "yapf3")))) :form (and (executable-find "pylsp") (not (executable-find "autopep8")) (or (executable-find "yapf") (executable-find "yapf3"))) :value nil)
>>   SKIPPED  eglot-test-rust-analyzer-hover-after-edit  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
>>   SKIPPED  eglot-test-rust-analyzer-watches-files  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
>>   SKIPPED  eglot-test-rust-on-type-formatting  ((skip-unless (executable-find "rust-analyzer")) :form (executable-find "rust-analyzer") :value nil)
>>   SKIPPED  eglot-test-snippet-completions  ((skip-unless (and (executable-find "pylsp") (functionp 'yas-minor-mode))) :form (and (executable-find "pylsp") (functionp 'yas-minor-mode)) :value nil)
>>   SKIPPED  eglot-test-snippet-completions-with-company  ((skip-unless (and (executable-find "pylsp") (functionp 'yas-minor-mode) (functionp 'company-complete))) :form (and (executable-find "pylsp") (functionp 'yas-minor-mode) (functionp 'company-complete)) :value nil)
>> --8<---------------cut here---------------end--------------->8---
>>
>> Could somebody check why the test eglot-test-multiline-eldoc fails? And
>> are there recipes how to install the missing dependencies in Debian
>> bullseye, in order to activate the missing tests? I've digged for
>> recipes of clangd and pylisp (see test/infra/Dockerfile.emba target
>> emacs-eglot); doing it for the other dependencies would be too much for
>> me.
>>
>> Best regards, Michael.



-- 
João Távora



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-30 12:45     ` João Távora
@ 2023-03-31 10:31       ` Michael Albinus
  2023-03-31 10:50         ` João Távora
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Albinus @ 2023-03-31 10:31 UTC (permalink / raw)
  To: João Távora; +Cc: emacs-devel

João Távora <joaotavora@gmail.com> writes:

Hi João,

> After reading the logs,  I think it comes down to how you installed
> pylsp on EMBA.   I think you should do it with
>
>    pip install "python-lsp-server[all]"
>
> which install its "providers", which are some type of contribs.

I'm not happy with this. EMBA installs a conservative list of software;
they shall be available as Debian bullseye package.

Since Debian bullseye does not offer the package python3-pylsp (which
will be available with a later Debian release), I install on EMBA
python3-pyls. This shall be sufficient, because (according to
eglot-server-programs) "pyls" is supported.

eglot-tests.el does not dertect this, it checks only for "pylsp". I
believe this shall be changed, the check shall be for all alternatives
configured in eglot-server-programs. And not only for python, but also
for other languages.

Because of this deficiency, I run "ln -s /usr/bin/pyls /usr/bin/pylsp"
on EMBA. But I dislike it.

> We could have code in eglot-tests.el to check if these "providers"
> are installed into pylsp, but I think it's better to just install
> pylsp like I provided, and start thinking of some other less
> problematic server for these tests.

Hmm, again, I don't believe we shall adapt everything just that the
tests run. It must be the other direction: eglot-tests must check the
environment, and do what's possible. You cannot always assume that
people are using bleeding edge software. It is a valid assumption, that
people use stable distributions, like Debian bullseye.

I have no idea what is needed internally, but Debian bullseye offers
also the packages

--8<---------------cut here---------------start------------->8---
Package python3-pyls-black
    bullseye (stable) (python): Black plugin for the Python Language Server
    0.4.6-3: all

Package python3-pyls-jsonrpc
    bullseye (stable) (python): Python server implementation of the JSON RPC 2.0 protocol
    0.4.0-2: all

Package python3-pyls-spyder
    bullseye (stable) (python): Spyder plugin for the Python Language Server
    0.3.0-3: all
--8<---------------cut here---------------end--------------->8---

Is there something we shall install?

> Maybe move the test to clangd.  I think it would be equally
> valid.  But I've not made up my mind if Eglot tests should test
> a wide or narrow field of language servers.  Opinions welcome.

Your decision.

> João

Best regards, Michael.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-31 10:31       ` Michael Albinus
@ 2023-03-31 10:50         ` João Távora
  2023-03-31 12:14           ` Michael Albinus
  0 siblings, 1 reply; 10+ messages in thread
From: João Távora @ 2023-03-31 10:50 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

On Fri, Mar 31, 2023 at 11:31 AM Michael Albinus <michael.albinus@gmx.de> wrote:
>
> João Távora <joaotavora@gmail.com> writes:
>
> Hi João,
>
> > After reading the logs,  I think it comes down to how you installed
> > pylsp on EMBA.   I think you should do it with
> >
> >    pip install "python-lsp-server[all]"
> >
> > which install its "providers", which are some type of contribs.
>
> I'm not happy with this. EMBA installs a conservative list of software;
> they shall be available as Debian bullseye package.

Then you should complain to Debian and uninstall pylsp on EMBA is the
meantime.

> Since Debian bullseye does not offer the package python3-pylsp (which
> will be available with a later Debian release), I install on EMBA
> python3-pyls. This shall be sufficient, because (according to
> eglot-server-programs) "pyls" is supported.
>
> eglot-tests.el does not dertect this, it checks only for "pylsp". I
> believe this shall be changed,

No, it shan't :-) I'm not even sure how to do so portably.

Just undo your installation of pylsp on EMBA and I'll look
into replacing that test with some other language server.

Or run `pip install "python-lsp-server[all]"` in the dockerfile.

Let's not overcomplicate eglot-tests.el with these things.

> the check shall be for all alternatives
> configured in eglot-server-programs. And not only for python, but also
> for other languages.

No, that's an immense amount of work and that's not what these
tests are really for.  People add stuff to eglot-server-programs
liberally: it's a huge database now. I'm not crazy about that but
is has always been the most  fair practice to acommodate server
preferences, and people seem like to see their favourite server at
least represented  there.

But some of these servers don't work, are deprecated, have
inconsistent executable names on different platforms: it's
a mess.  Testing that is way beyond the scope of eglot-tests.el.

You may lobby for a eglot-server-program-tests.el instead,
and I won't oppose it, but I personally don't have time for that,
nor do I see a lot of value at the moment.

eglot-tests.el is testing the server-agnostic Elisp logic in
eglot.el -- Eglot _is_ server agnostic.  We just happen to need
someone speaking LSP to be able to exercise features.  We could just
as well have a (compliant) Elisp LSP server simulator and not worry
about  external language servers in eglot-tests.el at all.  But that's quite
a bit of work.  So some common installations of language servers are needed.

`clangd` seems to be a fairly reliable one so I've been looking
at transferring most of the tests that I can to clangd.  But it
doesn't exercise _all_ the features that Eglot supports, like
file watching.

I'll look into adapting this test for clangd instead of pylsp.

In the meantime, just uninstall python-lsp-server on EMBA and
let this test be skipped for now.  Or install it like I suggested.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-31 10:50         ` João Távora
@ 2023-03-31 12:14           ` Michael Albinus
  2023-03-31 13:35             ` João Távora
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Albinus @ 2023-03-31 12:14 UTC (permalink / raw)
  To: João Távora; +Cc: emacs-devel

João Távora <joaotavora@gmail.com> writes:

Hi João,

>> I'm not happy with this. EMBA installs a conservative list of software;
>> they shall be available as Debian bullseye package.
>
> Then you should complain to Debian and uninstall pylsp on EMBA is the
> meantime.

Nothing to complain to Debian. They offer pylsp in the testing version;
we have simply decided not to use it. We use the stable version.

>> Since Debian bullseye does not offer the package python3-pylsp (which
>> will be available with a later Debian release), I install on EMBA
>> python3-pyls. This shall be sufficient, because (according to
>> eglot-server-programs) "pyls" is supported.
>>
>> eglot-tests.el does not dertect this, it checks only for "pylsp". I
>> believe this shall be changed,
>
> No, it shan't :-) I'm not even sure how to do so portably.

The most simple way would be

--8<---------------cut here---------------start------------->8---
(skip-unless (or (executable-find "pylsp") (executable-find "pyls")))
--8<---------------cut here---------------end--------------->8---

But this is a sledge hammer approach I guess.

> Just undo your installation of pylsp on EMBA and I'll look
> into replacing that test with some other language server.
>
> Or run `pip install "python-lsp-server[all]"` in the dockerfile.
>
> Let's not overcomplicate eglot-tests.el with these things.

eglot-tests.el run for your environment. But there are people with other
environments (like Debian stable), which could errors running
eglot-tests.el.

>> the check shall be for all alternatives
>> configured in eglot-server-programs. And not only for python, but also
>> for other languages.
>
> No, that's an immense amount of work and that's not what these
> tests are really for.  People add stuff to eglot-server-programs
> liberally: it's a huge database now. I'm not crazy about that but
> is has always been the most  fair practice to acommodate server
> preferences, and people seem like to see their favourite server at
> least represented  there.

Is it that hard to extract all relevant server executables for a given
major-mode, and iterate over them with executable-find?

> But some of these servers don't work, are deprecated, have
> inconsistent executable names on different platforms: it's
> a mess.  Testing that is way beyond the scope of eglot-tests.el.

In such a case, the test shall fail. And that would be OK, by this you
get feedback what doesn't work (given people write bug reports).

> You may lobby for a eglot-server-program-tests.el instead,
> and I won't oppose it, but I personally don't have time for that,
> nor do I see a lot of value at the moment.
>
> eglot-tests.el is testing the server-agnostic Elisp logic in
> eglot.el -- Eglot _is_ server agnostic.  We just happen to need
> someone speaking LSP to be able to exercise features.  We could just
> as well have a (compliant) Elisp LSP server simulator and not worry
> about  external language servers in eglot-tests.el at all.  But that's quite
> a bit of work.  So some common installations of language servers are needed.

Sure, possible. I was just speaking about the given state of eglot-tests.el.

> `clangd` seems to be a fairly reliable one so I've been looking
> at transferring most of the tests that I can to clangd.  But it
> doesn't exercise _all_ the features that Eglot supports, like
> file watching.
>
> I'll look into adapting this test for clangd instead of pylsp.

OK.

> In the meantime, just uninstall python-lsp-server on EMBA and
> let this test be skipped for now.  Or install it like I suggested.

Will do.

Best regards, Michael.



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-31 12:14           ` Michael Albinus
@ 2023-03-31 13:35             ` João Távora
  2023-03-31 14:03               ` João Távora
  0 siblings, 1 reply; 10+ messages in thread
From: João Távora @ 2023-03-31 13:35 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

On Fri, Mar 31, 2023 at 1:14 PM Michael Albinus <michael.albinus@gmx.de> wrote:
>
> João Távora <joaotavora@gmail.com> writes:
>
> Hi João,
>
> >> I'm not happy with this. EMBA installs a conservative list of software;
> >> they shall be available as Debian bullseye package.
> >
> > Then you should complain to Debian and uninstall pylsp on EMBA is the
> > meantime.
>
> Nothing to complain to Debian. They offer pylsp in the testing version;
> we have simply decided not to use it. We use the stable version.
>
> >> Since Debian bullseye does not offer the package python3-pylsp (which
> >> will be available with a later Debian release), I install on EMBA
> >> python3-pyls. This shall be sufficient, because (according to
> >> eglot-server-programs) "pyls" is supported.
> >>
> >> eglot-tests.el does not dertect this, it checks only for "pylsp". I
> >> believe this shall be changed,
> >
> > No, it shan't :-) I'm not even sure how to do so portably.
>
> The most simple way would be
>
> --8<---------------cut here---------------start------------->8---
> (skip-unless (or (executable-find "pylsp") (executable-find "pyls")))
> --8<---------------cut here---------------end--------------->8---
>
> But this is a sledge hammer approach I guess.

Hmm, I'm confused.  Why are we talking about 'pyls'?  The
test is for `pylsp`.  It used to be for `pyls`, but now it's
not.  'pyls' would probably have the same "provider" issue.

My point is that I don't know how to ask the `pylsp`
executable easily what "providers" it supports.  pylsp --version
doesn't hint at it. Maybe there is an easy way, but I don't know it.

Maybe you meant these kinds of changes to eglot-tests.el?


diff --git a/test/lisp/progmodes/eglot-tests.el
b/test/lisp/progmodes/eglot-tests.el
index b11ce942b7d..7215dc24b3e 100644
--- a/test/lisp/progmodes/eglot-tests.el
+++ b/test/lisp/progmodes/eglot-tests.el
@@ -570,7 +570,8 @@ eglot-test-non-unique-completions
       '(("project" . (("something.py" . "foo=1\nfoobar=2\nfoo"))))
     (with-current-buffer
         (eglot--find-file-noselect "project/something.py")
-      (should (eglot--tests-connect))
+      (let ((eglot-server-programs '((python-mode . ("pylsp")))))
+        (should (eglot--tests-connect)))
       (goto-char (point-max))
       (completion-at-point))
     ;; FIXME: `current-message' doesn't work here :-(


This makes sense to me.  It's an oversight that eglot-server-programs
isn't restricted there like it is in other tests.

To avoid hurting readability too much, this override could
be an option to the eglot--with-fixture macro.

> eglot-tests.el run for your environment. But there are people with other
> environments (like Debian stable), which could errors running
> eglot-tests.el.

Yes, I understand, but I also doubt the size of the set intesecting
people who have simplistic pylsp installations and people running
the Emacs test suite.  So I'm not very worried.  And most people are
using pyright these days anyway.

> >> the check shall be for all alternatives
> >> configured in eglot-server-programs. And not only for python, but also
> >> for other languages.
> >
> > No, that's an immense amount of work and that's not what these
> > tests are really for.  People add stuff to eglot-server-programs
> > liberally: it's a huge database now. I'm not crazy about that but
> > is has always been the most  fair practice to acommodate server
> > preferences, and people seem like to see their favourite server at
> > least represented  there.
>
> Is it that hard to extract all relevant server executables for a given
> major-mode, and iterate over them with executable-find?

That's not hard, but what do you want to do with this information?
What test do you want to design?  I'm not following.  Maybe I'm
missing something.

> > But some of these servers don't work, are deprecated, have
> > inconsistent executable names on different platforms: it's
> > a mess.  Testing that is way beyond the scope of eglot-tests.el.
>
> In such a case, the test shall fail. And that would be OK, by this you
> get feedback what doesn't work (given people write bug reports).

I don't follow.  What test fails?  What would be considered "failure"?
Not having all possible programs mentioned in `eglot-server-programs`
installed?  Can't be that, that's just tyranny :-)  There's a lot
of stuff in there.

> > You may lobby for a eglot-server-program-tests.el instead,
> > and I won't oppose it, but I personally don't have time for that,
> > nor do I see a lot of value at the moment.
> >
> > eglot-tests.el is testing the server-agnostic Elisp logic in
> > eglot.el -- Eglot _is_ server agnostic.  We just happen to need
> > someone speaking LSP to be able to exercise features.  We could just
> > as well have a (compliant) Elisp LSP server simulator and not worry
> > about  external language servers in eglot-tests.el at all.  But that's quite
> > a bit of work.  So some common installations of language servers are needed.
>
> Sure, possible. I was just speaking about the given state of eglot-tests.el.

It's not super, because of these outside dependencies, but it's not a
very bad state, I would say.  It helped me catch a bug the other day :-)

João



^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-31 13:35             ` João Távora
@ 2023-03-31 14:03               ` João Távora
  2023-03-31 14:16                 ` Michael Albinus
  0 siblings, 1 reply; 10+ messages in thread
From: João Távora @ 2023-03-31 14:03 UTC (permalink / raw)
  To: Michael Albinus; +Cc: emacs-devel

Just a follow-up, because I just noticed that I was mixing up pylsp and pyls
as well

pylsp is pip install python-lsp-server
pyls is pip install python-language-server

The second one is deprecated according to people familiar with
the matter.  Eglot now "prefers" the first, and so do the tests.
Maybe this helps.

João

On Fri, Mar 31, 2023 at 2:35 PM João Távora <joaotavora@gmail.com> wrote:
>
> On Fri, Mar 31, 2023 at 1:14 PM Michael Albinus <michael.albinus@gmx.de> wrote:
> >
> > João Távora <joaotavora@gmail.com> writes:
> >
> > Hi João,
> >
> > >> I'm not happy with this. EMBA installs a conservative list of software;
> > >> they shall be available as Debian bullseye package.
> > >
> > > Then you should complain to Debian and uninstall pylsp on EMBA is the
> > > meantime.
> >
> > Nothing to complain to Debian. They offer pylsp in the testing version;
> > we have simply decided not to use it. We use the stable version.
> >
> > >> Since Debian bullseye does not offer the package python3-pylsp (which
> > >> will be available with a later Debian release), I install on EMBA
> > >> python3-pyls. This shall be sufficient, because (according to
> > >> eglot-server-programs) "pyls" is supported.
> > >>
> > >> eglot-tests.el does not dertect this, it checks only for "pylsp". I
> > >> believe this shall be changed,
> > >
> > > No, it shan't :-) I'm not even sure how to do so portably.
> >
> > The most simple way would be
> >
> > --8<---------------cut here---------------start------------->8---
> > (skip-unless (or (executable-find "pylsp") (executable-find "pyls")))
> > --8<---------------cut here---------------end--------------->8---
> >
> > But this is a sledge hammer approach I guess.
>
> Hmm, I'm confused.  Why are we talking about 'pyls'?  The
> test is for `pylsp`.  It used to be for `pyls`, but now it's
> not.  'pyls' would probably have the same "provider" issue.
>
> My point is that I don't know how to ask the `pylsp`
> executable easily what "providers" it supports.  pylsp --version
> doesn't hint at it. Maybe there is an easy way, but I don't know it.
>
> Maybe you meant these kinds of changes to eglot-tests.el?
>
>
> diff --git a/test/lisp/progmodes/eglot-tests.el
> b/test/lisp/progmodes/eglot-tests.el
> index b11ce942b7d..7215dc24b3e 100644
> --- a/test/lisp/progmodes/eglot-tests.el
> +++ b/test/lisp/progmodes/eglot-tests.el
> @@ -570,7 +570,8 @@ eglot-test-non-unique-completions
>        '(("project" . (("something.py" . "foo=1\nfoobar=2\nfoo"))))
>      (with-current-buffer
>          (eglot--find-file-noselect "project/something.py")
> -      (should (eglot--tests-connect))
> +      (let ((eglot-server-programs '((python-mode . ("pylsp")))))
> +        (should (eglot--tests-connect)))
>        (goto-char (point-max))
>        (completion-at-point))
>      ;; FIXME: `current-message' doesn't work here :-(
>
>
> This makes sense to me.  It's an oversight that eglot-server-programs
> isn't restricted there like it is in other tests.
>
> To avoid hurting readability too much, this override could
> be an option to the eglot--with-fixture macro.
>
> > eglot-tests.el run for your environment. But there are people with other
> > environments (like Debian stable), which could errors running
> > eglot-tests.el.
>
> Yes, I understand, but I also doubt the size of the set intesecting
> people who have simplistic pylsp installations and people running
> the Emacs test suite.  So I'm not very worried.  And most people are
> using pyright these days anyway.
>
> > >> the check shall be for all alternatives
> > >> configured in eglot-server-programs. And not only for python, but also
> > >> for other languages.
> > >
> > > No, that's an immense amount of work and that's not what these
> > > tests are really for.  People add stuff to eglot-server-programs
> > > liberally: it's a huge database now. I'm not crazy about that but
> > > is has always been the most  fair practice to acommodate server
> > > preferences, and people seem like to see their favourite server at
> > > least represented  there.
> >
> > Is it that hard to extract all relevant server executables for a given
> > major-mode, and iterate over them with executable-find?
>
> That's not hard, but what do you want to do with this information?
> What test do you want to design?  I'm not following.  Maybe I'm
> missing something.
>
> > > But some of these servers don't work, are deprecated, have
> > > inconsistent executable names on different platforms: it's
> > > a mess.  Testing that is way beyond the scope of eglot-tests.el.
> >
> > In such a case, the test shall fail. And that would be OK, by this you
> > get feedback what doesn't work (given people write bug reports).
>
> I don't follow.  What test fails?  What would be considered "failure"?
> Not having all possible programs mentioned in `eglot-server-programs`
> installed?  Can't be that, that's just tyranny :-)  There's a lot
> of stuff in there.
>
> > > You may lobby for a eglot-server-program-tests.el instead,
> > > and I won't oppose it, but I personally don't have time for that,
> > > nor do I see a lot of value at the moment.
> > >
> > > eglot-tests.el is testing the server-agnostic Elisp logic in
> > > eglot.el -- Eglot _is_ server agnostic.  We just happen to need
> > > someone speaking LSP to be able to exercise features.  We could just
> > > as well have a (compliant) Elisp LSP server simulator and not worry
> > > about  external language servers in eglot-tests.el at all.  But that's quite
> > > a bit of work.  So some common installations of language servers are needed.
> >
> > Sure, possible. I was just speaking about the given state of eglot-tests.el.
>
> It's not super, because of these outside dependencies, but it's not a
> very bad state, I would say.  It helped me catch a bug the other day :-)
>
> João



-- 
João Távora



^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: Eglot tests on EMBA
  2023-03-31 14:03               ` João Távora
@ 2023-03-31 14:16                 ` Michael Albinus
  0 siblings, 0 replies; 10+ messages in thread
From: Michael Albinus @ 2023-03-31 14:16 UTC (permalink / raw)
  To: João Távora; +Cc: emacs-devel

João Távora <joaotavora@gmail.com> writes:

Hi João,

> The second one is deprecated according to people familiar with
> the matter.  Eglot now "prefers" the first, and so do the tests.
> Maybe this helps.

Don't worry. I have removed pyls(p) from EMBA as suggested by
you. Cause I don't know what's all about this.

If you want to enable this later, once we switch to Debian bookworm, let
me know.

> João

Best regards, Michael.



^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2023-03-31 14:16 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-03-15 12:09 Eglot tests on EMBA Michael Albinus
2023-03-29 14:34 ` Michael Albinus
2023-03-29 14:46   ` João Távora
2023-03-30 12:45     ` João Távora
2023-03-31 10:31       ` Michael Albinus
2023-03-31 10:50         ` João Távora
2023-03-31 12:14           ` Michael Albinus
2023-03-31 13:35             ` João Távora
2023-03-31 14:03               ` João Távora
2023-03-31 14:16                 ` Michael Albinus

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).