* Javascript, Typescript, JSON, YAML, Vega-Lite
- moving around: ts-movement
- selections:
- expreg
- ts-movement Hydra
- evil-textobj-tree-sitter
- folding
* JSON
** Navigator
#+begin_src emacs-lisp
(use-package json-navigator)
#+end_src
** Tree-sitter
#+begin_src emacs-lisp
(dolist (mapping
'( (json-mode . json-ts-mode)
(js-json-mode . json-ts-mode)))
(add-to-list 'major-mode-remap-alist mapping))
#+end_src
** Linting
use "jq".
** Formatting
use "jq":
#+begin_example
jq . --indent 2 File.json
jq --color-output . file1.json file1.json | less -R
command_with_json_output | jq .
jq # stdin/"interactive" mode, just enter some JSON
jq <<< '{ "foo": "lorem", "bar": "ipsum" }'
#+end_example
There is also a --sort-keys option
"jq ." is great as a pretty-printer, but it comes with a caveat: jq (up to and including jq version 1.5) will alter the values of very large and
very small numbers because it parses numeric values as IEEE 754 64-bit values. To check whether your favorite pretty-printer has the same issue,
try this value: 1e1000.
** Language Server
* Prerequisites
*** Node.js
some packages are deprecated
sudo npm install -g vega vega-lite vega-cli
sudo npm install -g vscode-json-languageserver
#+end_src
*** Configuration
#+begin_src elisp
(use-package json-ts-mode
:pin gnu
:bind (
:map json-ts-mode-map
("M-<return>" . nil)
)
:hook (
;; (json-ts-mode . ts-movement-mode)
(json-ts-mode . yas-minor-mode)
(json-ts-mode . flycheck-mode)
)
:config
(add-hook 'json-ts-mode-hook (lambda () (eglot-ensure)))
)
#+end_src
*** Configuration
#+begin_src emacs-lisp
(use-package vegalite-mode
:load-path ("ve")
:hook (
(vegalite-mode . flycheck-mode)
(vegalite-mode . abbrev-mode)
)
:config
(setq treesit-font-lock-level 2)
(add-hook 'vegalite-mode-hook (lambda () (eglot-ensure)))
)
(require 'vegalite-mode)
#+end_src