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

Eglot-java would not start when open java file #8

Closed
eugeneandrienko opened this issue Jan 21, 2023 · 3 comments
Closed

Eglot-java would not start when open java file #8

eugeneandrienko opened this issue Jan 21, 2023 · 3 comments

Comments

@eugeneandrienko
Copy link

Eglot and eglot-java didn't start when I open any file with java source code from my project.

Steps to reproduce:

  1. Install eglot and eglot-java
  2. Go to folder with java project and open any java file
  3. Got message: File mode specification error: (wrong-type-argument consp nil)
  4. Eclipse Java Language Server didn't installs automatically.

Emacs 28.2
Eglot 1.10
Eglot-java 20221218.1809 from MELPA

Му configuration:

(use-package eglot)

(use-package eglot-java
  :requires eglot
  :config
  (progn
    (add-hook 'java-mode-hook 'eglot-java-mode)))

I found (via M-x toggle-debug-on-error) what problem also reproduces, when I call M-x eglot-java-mode after open the java file.

Debugger entered--Lisp error: (wrong-type-argument consp nil)
  eglot-java--init()
  eglot-java-mode(toggle)
  funcall-interactively(eglot-java-mode toggle)
  call-interactively(eglot-java-mode record nil)
  command-execute(eglot-java-mode record)
  execute-extended-command(nil "eglot-java-mode" "eglot-java-m")
  funcall-interactively(execute-extended-command nil "eglot-java-mode" "eglot-java-m")
  call-interactively(execute-extended-command nil nil)
  command-execute(execute-extended-command)
@eugeneandrienko
Copy link
Author

I've made a little research and found the roots of problem.

Don't know how, but in ELPA there is a eglot version "from future". Depending on releases, commits and issues from the joaotavora/eglot, the latest official version of eglot is 1.9.
But in ELPA there is a version 1.10!

In sources of that version, which I got when installing eglot-1.10, record about Java in eglot-server-programs is the next:

((java-mode java-ts-mode)
 "Initialize the library for use with the Eclipse JDT language server."
 "jdtls")

In sources of eglot from official GitHub-repositry that record differs:

(java-mode . ("jdtls"))

And, of course eglot-java fails when eglot-java--init tried to find 'java-mode record, which is not exists in eglot-1.10.

When I removed that version of eglot "from future" and install the normal eglot 1.9 — eglot-java works correctly!

@yveszoundi
Copy link
Owner

Thanks for reporting this issue.

I think that it's a valid concern though, as there could be several java-related modes associated to eglot and the "version of the future" will eventually become "actual" for everyone (including on MELPA).

  • eglot upstream could make any changes related to those modes: a new hypothetical "java-ex-mode" could be added and then this package would just break again. I had never heard about java-ts-mode until today...
  • users might have their own customization of java-related modes (known modes or homegrown modes)

@yveszoundi yveszoundi reopened this Jan 22, 2023
@yveszoundi
Copy link
Owner

yveszoundi commented Jan 22, 2023

Here's what will be implemented for mitigation

  • eglot-java will account for the fact that there could be multiple java-related mode associations in eglot:
    • eglot-java will manage eglot initialization for java-related modes found in eglot-server-programs
    • users are still expected to register java related modes that they care about through a eglot-java-mode-hook (java-ts-mode or anything other java editing mode).
  • a new flag eglot-java-eglot-server-programs-manual-updates will allow further user control:
    • By default the flag is set to false and can be changed via M-x customize-variable
    • If one day upstream eglot changes drastically how it initializes LSP servers, users might still be able to update their configuration without waiting for this package to catch up.
    • If you have a heavily customized eglot configuration, you might not necessarily want eglot-java to "magically" update eglot-server-programs behind the scenes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants