Информация о среде и версии
Информация о версии CIDER
;; Подключен к серверу nREPL - nrepl: // localhost : 59990
;; Снимок экрана CIDER 0.17.0 (пакет: 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
Операционная система
macOS
Как видите, символ также ошибочно разрешен для java.lang.Character / toUpperCase вместо lang.String.
Не появляется ли подсказка с вопросом, какую версию выбрать?
@bbatsov Странно, но сегодня это так (что намного лучше 😂):
Я проверил и получаю подсказку, когда использую горячую клавишу по умолчанию (в Spacemacs это , 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 также может использовать некоторую работу, например, разделение между аргументами разных методов:
Хорошего разделения придумать не удалось, поэтому просто смешали подписи всех возможных версий. Это идеально, но, к сожалению, я тоже не вижу, как это можно улучшить. Eldoc должен иметь строковую структуру ver, в противном случае выделение параметров там прервется.
@bbatsov Я только что перезапустил свой Emacs, и Javadocs снова пропали. :(
Интересно, что-то изменится для вас, если вы попробуете Java 8 вместо 9. У меня не было много времени, чтобы поиграть с Java 9, и мне интересно, не работает ли некоторая часть манипуляций с путями, которые мы делаем, там или что-то в этом роде. Также - убедитесь, что буфер кода был оценен, прежде чем пробовать eldoc / cider-doc).
@bbatsov Я перешел на Java 8 и до сих пор не испытывал никаких проблем (но с тех пор я мало кодировал, так что кто знает).
И я только что понял, что это вы говорите ^ __ ^ Почему-то ваш аватар показался мне таким агрессивным, и это меня удивило :)) Спасибо за вашу работу;) Я сейчас смотрю ваше выступление Clojure Bad Parts 😊
Ха-ха!
И я подумал, что это мое счастливое лицо! 😄
Привет, (здесь новичок в emacs / сидре)
Где в общей сидре / ДОРОЖНОЙ КАРТЕ позиционируется эта ошибка?
Это больше
Каждый раз, когда я трачу некоторое время на изучение clj / emacs, я в конечном итоге хочу найти какой-нибудь класс и разочаровываться - это полностью на мне, но я все время спрашиваю себя:
Моя установка неправильная или сломанная, или "настоящим" разработчикам Clojure никогда не нужно искать javadoc - что было бы для меня весьма озадачивающим.
Мой тестовый пример - поиск через cider-doc
java.util.concurrent.PriorityBlockingQueue
что приводит к https://imgur.com/a/TaQXfpS .
Вкратце: это просто сломано для меня или для всех, и как люди справляются без этого?
PPS: я пробовал с java 8-11 с установленными java-doc и java-src
Выходы:
в классе
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.
Прогресс !
Я думаю происходит следующее
Предпосылка: я использую spacemacs, в котором используется сидр от MELPA, в настоящее время 0.20.0 + cider-nrepl 0.20.0
cider-nrepl 0.20.0 использует фруктовый сад 0.3.1
Проблема:
orchard обнаруживает источники Java с помощью jdk-sources
-> jdk-resource-url
и критически -> 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)
В моей системе (archlinux) и в пакете ubuntus openjdk-11-jre-headless_11.0.1+13-2ubuntu1_amd64
кажется, что javas расположены в виде папок под /usr/lib/jvm
т.е.
# ~/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
указывает на JRE в корне JDK. Это ожидается согласно https://docs.oracle.com/javase/7/docs/technotes/tools/linux/jdkfiles.html. Я не могу найти ссылку на javase / 8, но эмпирически наблюдаю (на Debian):
user=> (System/getProperty "java.home")
"/usr/lib/jvm/java-8-openjdk-amd64/jre"
Начиная с java 9 и далее подкаталог JRE отсутствует, а его содержимое объединяется на один уровень выше в корень 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
вызывается только в загрузчике загрузочного класса, иначе это (.getContextClassLoader (Thread/currentThread))
,
Я принудительно заархивировал путь к классам с помощью project.clj
: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>
все еще нет документа
Похоже, что на Java 11 это не работает, пока https://github.com/clojure-emacs/orchard/issues/20 не будет исправлен.
Однако Java 8 должна работать. Вам понадобятся как src.zip
и tools.jar
в пути к классам, которые должны добавляться автоматически. Тогда вы можете попробовать что-то вроде следующего (на сидре 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 недавно обратился к связанной проблеме Orchard, так что я думаю, мы можем закрыть ее.
В Debian 10 все, что мне нужно было сделать, это установить openjdk-11-source
. Я попытался создать символическую ссылку на src.zip
и обнаружил, что она уже была создана.
В Ubuntu 18.04 с Emacs 26.3 CIDER 0.24.0 nREPL 0.6.0 Java 1.8.0_242 я добавил каталог, содержащий zip-архив с исходными кодами Java, в качестве ресурса в профиль Leiningen ( ~/.lein/profiles.clj
):
{:user {:resource-paths ["/usr/lib/jvm/openjdk-8"]}}