Cider: CIDER tidak menampilkan dokumen untuk Java

Dibuat pada 17 Apr 2018  ·  17Komentar  ·  Sumber: clojure-emacs/cider

Perilaku yang diharapkan

image

Perilaku sebenarnya

image

Informasi Lingkungan & Versi
Informasi versi CIDER
;; Terhubung ke server nREPL - nrepl://localhost :59990
;; CIDER 0.17.0snapshot (paket: 20180413.51), nREPL 0.2.13
;; Clojure 1.8.0, Java 9.0.4
Versi Lein/Boot
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_CLOJURE_VERSION=1.8.0
BOOT_VERSION = 2.7.2

Versi Emacs
27.0.50

Sistem operasi
macOS

bug stale

Semua 17 komentar

Seperti yang Anda lihat, simbol juga salah diselesaikan untuk java.lang.Character/toUpperCase alih-alih lang.String.

Apakah Anda tidak mendapatkan prompt yang menanyakan versi mana yang harus dipilih?

@bbatsov Anehnya, hari ini seperti ini (yang jauh lebih baik 😂):
image

Saya memeriksa, dan saya mendapatkan Prompt ketika saya menggunakan hotkey default (Di Spacemacs , h h dalam keadaan normal-jahat), tetapi tidak ketika saya menggunakan hotkey ini, saya telah mengonfigurasi diri saya sendiri:

(key-chord-define-global "fd" '(lambda () (interactive "")
                                   (cond
                                    ((or (eq evil-state 'normal) (eq evil-state 'visual)) (execute-kbd-macro (kbd "<escape> , h h")))
                                    ((eq evil-state 'insert) (execute-kbd-macro(kbd "<escape> l , h h i"))))))

Tombol pintas ini entah bagaimana melewatkan prompt dan hanya menampilkan dokumen untuk karakter.

BTW, petunjuk eldoc juga dapat menggunakan beberapa pekerjaan, misalnya pemisahan antara argumen dari metode yang berbeda:
image

Kami tidak dapat menemukan pemisahan yang baik, itu sebabnya kami hanya mencampur tanda tangan dari semua versi yang mungkin. Ini ideal, tapi sayangnya saya juga tidak bisa melihat bagaimana ini bisa ditingkatkan. Eldoc harus memiliki struktur string ver, jika tidak, penyorotan params di sana akan rusak.

@bbatsov Saya baru saja
image

Saya ingin tahu apakah ada yang berubah untuk Anda jika Anda mencoba Java 8 daripada 9. Saya tidak punya banyak waktu untuk bermain dengan Java 9 dan saya ingin tahu apakah beberapa manipulasi classpath yang kami lakukan tidak berfungsi dengan baik di sana atau apa. Juga - pastikan buffer kode telah dievaluasi sebelum mencoba eldoc/cider-doc).

@bbatsov Saya beralih ke Java 8, dan masih belum memiliki masalah (tapi saya belum melakukan banyak pengkodean sejak jadi siapa yang tahu).
Dan saya baru mengerti bahwa Anda adalah orang yang berbicara itu ^__^ Entah bagaimana avatar Anda terlihat sangat agresif bagi saya dan ini mengejutkan saya :)) Terima kasih atas pekerjaan Anda;) Saya menonton Clojure Bad Parts Anda berbicara sekarang 😊

Ha ha!

Dan saya pikir ini adalah wajah bahagia saya! 😄

Hai, (emacs/cider pemula di sini)

Di mana di cider/ROADMAP umum bug ini diposisikan?

Apakah lebih?

  • tidak ada yang punya waktu untuk mengerjakan ini
  • itu akan diselesaikan dengan/oleh kebun
  • itu berfungsi seperti yang dimaksudkan
  • itu tidak seharusnya bekerja sekarang?

Setiap kali saya menghabiskan waktu mempelajari clj/emacs, saya akhirnya ingin mencari beberapa Kelas dan menjadi frustrasi - yang sepenuhnya ada pada saya, tetapi saya terus bertanya pada diri sendiri:

