Cider: CIDERはJavaのドキュメントを表示しません

作成日 2018年04月17日  ·  17コメント  ·  ソース: clojure-emacs/cider

予想される行動

image

実際の動作

image

環境とバージョン情報
CIDERバージョン情報
;; nREPLサーバーに接続しました-nrepl:// localhost :59990
;; CIDER 0.17.0snapshot(パッケージ:20180413.51)、nREPL 0.2.13
;; Clojure 1.8.0、Java 9.0.4
Lein / Bootバージョン
BOOT_CLOJURE_NAME = org.clojure / clojure
BOOT_CLOJURE_VERSION = 1.8.0
BOOT_VERSION = 2.7.2

Emacsバージョン
27.0.50

オペレーティング・システム
マックOS

bug stale

全てのコメント17件

ご覧のとおり、シンボルはlang.Stringではなくjava.lang.Character / toUpperCaseに対して誤って解決されています。

どのバージョンを選択するかを尋ねるプロンプトが表示されませんか?

@bbatsov不思議なことに、今日は次のようになっています(これははるかに優れています😂):
image

チェックしたところ、デフォルトのホットキー(Spacemacsではevil-normal-stateでは, h h )を使用するとプロンプトが表示されますが、このホットキーを使用すると自分で構成したのではありません。

(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"))))))

このホットキーはどういうわけかプロンプトをスキップし、文字のドキュメントを表示するだけです。

ところで、eldocのヒントでは、さまざまなメソッドの引数を分離するなど、いくつかの作業を使用することもできます。
image

適切な分離を理解できなかったため、考えられるすべてのバージョンの署名を混合しただけです。 理想的ですが、残念ながらこれをどのように改善できるかわかりません。 Eldocはver文字列構造である必要があります。そうでない場合、そこでのパラメーターの強調表示が壊れます。

@bbatsov Emacsを再起動したところ、Javadocが再び失われました。 :(
image

9ではなくJava8を試してみると、状況が変わるのではないかと思います。Java9で遊ぶ時間があまりなかったので、そこで行っているクラスパス操作の一部が正しく機能していないのではないかと思います。 また、eldoc / cider-docを試す前に、コードバッファが評価されていることを確認してください。

@bbatsov Java 8に切り替えましたが、まだ問題はありません(ただし、それ以来、コーディングはあまり行っていません)。
そして、私はあなたがその話をしている人だと理解しました^ __ ^どういうわけかあなたのアバターは私にとても攻撃的に見え、この種は私を驚かせました:))あなたの仕事に感謝します;)私はあなたのClojureBadPartsの話を今見ています😊

ハハ!

そして、これが私の幸せそうな顔だと思いました! 😄

こんにちは、(emacs / cider初心者はこちら)

一般的なサイダー/ロードマップのどこにこのバグがありますか?

もっとですか

  • 誰もこれに取り組む時間がありません
  • それは果樹園で/果樹園によって解決されます
  • 意図したとおりに機能します
  • 今は動作しないはずですか?

clj / emacsの学習に時間を費やすたびに、クラスを検索してイライラしたいと思うようになります。これは完全に私にかかっていますが、私は自分自身に問い続けています。

私のセットアップが間違っているか壊れているか、または「本物の」clojure開発者がjavadocを検索する必要がないかどうか-これは私にとって非常に困惑するでしょう。

私のテストケースはcider-doc java.util.concurrent.PriorityBlockingQueueを介して検索することで、結果はhttps://imgur.com/a/TaQXfpSになります


要するに:これは私にとって、またはすべての人にとって壊れているだけですか、そして人々はそれなしでどのように対処しますか?

PPS:java-docとjava-srcをインストールしてjava8-11で試しました


出力:

クラスで

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.

メソッドについて

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

For additional documentation, see the Javadoc.

Definition location unavailable.

進捗 !

私は次のことが起こっていると思います


前提:MELPAのサイダーを使用するspacemacsを使用しています。現在は0.20.0 + cider-nrepl 0.20.0

