git.fiddlerwoaroof.com
Browse code

refactor(emacs,js): move javascript to its own configuration file

Edward Langley authored on 04/05/2021 01:21:27
Showing 2 changed files
... ...
@@ -380,73 +380,7 @@
380 380
 
381 381
 
382 382
 
383
-(use-package js2-mode
384
-  :ensure t
385
-  :defer t
386
-  :commands js2-mode
387
-  :config
388
-  (define-key js-mode-map (kbd "M-.") nil)
389
-  (define-key js2-mode-map (kbd "M-.") nil)
390
-  (modify-syntax-entry ?_ "w" js2-mode-syntax-table)
391
-  (add-to-list 'interpreter-mode-alist (cons "node" 'js2-mode))
392
-  (setq-default js2-basic-offset 4)
393
-  (setq-default js-indent-level 4)
394
-  (add-hook 'js2-mode-hook 'lsp)
395
-  (add-hook 'js2-mode-hook 'flycheck-mode)
396
-  (customize-set-variable 'js2-mode-show-parse-errors nil)
397
-  (customize-set-variable 'js2-strict-missing-semi-warning nil)
398
-  (customize-set-variable 'js2-strict-trailing-comma-warning nil)
399
-  (customize-set-variable 'js2-strict-inconsistent-return-warning nil))
400
-
401
-(use-package js
402
-  :ensure t
403
-  :config
404
-  (modify-syntax-entry ?_ "w" js-mode-syntax-table)
405
-
406
-  ;;; indent ternaries with arrow function correctly---
407
-  (defun js--looking-at-operator-p ()
408
-    "Return non-nil if point is on a JavaScript operator, other than a comma."
409
-    (save-match-data
410
-      (and (looking-at js--indent-operator-re)
411
-           (or (not (eq (char-after) ?:))
412
-               (save-excursion
413
-                 (js--backward-syntactic-ws)
414
-                 (when (memq (char-before) '(?\) ?})) (backward-list))
415
-                 (and (js--re-search-backward "[?:{]\\|\\_<case\\_>" nil t)
416
-                      (eq (char-after) ??))))
417
-           (not (and
418
-                 (eq (char-after) ?/)
419
-                 (save-excursion
420
-                   (eq (nth 3 (syntax-ppss)) ?/))))
421
-           (not (and
422
-                 (eq (char-after) ?*)
423
-                 ;; Generator method (possibly using computed property).
424
-                 (looking-at (concat "\\* *\\(?:\\[\\|" js--name-re " *(\\)"))
425
-                 (save-excursion
426
-                   (js--backward-syntactic-ws)
427
-                   ;; We might misindent some expressions that would
428
-                   ;; return NaN anyway.  Shouldn't be a problem.
429
-                   (memq (char-before) '(?, ?} ?{)))))))))
430
-
431
-(use-package vue-mode
432
-  :ensure t
433
-  :config
434
-  (add-hook 'vue-mode
435
-            'prettier-js-mode)
436
-  (add-hook 'vue-mode
437
-            'flycheck-mode))
438
-
439
-(use-package prettier-js
440
-  :ensure t
441
-  :init
442
-  (add-hook 'js2-mode-hook 'prettier-js-mode)
443
-  (add-hook 'css-mode 'prettier-js-mode))
444
-
445
-(use-package typescript-mode
446
-  :ensure t
447
-  :config
448
-  (add-to-list 'auto-mode-alist
449
-               '("\\.tsx$" . typescript-mode)))
383
+(load-package-configuration 'javascript)
450 384
 
451 385
 (use-package direnv
452 386
   :ensure t
... ...
@@ -454,37 +388,6 @@
454 388
   (direnv-mode 1)
455 389
   (add-hook 'js2-mode-hook 'direnv-mode)
456 390
   (add-hook 'typescript-mode-hook 'direnv-mode))
457
-
458
-(use-package rjsx-mode
459
-  :ensure t
460
-  :config
461
-  (define-key rjsx-mode-map (kbd "M-.") nil)
462
-  (add-to-list 'auto-mode-alist '("\\.js$" . rjsx-mode)))
463
-
464
-(comment
465
- (use-package tern
466
-   :config
467
-   (add-hook 'js-mode-hook (lambda () (tern-mode t)))
468
-   (add-hook 'js2-mode-hook (lambda () (tern-mode t))))
469
-
470
- (use-package company-tern
471
-   :ensure t
472
-   :config
473
-   (add-to-list 'company-backends 'company-tern)
474
-   (setq company-tooltip-align-annotations t)))
475
-
476
-(use-package jest
477
-  :ensure t
478
-  :config
479
-  (defun jest--project-root ()
480
-    "Find the project root directory."
481
-    (let ((closest-package-json (fwoar--find-package-json))
482
-          (projectile-root (projectile-project-root)))
483
-      (message "%s <-> %s" closest-package-json projectile-root)
484
-      (if (s-prefix-p projectile-root closest-package-json)
485
-          closest-package-json
486
-        projectile-root))))
487
-
488 391
 
489 392
 (defun more-than-one-project-file-p ()
490 393
   (= (length (projectile-select-files (projectile-current-project-files)))
491 394
new file mode 100644
... ...
@@ -0,0 +1,163 @@
1
+(use-package js2-mode
2
+  :ensure t
3
+  :defer t
4
+  :commands js2-mode
5
+  :config
6
+  (define-key js-mode-map (kbd "M-.") nil)
7
+  (define-key js2-mode-map (kbd "M-.") nil)
8
+  (modify-syntax-entry ?_ "w" js2-mode-syntax-table)
9
+  (add-to-list 'interpreter-mode-alist (cons "node" 'js2-mode))
10
+  (setq-default js2-basic-offset 4)
11
+  (setq-default js-indent-level 4)
12
+  (define-key js2-mode-map (kbd "<leader>t") 'fwoar/trigger-jest)
13
+  (add-hook 'js2-mode-hook 'flycheck-mode)
14
+  (customize-set-variable 'js2-mode-show-parse-errors nil)
15
+  (customize-set-variable 'js2-strict-missing-semi-warning nil)
16
+  (customize-set-variable 'js2-strict-trailing-comma-warning nil)
17
+  (customize-set-variable 'js2-strict-inconsistent-return-warning nil))
18
+
19
+(use-package js
20
+  :ensure t
21
+  :config
22
+  (modify-syntax-entry ?_ "w" js-mode-syntax-table)
23
+
24
+  ;;; indent ternaries with arrow function correctly---
25
+  (defun js--looking-at-operator-p ()
26
+    "Return non-nil if point is on a JavaScript operator, other than a comma."
27
+    (save-match-data
28
+      (and (looking-at js--indent-operator-re)
29
+           (or (not (eq (char-after) ?:))
30
+               (save-excursion
31
+                 (js--backward-syntactic-ws)
32
+                 (when (memq (char-before) '(?\) ?})) (backward-list))
33
+                 (and (js--re-search-backward "[?:{]\\|\\_<case\\_>" nil t)
34
+                      (eq (char-after) ??))))
35
+           (not (and
36
+                 (eq (char-after) ?/)
37
+                 (save-excursion
38
+                   (eq (nth 3 (syntax-ppss)) ?/))))
39
+           (not (and
40
+                 (eq (char-after) ?*)
41
+                 ;; Generator method (possibly using computed property).
42
+                 (looking-at (concat "\\* *\\(?:\\[\\|" js--name-re " *(\\)"))
43
+                 (save-excursion
44
+                   (js--backward-syntactic-ws)
45
+                   ;; We might misindent some expressions that would
46
+                   ;; return NaN anyway.  Shouldn't be a problem.
47
+                   (memq (char-before) '(?, ?} ?{)))))))))
48
+
49
+(defun fwoar/typescript-mode-hook ()
50
+  (tree-sitter-require 'typescript)
51
+  (when (s-suffix-p ".tsx" buffer-file-name)
52
+    (setq-local tree-sitter-language (tree-sitter-require 'tsx)))
53
+  (flycheck-mode 1)
54
+  (lsp)
55
+  (prettier-js-mode 1)
56
+  (tree-sitter-mode 1)
57
+  (tree-sitter-hl-mode 1)
58
+  (comment
59
+   (tide-setup)
60
+   (tide-hl-identifier-mode 1))
61
+  )
62
+
63
+(use-package typescript-mode
64
+  :ensure t
65
+  :config
66
+  (define-key typescript-mode-map (kbd "<leader>t") 'fwoar/trigger-jest)
67
+  (add-hook 'typescript-mode-hook 'fwoar/typescript-mode-hook)
68
+  (add-to-list 'auto-mode-alist
69
+               '("\\.tsx$" . typescript-mode)))
70
+
71
+(use-package tree-sitter
72
+  :ensure t)
73
+(use-package tree-sitter-langs
74
+  :after tree-sitter
75
+  :ensure t)
76
+
77
+(comment
78
+ (use-package tide
79
+   :ensure t
80
+   :config
81
+   (add-hook 'js2-mode-hook 'tide-setup)
82
+   (add-hook 'typescript-mode-hook 'fwoar/typescript-mode-hook)
83
+   (add-hook 'js2-mode-hook 'tide-hl-identifier-mode)
84
+   (comment
85
+    (flycheck-add-next-checker 'javascript-eslint
86
+                               'javascript-tide
87
+                               'append))))
88
+
89
+(use-package rjsx-mode
90
+  :ensure t
91
+  :config
92
+  (add-hook 'js2-mode-hook 'lsp)
93
+  (define-key rjsx-mode-map (kbd "M-.") nil)
94
+  (add-to-list 'auto-mode-alist '("\\.js$" . rjsx-mode)))
95
+
96
+(comment
97
+ (use-package tern
98
+   :config
99
+   (add-hook 'js-mode-hook (lambda () (tern-mode t)))
100
+   (add-hook 'js2-mode-hook (lambda () (tern-mode t))))
101
+
102
+ (use-package company-tern
103
+   :ensure t
104
+   :config
105
+   (add-to-list 'company-backends 'company-tern)
106
+   (setq company-tooltip-align-annotations t)))
107
+
108
+(use-package jest
109
+  :ensure t
110
+  :config
111
+  (defun jest--project-root ()
112
+    "Find the project root directory."
113
+    (let ((closest-package-json (fwoar--find-package-json))
114
+          (projectile-root (projectile-project-root)))
115
+      (message "%s <-> %s" closest-package-json projectile-root)
116
+      (if (s-prefix-p projectile-root closest-package-json)
117
+          closest-package-json
118
+        projectile-root))))
119
+
120
+(comment
121
+ (use-package vue-mode
122
+   :ensure t
123
+   :config
124
+   (add-hook 'vue-mode
125
+             'prettier-js-mode)
126
+   (add-hook 'vue-mode
127
+             'flycheck-mode)))
128
+
129
+(use-package prettier-js
130
+  :ensure t
131
+  :delight " p"
132
+  :init
133
+  (add-hook 'js2-mode-hook 'prettier-js-mode)
134
+  (add-hook 'css-mode 'prettier-js-mode))
135
+
136
+(cl-defgeneric fwoar/test-on-save ()
137
+  (:method ()))
138
+
139
+(defvar-local fwoar/*test-file-name* nil)
140
+(defun fwoar/trigger-jest ()
141
+  (interactive)
142
+  (when-let ((test-name (if fwoar/*test-file-name*
143
+                            fwoar/*test-file-name*
144
+                          (setq-local fwoar/*test-file-name*
145
+                                      (if (projectile-test-file-p buffer-file-name)
146
+                                          buffer-file-name
147
+                                        (projectile-find-implementation-or-test buffer-file-name))))))
148
+    (let ((proc (make-network-process
149
+                 :name "jest-comm"
150
+                 :buffer "*jest-comm*"
151
+                 :family 'local
152
+                 :service "/tmp/jest.sock")))
153
+      (unwind-protect
154
+          (process-send-string proc test-name)
155
+        (delete-process proc)))))
156
+
157
+(cl-defmethod fwoar/test-on-save (&context (major-mode (derived-mode typescript-mode)))
158
+  (fwoar/trigger-jest))
159
+(cl-defmethod fwoar/test-on-save (&context (major-mode (derived-mode js-mode)))
160
+  (fwoar/trigger-jest))
161
+
162
+(defvar *tos-hook*
163
+  (add-hook 'after-save-hook 'fwoar/test-on-save))