Apakah pengaturan saya salah atau rusak, atau apakah pengembang clojure "asli" tidak perlu mencari javadoc - yang akan sangat membingungkan saya.

Testcase saya adalah mencari melalui cider-doc java.util.concurrent.PriorityBlockingQueue yang menghasilkan https://imgur.com/a/TaQXfpS .


Singkatnya: Apakah ini hanya rusak untuk saya atau untuk semua orang dan bagaimana orang mengatasinya?

PPS: saya telah mencoba dengan java 8 - 11 dengan java-doc dan java-src terinstal


Keluaran:

di kelas

java.util.concurrent.PriorityBlockingQueue
   Extends: java.util.AbstractQueue
Implements: java.util.concurrent.BlockingQueue
            java.io.Serializable

Not documented.

For additional documentation, see the Javadoc.

Definition location unavailable.

pada sebuah metode

java.util.concurrent.PriorityBlockingQueue/add
 [this java.lang.Object]
Not documented.

For additional documentation, see the Javadoc.

Definition location unavailable.

Kemajuan !

Saya pikir hal berikut sedang terjadi


Premis: Saya menggunakan spacemacs, yang menggunakan cider dari MELPA , saat ini 0.20.0 + cider-nrepl 0.20.0

sari-nrepl 0.20.0 menggunakan kebun 0.3.1


Isu:

orchard mendeteksi sumber java melalui jdk-sources -> jdk-resource-url dan kritis -> jdk-root

(def jdk-root
  "The JDK root directory (parent of the `java.home` JRE directory)"
  (-> (io/file (System/getProperty "java.home"))
      (.getParentFile)))

(https://github.com/clojure-emacs/orchard/blob/v0.3.1/src/orchard/Java.clj#L47)

Di sistem saya (archlinux) dan di ubuntu paket openjdk-11-jre-headless_11.0.1+13-2ubuntu1_amd64 tampaknya javas adalah tata letak sebagai folder di bawah /usr/lib/jvm

yaitu

# ~/Downloads/openjdk-11-jre-headless_11.0.1+13-2ubuntu1_amd64/data $ tree usr/lib/jvm/ -L 2
usr/lib/jvm/
├── java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64
└── java-11-openjdk-amd64

atau archlinux

# ~ $ tree /usr/lib/jvm/ -L 2
/usr/lib/jvm/
├── default -> java-11-openjdk
├── default-runtime -> java-11-openjdk
├── java-11-openjdk
├── java-8-openjdk
└── java-default-runtime -> default

dalam demo emacs/cider repl java.home adalah:

(System/getProperty "java.home") 
; =>  /usr/lib/jvm/java-11-openjdk

_Saya tidak tahu apakah sesuatu dari luar melewati ini, atau apakah itu rumah default Java saat ini._

jika saya tidak salah itu berarti pada sistem saya jdk-root adalah

(-> (io/file (System/getProperty "java.home"))
      (.getParentFile))) 
; => /usr/lib/jvm/

mengakibatkan jdk-resource-url mencari sesuatu di folder (induk) yang salah


Kesimpulan:

jdk-roots "Direktori root JDK (induk dari direktori JRE java.home )" komentar/premis tampaknya salah (saya dengan cepat memeriksa online dan sepertinya tidak ada "standar" seperti apa yang Java. rumah benar-benar dimaksudkan untuk menjadi)

Apakah itu membantu siapa pun?

Ya, itu membantu! Melalui Java 8, properti sistem java.home menunjuk ke JRE di dalam root JDK. Ini diharapkan per https://docs.Oracle.com/javase/7/docs/technotes/tools/linux/jdkfiles.html. Saya tidak dapat menemukan tautan ke javase/8 tetapi secara empiris mengamati (di Debian):

user=> (System/getProperty "java.home")
"/usr/lib/jvm/java-8-openjdk-amd64/jre"

Dari Java 9 dan seterusnya, subdirektori JRE hilang dan isinya digabungkan satu tingkat ke dalam root JDK, yang sekarang ditunjukkan oleh java.home :

