#+TITLE: Tide Layer #+TAGS: layer|tool * Table of Contents :TOC_5_gh:noexport: - [[#description][Description]] - [[#features][Features:]] - [[#install][Install]] - [[#key-bindings][Key bindings]] - [[#major-mode][Major Mode]] - [[#reference-major-mode][Reference Major Mode]] * Description This layer installs [[https://github.com/ananthakumaran/tide][tide]] package which allows communication with [[https://github.com/Microsoft/TypeScript/wiki/Standalone-Server-%28tsserver%29][standalone typescript server]] =tsserver= for JavaScript/TypeScript development. ** Features: - First class support from =tsserver= just like =vscode=: speed and accuracy - Linter - Refactor - Go to definition - Find references * Install See [[https://github.com/ananthakumaran/tide][tide]] for details. First you must have `tsserver` installed in your project or globally: #+BEGIN_SRC sh npm install -g typescript #+END_SRC Next enable this layer in your =~/.spacemacs=. You will need to add =tide= to the existing =dotspacemacs-configuration-layers= list in this file. Then set the backend variables for JavaScript layer, React layer and TypeScript layer to =tide= in =dotspacemacs-configuration-layers= #+BEGIN_SRC elisp (javascript :variables javascript-backend 'tide) (typescript :variables typescript-backend 'tide) #+END_SRC Both =javascript-backend= and =typescript-backend= can be set per project. When using this layer, make sure [[http://www.typescriptlang.org/docs/handbook/tsconfig-json.html][tsconfig.json]] or [[https://code.visualstudio.com/docs/languages/jsconfig][jsconfig.json]] is present in the root folder of the project. Example from emacs tide package: For JavaScript projects you may want to create =jsconfig.json= in the root folder of your project. =jsconfig.json= is =tsconfig.json= with allowjs attribute set to true. #+BEGIN_SRC json { "compilerOptions": { "target": "es2017", "allowSyntheticDefaultImports": true, "noEmit": true, "checkJs": true, "jsx": "react", "lib": [ "dom", "es2017" ] } } #+END_SRC Without this file =tsserver= will pick up current folder as project root. * Key bindings ** Major Mode | Key binding | Description | |-------------+---------------------------------------------------| | ~SPC m E d~ | add =tslint:disable-next-line= at point | | ~SPC m E e~ | fix thing at point | | ~SPC m g b~ | jump back | | ~SPC m g g~ | jump to entity's definition | | ~SPC m g t~ | jump to entity's type definition | | ~SPC m g r~ | references | | ~SPC m h h~ | documentation at point | | ~SPC m r i~ | organize imports | | ~SPC m r r~ | rename symbol | | ~SPC m r f~ | rename file | | ~SPC m S r~ | restart server | | ~SPC m S j~ | create a barebone =jsconfig.json= at project root | ** Reference Major Mode | Key binding | Description | |-------------+-------------------------| | ~C-j~ | find previous reference | | ~C-k~ | find next reference | | ~C-l~ | goto reference |