Update julia-layer

This commit is contained in:
Guido Kraemer 2019-09-08 11:52:04 +02:00 committed by smile13241324
parent dccef21e97
commit 22f51cf70a
4 changed files with 103 additions and 45 deletions

View File

@ -1474,6 +1474,7 @@ Other:
- Refactor keybindings for =ess-mode= and =ess-julia-mode=
(thanks to Guido Kraemer and bmag)
- Added Julia repl to =spacemacs/ess-start-repl= (thanks to Guido Kraemer)
- Optimize Julia layer to provide better dev experience (thanks to Guido Kraemer)
- Reorganize key bindings (refer to =ESS= section in Breaking Changes above)
- Added =xref= integration (thanks to Guido Kraemer)
- Update ess-disable-underscore-assign for ESS 18.10 (thanks to Leonard Lausen)

View File

@ -29,30 +29,17 @@ add =julia= to the existing =dotspacemacs-configuration-layers= list in this
file.
** LSP
Warning: enabling the LSP functionality within this package can cause emacs to
hang for significant lengths of time when opening a Julia file. See tip below on
using PackageCompiler.jl to mitigate this issue.
This layer can be used with [[https://github.com/JuliaEditorSupport/LanguageServer.jl][=LanguageServer.jl=]] and emacs [[https://github.com/emacs-lsp/lsp-mode][=lsp-mode=]] to provide
richer, IDE-like capabilities. To use this layer with lsp, you must do the
following:
1. Add =lsp= to =dotspacemacs-configuration-layers=.
2. Install =LanguageServer.jl= by invoking =Pkg.add("LanguageServer")= in the
Julia REPL.
2. =LanguageServer.jl= should be configured automatically, if not, see the documentation of =lsp-julia=.
3. Enable layer integration with lsp as described in section below.
=LanguageServer.jl= tends to have a very long startup time. In the worst case,
=lsp-mode= might give up on the language server before its started, but
regardless usage of =lsp-mode= with Julia can cause long delays when first
opening files. To mitigate this issue, you can try compiling =LanguageServer.jl=
ahead of time using [[https://github.com/JuliaLang/PackageCompiler.jl][=PackageCompiler.jl=]]. This drastically reduces startup time
if successful:
#+BEGIN_SRC julia
julia> Pkg.add("PackageCompiler")
julia> using PackageCompiler
julia> compile_package("LanguageServer")
#+END_SRC
opening files.
* Options
While =julia-mode= is perfectly usable without configuration or other packages,
@ -83,13 +70,39 @@ using this layer with Julia 1.0, =julia-mode-enable-lsp= should be set to =nil=.
* Key bindings
| Key binding | Description |
|-------------+------------------------------------------------------------|
| ~SPC m h h~ | Calls ~@doc~ macro on symbol under cursor. |
| ~SPC m e m~ | Expands macro under cursor. |
| ~SPC m w~ | Calls ~workspace()~ in Repl to give clean namespace. |
| ~SPC e l~ | Expands latex macro (e.g. =\delta=). |
| ~SPC m s b~ | Sends buffer to REPL. |
| ~SPC m s l~ | Sends line to REPL. |
| ~SPC m s r~ | Sends region to REPL. |
| ~SPC m r~ | Brings up Julia Repl (starts new one or focuses existing). |
| Key binding | Description |
|-------------+----------------------------------------------------------------------------------------|
| ~TAB~ | Expands latex macro (e.g. =\delta=). |
| ~SPC m l~ | Expands latex macro (e.g. =\delta=). |
|-------------+----------------------------------------------------------------------------------------|
| ~SPC m = =~ | Indent line |
| ~SPC m = d~ | Deindent line |
| ~SPC m = q~ | Indent Sexp |
|-------------+----------------------------------------------------------------------------------------|
| ~SPC m '~ | Brings up Julia Repl (starts new one or focuses existing). |
| ~SPC m r~ | Brings up Julia Repl (starts new one or focuses existing). |
| ~SPC m h h~ | Calls ~@doc~ macro on symbol under cursor. |
|-------------+----------------------------------------------------------------------------------------|
| ~SPC m s a~ | Activate the project of the current buffer (call with prefix to activate home project) |
| ~SPC m s d~ | ~cd~ into the buffer directory |
| ~SPC m s i~ | Brings up Julia Repl (starts new one or focuses existing). |
| ~SPC m s b~ | Sends buffer to REPL. |
| ~SPC m s t~ | Sends buffer to REPL via ~Revise.includet~. |
| ~SPC m s l~ | Sends line to REPL. |
| ~SPC m s s~ | Sends line to REPL. |
| ~SPC m s r~ | Sends region or line to REPL. |
| ~SPC m s m~ | Call ~@macroexpand~ on an expression |
| ~SPC m s e~ | Call ~@edit~ on an expression |
| ~SPC m s v~ | Prompt and set a Julia REPL inferior buffer name for the current buffer |
|-------------+----------------------------------------------------------------------------------------|
| ~SPC m e a~ | Activate the project of the current buffer (call with prefix to activate home project) |
| ~SPC m e d~ | ~cd~ into the buffer directory |
| ~SPC m e i~ | Brings up Julia Repl (starts new one or focuses existing). |
| ~SPC m e b~ | Sends buffer to REPL. |
| ~SPC m e t~ | Sends buffer to REPL via ~Revise.includet~. |
| ~SPC m e l~ | Sends line to REPL. |
| ~SPC m e s~ | Sends line to REPL. |
| ~SPC m e r~ | Sends region or line to REPL. |
| ~SPC m e m~ | Call ~@macroexpand~ on an expression |
| ~SPC m e e~ | Call ~@edit~ on an expression |
| ~SPC m e v~ | Prompt and set a Julia REPL inferior buffer name for the current buffer |

View File

@ -9,6 +9,24 @@
;;
;;; License: GPLv3
(defun spacemacs//julia-hash-to-alist (hash)
"Convert a `hash-table' to an `alist' for the use in a helm buffer."
(let (res)
(maphash (lambda (key value)
(push `(,key . ,value) res))
hash)
res))
(when (configuration-layer/layer-used-p 'helm)
(defun spacemacs//julia-helm-math-insert()
"Insert a utf8 symbol from `julia-latexsubs'"
(interactive)
(helm :sources (helm-build-sync-source "test"
:candidates (spacemacs//julia-hash-to-alist julia-latexsubs)
:fuzzy-match t
:action (lambda (candidate) (insert candidate)))
:buffer "*helm julia latex insert*")))
(defun spacemacs//julia-setup-buffer ()
"Setup ESS and/or lsp for buffer depending on config."
(when (not julia-mode-enable-ess)

View File

@ -14,7 +14,10 @@
(julia-mode :location elpa)
(julia-repl :location elpa)
(lsp-julia :location (recipe :fetcher github
:repo "non-Jedi/lsp-julia"))
:repo "gdkrmr/lsp-julia"
:files ("*.el"
"README.org"
"languageserver")))
flycheck
company-lsp
evil-surround
@ -33,37 +36,60 @@
julia-mode-enable-ess)
(message "`ess' layer is not installed. Please add `ess' layer to your dotfile.")))
:config (progn
(spacemacs/declare-prefix-for-mode 'julia-mode
"mh" "help")
(spacemacs/declare-prefix-for-mode 'julia-mode
"me" "eval")
(spacemacs/declare-prefix-for-mode 'julia-mode
"m=" "format")
(spacemacs/declare-prefix-for-mode 'julia-mode "m=" "format")
(spacemacs/set-leader-keys-for-major-mode 'julia-mode
"el" 'julia-latexsub
"==" 'julia-indent-line))))
"l" 'julia-latexsub-or-indent
"==" 'julia-indent-line
"=d" 'julia-manual-deindent
"=q" 'prog-indent-sexp)
(when (configuration-layer/package-used-p 'helm)
(spacemacs/declare-prefix-for-mode 'julia-mode "mi" "insert")
(spacemacs/set-leader-keys-for-minor-mode 'julia-mode
"ii" 'spacemacs//julia-helm-math-insert)
)
)))
(defun julia/init-julia-repl ()
(use-package julia-repl
:defer t
:init (progn
(spacemacs/register-repl 'julia-repl 'julia-repl
"julia-repl"))
(spacemacs/register-repl 'julia-repl 'julia-repl "julia-repl"))
:config (progn
(spacemacs/declare-prefix-for-mode 'julia-repl-mode
"ms" "send")
(spacemacs/set-leader-keys-for-minor-mode
'julia-repl-mode
"'" 'julia-repl-edit
(spacemacs/declare-prefix-for-mode 'julia-mode "mh" "help")
(spacemacs/declare-prefix-for-mode 'julia-mode "me" "eval")
(spacemacs/declare-prefix-for-mode 'julia-mode "ms" "send")
(spacemacs/set-leader-keys-for-minor-mode 'julia-repl-mode
"'" 'julia-repl
"r" 'julia-repl
"hh" 'julia-repl-doc
"w" 'julia-repl-workspace
"em" 'julia-repl-macroexpand
"r" 'julia-repl
"sa" 'julia-repl-activate-parent
"sd" 'julia-repl-cd
"si" 'julia-repl
"sb" 'julia-repl-send-buffer
"st" 'julia-repl-includet-buffer
"sl" 'julia-repl-send-line
"ss" 'julia-repl-send-line
"sr" 'julia-repl-send-region-or-line
"em" 'julia-repl-macroexpand))))
"sm" 'julia-repl-macroexpand
"se" 'julia-repl-edit
"sv" 'julia-repl-prompt-set-inferior-buffer-name-suffix
"ea" 'julia-repl-activate-parent
"ed" 'julia-repl-cd
"eb" 'julia-repl-send-buffer
"et" 'julia-repl-includet-buffer
"el" 'julia-repl-send-line
"es" 'julia-repl-send-line
"er" 'julia-repl-send-region-or-line
"em" 'julia-repl-macroexpand
"ee" 'julia-repl-edit
"ev" 'julia-repl-prompt-set-inferior-buffer-name-suffix
))))
(defun julia/post-init-evil-surround ()
(with-eval-after-load 'evil-surround