Revise docker layer

Adjust the documentation to be more clear how to activate the new lsp feature.
Simplify layer setup code.
Provide missing company-lsp integration in feature list.
Remove obsolete tests for a loaded lsp layer as the docker layer loads it
itself already.
This commit is contained in:
Maximilian Wolff 2019-12-01 02:03:30 +01:00
parent b26430df2a
commit 64b607ce14
No known key found for this signature in database
GPG key ID: 2DD07025BFDBD89A
4 changed files with 23 additions and 44 deletions

View file

@ -11,7 +11,6 @@
- [[#docker][Docker]]
- [[#linting][Linting]]
- [[#lsp][LSP]]
- [[#options][Options]]
- [[#usage][Usage]]
- [[#tramp-access-to-docker-containers][TRAMP access to docker containers]]
- [[#key-bindings][Key bindings]]
@ -26,6 +25,7 @@ This layer integrates basic container management into Spacemacs.
- =Docker= container and image management via [[https://github.com/Silex/docker.el][docker.el]]
- =docker-compose= integration via [[https://github.com/Silex/docker.el][docker.el]]
- Syntax checking via [[https://github.com/hadolint/hadolint][hadolint]]
- Code-Completion via =company-lsp=
* Install
** Docker
@ -37,31 +37,27 @@ You will also need the native package [[https://www.docker.com/][Docker]] for th
** Linting
For syntax checking the external library [[https://github.com/hadolint/hadolint][hadolint]] is necessary.
It can either be downloaded from [[https://github.com/hadolint/hadolint/releases/latest][=here=]] or
build locally with stack as shown below:
#+BEGIN_SRC sh
stack install hadolint
#+END_SRC
** LSP
This layer can be used with [[https://github.com/rcjsuen/dockerfile-language-server-nodejs][=dockerfile-language-server-nodejs=]] and emacs
This layer can be enhanced with [[https://github.com/rcjsuen/dockerfile-language-server-nodejs][=dockerfile-language-server-nodejs=]] 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 =dockerfile-language-server-nodejs= package with:
#+BEGIN_SRC sh
npm i -g dockerfile-language-server-nodejs
#+END_SRC
3. Enable layer integration with lsp as described in section below.
* Options
This layer also includes experimental support for =lsp-mode=. To enable language
server functionality with this layer, follow [[#lsp][the instructions for installation]],
and then install this layer with:
To do so set the layer variable =docker-dockerfile-backend= to =lsp= like shown below:
#+BEGIN_SRC emacs-lisp
(setq-default dotspacemacs-configuration-layers
'((docker :variables docker-dockerfile-backend 'lsp)))
#+END_SRC
In addition you need to install the lsp server's executable in your system.
This can be done via npm:
#+BEGIN_SRC sh
npm i -g dockerfile-language-server-nodejs
#+END_SRC
* Usage
** TRAMP access to docker containers
This relies on the [[https://github.com/emacs-pe/docker-tramp.el][docker-tramp]] package which uses =docker exec= available in

View file

@ -13,5 +13,5 @@
;; Variables
(defvar docker-dockerfile-backend nil
"The backend to use for IDE features. Possible values are `lsp'.")
(defvar docker-dockerfile-backend 'nil
"The backend to use for IDE features. Possible values are `lsp' or `nil'.")

View file

@ -9,21 +9,7 @@
;;
;;; License: GPLv3
(defun spacemacs//docker-dockerfile-backend ()
"Returns selected backend."
;; backend must be choosed explicitly with this layer
docker-dockerfile-backend)
(defun spacemacs//docker-dockerfile-setup-backend ()
"Conditionally setup docker backend."
(pcase (spacemacs//docker-dockerfile-backend)
(`lsp (spacemacs//docker-dockerfile-setup-lsp))))
;; lsp
(defun spacemacs//docker-dockerfile-setup-lsp ()
"Setup lsp backend."
(if (configuration-layer/layer-used-p 'lsp)
(lsp)
(message "`lsp' layer is not installed, please add `lsp' layer to your dotfile.")))
(pcase docker-dockerfile-backend
(`lsp (lsp))))

View file

@ -54,15 +54,12 @@
(defun docker/init-dockerfile-mode ()
(use-package dockerfile-mode
:defer t
:init
(add-hook 'dockerfile-mode-hook #'spacemacs//docker-dockerfile-setup-backend)
:init (add-hook 'dockerfile-mode-local-vars-hook #'spacemacs//docker-dockerfile-setup-backend)
:config
(progn
(spacemacs/declare-prefix-for-mode 'dockerfile-mode
"mc" "compile")
(spacemacs/set-leader-keys-for-major-mode 'dockerfile-mode
"cb" 'dockerfile-build-buffer
"cB" 'dockerfile-build-no-cache-buffer))))
(spacemacs/declare-prefix-for-mode 'dockerfile-mode "mc" "compile")
(spacemacs/set-leader-keys-for-major-mode 'dockerfile-mode
"cb" 'dockerfile-build-buffer
"cB" 'dockerfile-build-no-cache-buffer)))
(defun docker/post-init-flycheck ()
(spacemacs/enable-flycheck 'dockerfile-mode))