cider-nrepl0.20.0は果樹園0.3.1を使用します


問題:

orchardは、 jdk-sources -> jdk-resource-url 、そして批判的に-> jdk-rootを使用してJavaソースを検出します。

(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)

私のシステム(archlinux)とubuntus openjdk-11-jre-headless_11.0.1+13-2ubuntu1_amd64パッケージでは、javasは/usr/lib/jvm下のフォルダーとしてレイアウトされているようです。

NS

# ~/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

または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

デモでは、emacs / cider repl java.homeは次のようになります。

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

_外部からの何かがこれを渡すかどうか、または現在のJavaのデフォルトのホームかどうかはわかりません。_

私が間違っていなければ、それは私のシステムではjdk-rootが

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

その結果、 jdk-resource-urlが間違った(親)フォルダーで検索します


結論:

jdk-roots "JDKルートディレクトリ( java.home JREディレクトリの親)"コメント/前提が間違っているようです(オンラインですばやく確認したところ、Javaとしての「標準」がないようです。家は本当にあることを意味します)

それは誰かを助けますか?

はい、役に立ちます! Java 8を介して、 java.homeシステムプロパティはJDKルート内のJREを指します。 これは、 https://docs.oracle.com/javase/7/docs/technotes/tools/linux/jdkfiles.htmlで予想されてい

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

java 9以降、JREサブディレクトリはなくなり、その内容は1レベル上でJDKルートにマージされます。これはjava.home指すようになりました。

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

(https://docs.oracle.com/en/java/javase/11/install/installed-directory-structure-jdk.htmlを参照)

Debianから派生したディストリビューションのユーザーのために、 openjdk-11-sourceパッケージはsrc.zipへの壊れたシンボリックリンクをインストールします(https://bugs.launchpad.net/ubuntu/+source/openjdk-ltsを参照) / + bug / 1791219)
それをインストールした後、私は持っています:

$ 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

果樹園は両方の場所をチェックして、 src.zipが読み取り可能かどうかをテストする必要があるようです。 そうでない場合は、STDERRにスケルチ可能な警告を出力することもできます。
これが合理的であると思われる場合は、PRを提出させていただきます。

それまでの間、 src.zipコピーを見つけて、手動でクラスパスに追加できます。たとえば、 :local/root deps.ednエントリを使用します(tools.deps https:/を使用している場合)。 /clojure.org/reference/deps_and_cli#_dependencies)。

うーん、コールチェーンjdk-sources -> jdk-rootは、 boot-class-loaderにあるときにのみ呼び出されるようです。それ以外の場合は、 (.getContextClassLoader (Thread/currentThread))

project.cljを使用してクラスパスにzipを強制しました

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

経由でチェック

> (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>

まだドキュメントはありません

https://github.com/clojure-emacs/orchard/issues/20が修正されるまで、
ただし、Java8は機能するはずです。 自動的に追加されるクラスパスにsrc.ziptools.jar両方が必要になります。 次に、次のようなものを試すことができます(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)

この問題は、最近のアクティビティがないため、自動的に古いものとしてマークされています。 それ以上のアクティビティが発生しない場合は閉じられます。 ご理解とご協力をよろしくお願いいたします。

@jeffvalkは最近、リンクされたオーチャードの問題に対処したので、これを閉じることができると思います。

Debian 10では、 openjdk-11-sourceインストールするだけで済みました。 src.zipをシンボリックリンクしようとすると、すでに作成されていることがわかりました。

Ubuntu18.04とEmacs26.3 CIDER 0.24.0 nREPL 0.6.0 Java 1.8.0_242で、リソースとしてJavaソースを含むzipを含むdirをLeiningenプロファイル( ~/.lein/profiles.clj )に追加しました。

{:user {:resource-paths ["/usr/lib/jvm/openjdk-8"]}}
このページは役に立ちましたか?
1 / 5 - 1 評価