νκ²½ λ° λ²μ μ 보
CIDER λ²μ μ 보
;; nREPL μλ²μ μ°κ²°λ¨ - nrepl://localhost :59990
;; CIDER 0.17.0snapshot(ν¨ν€μ§: 20180413.51), nREPL 0.2.13
;; ν΄λ‘μ 1.8.0, μλ° 9.0.4
λ μΈ/λΆνΈ λ²μ
BOOT_CLOJURE_NAME=org.clojure/clojure
BOOT_CLOJURE_VERSION=1.8.0
λΆνΈ_λ²μ =2.7.2
μ΄λ§₯μ€ λ²μ
27.0.50
μ΄μ 체μ
λ§₯ OS
보μλ€μνΌ κΈ°νΈλ lang.String λμ java.lang.Character/toUpperCaseμ λν΄μλ μλͺ» ν΄μλ©λλ€.
μ΄λ€ λ²μ μ μ νν μ§ λ¬»λ λ©μμ§κ° νμλμ§ μμ΅λκΉ?
@bbatsov μ΄μνκ²λ μ€λμ
νμΈνλλ° κΈ°λ³Έ λ¨μΆν€(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"))))))
μ΄ λ¨μΆν€λ μ΄λ»κ²λ ν둬ννΈλ₯Ό 건λλ°κ³ λ¬Έμμ λν λ¬Έμλ§ νμν©λλ€.
BTW, eldocμ ννΈλ λ€λ₯Έ λ°©λ²μ μΈμ κ° λΆλ¦¬μ κ°μ μΌλΆ μμ
μ μ¬μ©ν μλ μμ΅λλ€.
μ°λ¦¬λ μ’μ λΆλ¦¬λ₯Ό μμλΌ μ μμκΈ° λλ¬Έμ κ°λ₯ν λͺ¨λ λ²μ μ μλͺ μ νΌν©νμ΅λλ€. μ΄μμ μ΄μ§λ§ λΆννλ μ΄κ²μ΄ μ΄λ»κ² κ°μ λ μ μλμ§ μ μ μμ΅λλ€. Eldocμλ ver λ¬Έμμ΄ κ΅¬μ‘°κ° μμ΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ 맀κ°λ³μμ κ°μ‘° νμκ° κΉ¨μ§λλ€.
@bbatsov λ°©κΈ Emacsλ₯Ό λ€μ μμ
Java 9 λμ Java 8μ μ¬μ©νλ©΄ μν©μ΄ λ¬λΌμ§λμ§ κΆκΈν©λλ€. Java 9λ₯Ό μ¬μ©ν μκ°μ΄ λ§μ§ μκ³ μ°λ¦¬κ° μννλ ν΄λμ€ κ²½λ‘ μ‘°μ μ€ μΌλΆκ° μ λλ‘ μλνμ§ μλμ§ κΆκΈν©λλ€. λν - eldoc/cider-docμ μλνκΈ° μ μ μ½λ λ²νΌκ° νκ°λμλμ§ νμΈνμμμ€.
@bbatsov Java 8λ‘ μ ννμ§λ§ μ¬μ ν λ¬Έμ κ° μμμ΅λλ€.
κ·Έλ¦¬κ³ λ°©κΈ κ·Έ μ΄μΌκΈ°λ₯Ό νλ μ¬λμ΄ λΉμ μ΄λΌλ κ²μ μ΄ν΄νμ΅λλ€ ^__^ μ΄μ©μ§ λΉμ μ μλ°νκ° λμκ² λ무 곡격μ μΌλ‘ 보μκ³ μ΄λ° μ’
λ₯μ λλ₯Ό λλΌκ² νμ΅λλ€ :)) λΉμ μ μμ
μ κ°μ¬λ립λλ€ ;) λλ λΉμ μ Clojure Bad Parts μ΄μΌκΈ°λ₯Ό μ§κΈ λ³΄κ³ μμ΅λλ€ π
γ !
κ·Έλ¦¬κ³ λλ μ΄κ²μ΄ λμ ν볡ν μΌκ΅΄μ΄λΌκ³ μκ°νμ΅λλ€! π
μλ νμΈμ, (μ΄λ§₯μ€/μ¬μ΄λ€ μ΄λ³΄μλ μ¬κΈ°)
μΌλ° μ¬μ΄λ€/ROADMAPμμ μ΄ λ²κ·Έλ μ΄λμ μμ΅λκΉ?
λ λ§μκ°?
clj/emacsλ₯Ό λ°°μ°λ λ° μκ°μ ν μ ν λλ§λ€ κ²°κ΅ μΌλΆ ν΄λμ€λ₯Ό κ²μνκ³ μ’μ νκ² λ©λλ€. μ΄λ μ μ μΌλ‘ μ λͺ«μ΄μ§λ§ μ€μ€λ‘μκ² κ³μ λ¬»κ³ μμ΅λλ€.
λ΄ μ€μ μ΄ μλͺ»λμκ±°λ κ³ μ₯ λ¬μ΅λκΉ, μλλ©΄ "μ€μ " clojure κ°λ°μκ° javadocμ μ‘°νν νμκ° μμμ΅λκΉ? μ΄λ λμκ² μλΉν λΉνΉμ€λ¬μΈ κ²μ λλ€.
λ΄ ν
μ€νΈ μΌμ΄μ€λ cider-doc
java.util.concurrent.PriorityBlockingQueue
λ₯Ό ν΅ν΄ μ‘°ννλ κ²μ
λλ€. κ²°κ³Όλ https://imgur.com/a/TaQXfpS μ
λλ€.
κ°λ¨ν λ§ν΄μ: μ΄κ²μ λμκ²λ λͺ¨λμκ²λ λ§κ°μ§ κ²λΏμ΄λ©° μ¬λλ€μ΄ μμ΄ μ΄λ»κ² λμ²ν©λκΉ?
PPS: java-doc λ° java-srcκ° μ€μΉλ Java 8 - 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-nrepl 0.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) λ° μ°λΆν¬ openjdk-11-jre-headless_11.0.1+13-2ubuntu1_amd64
ν¨ν€μ§μμ μλ°λ /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
λλ μμΉλ¦¬λ μ€
# ~ $ 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.xml νμΌκ³Ό κ°μ "νμ€"μ΄ μλ κ² κ°μ΅λλ€. μ§μ μ λ§λ‘ μλ―Έκ° μμ΅λλ€)
κ·Έκ² λκ΅°κ°μκ² λμμ΄ λλμ?
λ€, λμμ΄ λ©λλ€! 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 νμ λλ ν 리λ μ¬λΌμ§κ³ κ·Έ λ΄μ©μ java.home
κ° κ°λ¦¬ν€λ JDK 루νΈλ‘ ν μμ€ μλ‘ λ³ν©λ©λλ€.
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 μ°Έμ‘°)
λ°λΉμ νμ λ°°ν¬ν μ¬μ©μλ₯Ό μν΄ openjdk-11-source
ν¨ν€μ§λ src.zip
λν κΉ¨μ§ μ¬λ³Όλ¦ λ§ν¬λ₯Ό μ€μΉν©λλ€(https://bugs.launchpad.net/ubuntu/+source/openjdk-lts μ°Έμ‘°). //λ²κ·Έ/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μ squelchable κ²½κ³ λ₯Ό μΈμνλ κ²λ μ’μ΅λλ€.
μ΄κ²μ΄ ν©λ¦¬μ μΌλ‘ λ€λ¦¬λ©΄ 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 μ΄ μμ λ λκΉμ§ Java 11μμ μ΄ λ¬Έμ κ° ν΄κ²°λ κ² κ°μ΅λλ€.
κ·Έλ¬λ Java 8μ μλν΄μΌ ν©λλ€. μλμΌλ‘ μΆκ°λμ΄μΌ νλ ν΄λμ€ κ²½λ‘μ src.zip
λ° tools.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λ μ΅κ·Όμ μ°κ²°λ Orchard λ¬Έμ λ₯Ό ν΄κ²°νμΌλ―λ‘ μ΄ λ¬Έμ λ₯Ό λ«μ μ μμ κ² κ°μ΅λλ€.
λ°λΉμ 10μμλ openjdk-11-source
μ€μΉνκΈ° src.zip
μ¬λ³Όλ¦ λ§ν¬λ₯Ό μλνλλ° μ΄λ―Έ μμ±λ κ²μ λ°κ²¬νμ΅λλ€.
Emacs 26.3 CIDER 0.24.0 nREPL 0.6.0 Java 1.8.0_242κ° μλ Ubuntu 18.04μμ Java μμ€κ° ν¬ν¨λ zipμ΄ ν¬ν¨λ λλ ν 리λ₯Ό 리μμ€λ‘ Leiningen νλ‘ν( ~/.lein/profiles.clj
)μ μΆκ°νμ΅λλ€.
{:user {:resource-paths ["/usr/lib/jvm/openjdk-8"]}}