]> code.delx.au - dotemacs/blobdiff - lisp/my-file-modes.el
Improved tide-project-root to understand git and package.json
[dotemacs] / lisp / my-file-modes.el
index b430f559413d1eb1bbc7bd5b7b0ab19e712e48af..a010ac7e68a865d4683ff0019017d725bcd22f2c 100644 (file)
 
 (require 'json-mode)
 (require 'js)
-(add-hook 'json-mode-hook
-          (lambda ()
-            (set (make-local-variable 'js-indent-level) 2)))
-
 (require 'js2-mode)
+(require 'typescript-mode)
+(require 'tide)
 (add-to-list 'auto-mode-alist '("\\.js\\'" . js2-mode))
 (add-to-list 'interpreter-mode-alist '("node" . js2-mode))
 (setq js2-concat-multiline-strings 'eol)
 (setq js2-mode-show-parse-errors nil)
 (setq js2-mode-show-strict-warnings nil)
 (setq js--declaration-keyword-re "x^") ; declarations should have normal indentation
-(require 'js2-refactor)
+
+(add-hook 'js2-mode-hook #'tide-setup)
 (add-hook 'js2-mode-hook #'js2-refactor-mode)
+(add-hook 'typescript-mode-hook #'tide-setup)
+(add-hook 'typescript-mode-hook #'js2-refactor-mode)
+
+(defun tide-project-root ()
+  (or
+   tide-project-root
+   (let ((root (or (locate-dominating-file default-directory "tsconfig.json")
+                   (locate-dominating-file default-directory "jsconfig.json")
+                   (locate-dominating-file default-directory ".git")
+                   (locate-dominating-file default-directory "package.json"))))
+     (unless root
+       (message (tide-join (list "Couldn't locate JavaScript project root folder. Using '" default-directory "' as project root.")))
+       (setq root default-directory))
+     (let ((full-path (expand-file-name root)))
+       (setq tide-project-root full-path)
+       full-path))))
+
+(require 'js2-refactor)
 (js2r-add-keybindings-with-prefix "C-c C-m")
 (setq js2r-always-insert-parens-around-arrow-function-params t)
 (setq js2r-prefered-quote-type 2)
-(when (require 'tern nil 'noerror)
-  (add-hook 'js2-mode-hook (lambda () (tern-mode t))))
-(defun tern-project-dir ()
-  (or (and (equal tern-last-file-name (buffer-file-name)) tern-project-dir)
-      (and (not (buffer-file-name)) (setf tern-project-dir ""))
-      (setf tern-project-dir (locate-dominating-file default-directory ".git")))
-  ;; Track the file name to detect if it changed, which means the project
-  ;; directory needs to be found again.
-  (setf tern-last-file-name (buffer-file-name))
-  tern-project-dir)
-
-
-(when (require 'ledger-mode nil 'noerror)
-  (add-to-list 'auto-mode-alist '("\\.ledger\\'" . ledger-mode))
-  (setq ledger-post-amount-alignment-column 72)
-  (setq ledger-reconcile-default-commodity "AUD")
-  (setq ledger-clear-whole-transactions t))
+
+(require 'rjsx-mode)
+
+
+(require 'ledger-mode nil 'noerror)
+(add-to-list 'auto-mode-alist '("\\.ledger\\'" . ledger-mode))
+(setq ledger-post-amount-alignment-column 72)
+(setq ledger-reconcile-default-commodity "AUD")
+(setq ledger-clear-whole-transactions t)
 
 (require 'markdown-mode)
 (setq markdown-command "markdown_py -x markdown.extensions.smart_strong -x markdown.extensions.fenced_code -x markdown.extensions.nl2br")
@@ -79,6 +88,9 @@
 (require 'slime)
 (setq inferior-lisp-program "sbcl")
 
+(require 'sh-script)
+(setq sh-use-smie nil)
+
 (require 'ssh-file-modes)
 
 (when (require 'stumpwm-mode nil 'noerror)