user=> (System/getProperty "java.home")
"/usr/lib/jvm/java-11-openjdk-amd64"

(lihat https://docs.Oracle.com/en/Java/javase/11/install/installed-directory-structure-jdk.html)

Sebagai tambahan untuk pengguna distro turunan Debian, paket openjdk-11-source menginstal symlink yang rusak ke src.zip (lihat https://bugs.launchpad.net/ubuntu/+source/openjdk-lts /+bug/1791219)
Setelah menginstalnya, saya memiliki:

$ pwd
/usr/lib/jvm
$ ls -l java-11-openjdk-amd64/src.zip
lrwxrwxrwx 1 root root 21 Nov 20 04:13 java-11-openjdk-amd64/src.zip -> ../openjdk-11/src.zip
$ find openjdk-11 -type f
openjdk-11/lib/src.zip

Sepertinya kebun harus memeriksa di kedua tempat dan menguji apakah src.zip dapat dibaca. Akan lebih baik juga untuk mencetak peringatan yang dapat dipadamkan ke STDERR jika tidak.
Saya akan dengan senang hati mengirimkan PR jika ini terdengar masuk akal.

Sementara itu, Anda dapat menemukan salinan src.zip dan menambahkannya ke classpath secara manual, misalnya menggunakan entri :local/root deps.edn (jika Anda menggunakan tools.deps https:/ /clojure.org/reference/deps_and_cli#_dependencies).

hm, tampaknya rantai panggilan jdk-sources -> jdk-root hanya dipanggil ketika di boot-class-loader jika tidak (.getContextClassLoader (Thread/currentThread)) ,

Saya memaksa Zip di classpath melalui project.clj

:profiles {:repl {:resource-paths ["/usr/lib/jvm/default/lib/src.zip"]}}

dan diperiksa melalui

> (System/getProperty "java.class.path") ; in repl buffer
; "/home/_/Projekte/repos/temp/test/test:/_/patrik/Projekte/repos/temp/test/src:
   /usr/lib/jvm/default/lib/src.zip:  <snip>

masih belum ada dok

Sepertinya ini akan rusak di Java 11 hingga https://github.com/clojure-emacs/orchard/issues/20 diperbaiki.
Java 8 seharusnya berfungsi. Anda akan membutuhkan src.zip dan tools.jar pada classpath yang harus ditambahkan secara otomatis. Kemudian Anda dapat mencoba sesuatu seperti berikut (pada cider v0.21.1):

(clojure.java.io/resource "java/util/AbstractQueue.java")
;; => #object[java.net.URL 0x2e00bc76 "jar:file:/usr/lib/jvm/java-8-openjdk-amd64/src.zip!/java/util/AbstractQueue.java"]

(require '[mranderson049.orchard.v0v4v0.orchard.java.parser :as ojp])

(keys (ojp/source-info 'java.util.AbstractQueue))
;; => (:class :doc :line :column :members :file :path)

Masalah ini secara otomatis ditandai sebagai basi karena tidak ada aktivitas terbaru. Ini akan ditutup jika tidak ada aktivitas lebih lanjut yang terjadi. Terima kasih atas kontribusi dan pengertian Anda!

@jeffvalk baru-baru ini membahas masalah Orchard yang ditautkan, jadi saya kira kita bisa menutup yang ini.

Di Debian 10, yang harus saya lakukan hanyalah menginstal openjdk-11-source . Saya mencoba symlink src.zip dan menemukan bahwa itu sudah dibuat.

Di Ubuntu 18.04 dengan Emacs 26.3 CIDER 0.24.0 nREPL 0.6.0 Java 1.8.0_242 Saya menambahkan dir yang berisi Zip dengan sumber Java sebagai sumber daya ke profil Leiningen ( ~/.lein/profiles.clj ):

{:user {:resource-paths ["/usr/lib/jvm/openjdk-8"]}}
Apakah halaman ini membantu?
1 / 5 - 1 peringkat