From e481894fcbbbcfbc8f373bc111db609c9acecb40 Mon Sep 17 00:00:00 2001 From: syl20bnr Date: Mon, 14 May 2018 00:46:45 -0400 Subject: [PATCH] Create new json layer extracted from javascript layer * add some goodies like `json-reformat` and `json-navigator` * make the javascript layer dependent on the json layer --- layers/+lang/javascript/README.org | 8 --- layers/+lang/javascript/layers.el | 2 +- layers/+lang/javascript/packages.el | 22 ++------- layers/+lang/json/README.org | 74 ++++++++++++++++++++++++++++ layers/+lang/json/funcs.el | 34 +++++++++++++ layers/+lang/json/img/json.png | Bin 0 -> 21056 bytes layers/+lang/json/packages.el | 55 +++++++++++++++++++++ 7 files changed, 167 insertions(+), 28 deletions(-) create mode 100644 layers/+lang/json/README.org create mode 100644 layers/+lang/json/funcs.el create mode 100644 layers/+lang/json/img/json.png create mode 100644 layers/+lang/json/packages.el diff --git a/layers/+lang/javascript/README.org b/layers/+lang/javascript/README.org index 1d35d637d..961edb187 100644 --- a/layers/+lang/javascript/README.org +++ b/layers/+lang/javascript/README.org @@ -21,7 +21,6 @@ - [[#formatting-web-beautify][Formatting (web-beautify)]] - [[#documentation-js-doc][Documentation (js-doc)]] - [[#auto-complete-and-documentation-tern][Auto-complete and documentation (tern)]] - - [[#json][JSON]] - [[#repl-skewer-mode][REPL (skewer-mode)]] * Description @@ -33,7 +32,6 @@ This layer adds support for the JavaScript language using [[https://github.com/m - Refactoring: done using [[https://github.com/magnars/js2-refactor.el][js2-refactor]]. - Auto-completion and documentation - Formatting with [[https://github.com/yasuyk/web-beautify][web-beautify]] -- Get the path to a JSON value with [[https://github.com/Sterlingg/json-snatcher][json-snatcher]] - REPL available via [[https://github.com/skeeto/skewer-mode][skewer-mode]] and [[https://github.com/pandeiro/livid-mode][livid-mode]] * Install @@ -240,12 +238,6 @@ You can check more [[https://github.com/mooz/js-doc/][here]] | ~SPC m h t~ | find the type of the thing under the cursor | | ~SPC m r r V~ | rename variable under the cursor using tern | -** JSON - -| Key Binding | Description | -|-------------+------------------------------------| -| ~SPC m h p~ | Get the path of the value at point | - ** REPL (skewer-mode) | Key Binding | Description | diff --git a/layers/+lang/javascript/layers.el b/layers/+lang/javascript/layers.el index e87ef92e6..4dd66ec4f 100644 --- a/layers/+lang/javascript/layers.el +++ b/layers/+lang/javascript/layers.el @@ -9,4 +9,4 @@ ;; ;;; License: GPLv3 -(configuration-layer/declare-layers '(node)) +(configuration-layer/declare-layers '(node json)) diff --git a/layers/+lang/javascript/packages.el b/layers/+lang/javascript/packages.el index eeee47c10..55ad46143 100644 --- a/layers/+lang/javascript/packages.el +++ b/layers/+lang/javascript/packages.el @@ -24,8 +24,6 @@ js-doc js2-mode js2-refactor - json-mode - json-snatcher livid-mode (lsp-javascript-typescript :requires lsp-mode @@ -36,10 +34,8 @@ web-beautify)) (defun javascript/post-init-add-node-modules-path () - (spacemacs/add-to-hooks #'add-node-modules-path - '(css-mode-hook - js2-mode-hook - json-mode-hook))) + (spacemacs/add-to-hooks #'add-node-modules-path '(css-mode-hook + js2-mode-hook))) (defun javascript/post-init-counsel-gtags () (spacemacs/counsel-gtags-define-keys-for-mode 'js2-mode)) @@ -55,8 +51,7 @@ :defer t)) (defun javascript/post-init-flycheck () - (dolist (mode '(js2-mode json-mode)) - (spacemacs/enable-flycheck mode))) + (spacemacs/enable-flycheck 'js2-mode)) (defun javascript/post-init-ggtags () (add-hook 'js2-mode-local-vars-hook #'spacemacs/ggtags-mode-enable)) @@ -161,17 +156,6 @@ "xmj" 'js2r-move-line-down "xmk" 'js2r-move-line-up)))) -(defun javascript/init-json-mode () - (use-package json-mode - :defer t)) - -(defun javascript/init-json-snatcher () - (use-package json-snatcher - :defer t - :config - (spacemacs/set-leader-keys-for-major-mode 'json-mode - "hp" 'jsons-print-path))) - (defun javascript/init-livid-mode () (use-package livid-mode :defer t diff --git a/layers/+lang/json/README.org b/layers/+lang/json/README.org new file mode 100644 index 000000000..1e59fa655 --- /dev/null +++ b/layers/+lang/json/README.org @@ -0,0 +1,74 @@ +#+TITLE: JSON layer + +[[file:img/json.png]] + +* Table of Contents :TOC_4_gh:noexport: +- [[#description][Description]] + - [[#features][Features:]] +- [[#install][Install]] + - [[#configuration][Configuration]] +- [[#usage][Usage]] + - [[#reformat][Reformat]] + - [[#display-navigable-hierarchy][Display navigable hierarchy]] +- [[#key-bindings][Key Bindings]] + - [[#json-hierarchy][JSON hierarchy]] + +* Description +This layer adds support for JSON files with [[https://github.com/joshwnj/json-mode][json-mode]] + +** Features: +- Syntax highlighting +- Auto-completion +- Get the path to a JSON value with [[https://github.com/Sterlingg/json-snatcher][json-snatcher]] +- Navigate JSON hierarchy with [[https://github.com/DamienCassou/json-navigator][json-nagivator]] + +* Install +To use this configuration layer, add it to your =~/.spacemacs=. You will need to +add =json= to the existing =dotspacemacs-configuration-layers= list in this file. + +** Configuration +To define the default indentation set the variable =js-indent-level=. + +* Usage +** Reformat +~SPC m =~ will reformat the whole buffer or the active region. Use numerical +prefix argument to specify a different indentation than =js-indent-level=. +Use the universal prefix argument to print decoded strings, for instance: + +#+BEGIN_EXAMPLE json +{"name":"foo\"bar","nick":"foo \u00e4 bar","description":"
\nbaz\n
","home":"/home/foobar"} + +Will be reformated: + +{ + "name": "foo\"bar", + "nick": "foo รค bar", + "description": "
+  baz
+  
", + "home": "/home/foobar" +} + +#+END_EXAMPLE + +** Display navigable hierarchy +~SPC m h h~ displays the hierarchy for the whole JSON document or the active +region. Use the universal prefix argument ~SPC u SPC m h h~ to create the +hierarchy for the JSON *after* the point. + +* Key Bindings + +| Key Binding | Description | +|-------------+---------------------------------------------| +| ~SPC m =~ | DWIM Reformat JSON | +| ~SPC m h p~ | Get the path of the value at point | +| ~SPC m h h~ | DWIM navigate JSON hierarchy | +| ~SPC m h H~ | Navigate JSON hierarchy of the whole buffer | + +** JSON hierarchy + +| Key Binding | Description | +|-------------+----------------------| +| ~RET~ | Expand/Collapse node | +| ~TAB~ | Select next node | +| ~S-TAB~ | Select previous node | diff --git a/layers/+lang/json/funcs.el b/layers/+lang/json/funcs.el new file mode 100644 index 000000000..30e6a152c --- /dev/null +++ b/layers/+lang/json/funcs.el @@ -0,0 +1,34 @@ +;;; funcs.el --- JSON Layer functions File for Spacemacs +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Author: Muneeb Shaikh +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + +(defun spacemacs/json-navigator-dwim (arg &optional start end) + "Display the JSON hierarchy of the whole buffer or the active region. +If ARG is a universal prefix argument then display the hierarchy after point." + (interactive "P\nr") + (if arg + (json-navigator-navigate-after-point) + (if (equal start end) + (save-excursion (json-navigator-navigate-region (point-min) (point-max))) + (json-navigator-navigate-region start end)))) + +(defun spacemacs/json-reformat-dwim (arg &optional start end) + "Reformat the whole buffer of the active region. +If ARG is non-nil (universal prefix argument) then try to decode the strings. +If ARG is a numerical prefix argument then specify the indendation level." + (interactive "P\nr") + (let ((json-reformat:indent-width js-indent-level) + (json-reformat:pretty-string? nil)) + (cond + ((numberp arg) (setq json-reformat:indent-width arg)) + (arg (setq json-reformat:pretty-string? t))) + (if (equal start end) + (save-excursion (json-reformat-region (point-min) (point-max))) + (json-reformat-region start end)))) diff --git a/layers/+lang/json/img/json.png b/layers/+lang/json/img/json.png new file mode 100644 index 0000000000000000000000000000000000000000..41e3248f7ff5063769eb5bc03546aeabf702b242 GIT binary patch literal 21056 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 literal 0 HcmV?d00001 diff --git a/layers/+lang/json/packages.el b/layers/+lang/json/packages.el new file mode 100644 index 000000000..e8a5db14e --- /dev/null +++ b/layers/+lang/json/packages.el @@ -0,0 +1,55 @@ +;;; packages.el --- JSON Layer packages File for Spacemacs +;; +;; Copyright (c) 2012-2018 Sylvain Benner & Contributors +;; +;; Author: Sylvain Benner +;; URL: https://github.com/syl20bnr/spacemacs +;; +;; This file is not part of GNU Emacs. +;; +;;; License: GPLv3 + + +(setq json-packages + '( + add-node-modules-path + flycheck + json-mode + json-navigator + json-reformat + json-snatcher + )) + +(defun json/post-init-add-node-modules-path () + (add-hook json-mode-hook #'add-node-modules-path)) + +(defun json/post-init-flycheck () + (spacemacs/enable-flycheck 'json-mode)) + +(defun json/init-json-mode () + (use-package json-mode + :defer t)) + +(defun json/init-json-navigator () + (use-package json-navigator + :defer t + :init + (progn + (evilified-state-evilify-map tabulated-list-mode-map + :mode special-mode) + (spacemacs/set-leader-keys-for-major-mode 'json-mode + "hh" 'spacemacs/json-navigator-dwim)))) + +(defun json/init-json-reformat () + (use-package json-reformat + :defer t + :init + (spacemacs/set-leader-keys-for-major-mode 'json-mode + "=" 'spacemacs/json-reformat-dwim))) + +(defun json/init-json-snatcher () + (use-package json-snatcher + :defer t + :config + (spacemacs/set-leader-keys-for-major-mode 'json-mode + "hp" 'jsons-print-path)))