From 64b607ce14af4f554220962e1997dc4697a87d36 Mon Sep 17 00:00:00 2001 From: Maximilian Wolff Date: Sun, 1 Dec 2019 02:03:30 +0100 Subject: [PATCH] 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. --- layers/+tools/docker/README.org | 32 ++++++++++++++------------------ layers/+tools/docker/config.el | 4 ++-- layers/+tools/docker/funcs.el | 18 ++---------------- layers/+tools/docker/packages.el | 13 +++++-------- 4 files changed, 23 insertions(+), 44 deletions(-) diff --git a/layers/+tools/docker/README.org b/layers/+tools/docker/README.org index 1dffdb28c..ec5c8bd17 100644 --- a/layers/+tools/docker/README.org +++ b/layers/+tools/docker/README.org @@ -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 diff --git a/layers/+tools/docker/config.el b/layers/+tools/docker/config.el index 8836ed5f3..ddd085db4 100644 --- a/layers/+tools/docker/config.el +++ b/layers/+tools/docker/config.el @@ -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'.") diff --git a/layers/+tools/docker/funcs.el b/layers/+tools/docker/funcs.el index f51740069..4ed36c2ba 100644 --- a/layers/+tools/docker/funcs.el +++ b/layers/+tools/docker/funcs.el @@ -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)))) diff --git a/layers/+tools/docker/packages.el b/layers/+tools/docker/packages.el index 1558246c1..abaaae81d 100644 --- a/layers/+tools/docker/packages.el +++ b/layers/+tools/docker/packages.el @@ -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))