* 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