en

.ts und .spec.ts in Emacs als side-by-side

November 2021

Wenn ich Unit Tests entwickle sehe ich gerne den zu testenden Code und den Code mit den Unit Tests nebeneinander. In Emacs öffne ich dazu beide Dateien und springe dann in eine Side-by-side Ansicht.

In Emacs Lisp lässt sich dies auch schön automatisieren:

(defun ma300k-main-test-side-by-side ()
  (interactive)
  (if buffer-file-name
      (let ((dir (file-name-directory buffer-file-name))
            (base-name (ma300k-detect-typescript-base-name buffer-file-name)))
        (delete-other-windows)
        (find-file (concat dir base-name ".ts"))
        (split-window-right)
        (other-window 1)
        (find-file (concat dir base-name ".spec.ts")))
    (message "File must be a visited file.")
    ))

(defun ma300k-detect-typescript-base-name (file-name)
  (let ((dir (file-name-directory file-name))
        (fn (file-name-nondirectory file-name))
        base-name)
    (if (string-suffix-p ".spec.ts" fn)
        (substring fn 0 (* -1 (length ".spec.ts")))
      (if (string-suffix-p ".ts" fn)
          (substring fn 0 (* -1 (length ".ts")))))))

Den Aufruf von ma300k-main-test-side-by-side kann man sich auch noch auf ein Tastenkürzel legen.

(add-hook
 'typescript-mode-hook
 (lambda ()
   (define-key typescript-mode-map (kbd "M-n t 3") 'ma300k-main-test-side-by-side)))

Feedback

Falls der Artikel interessant war oder etwas unklar ist freue ich mich über Fragen per e-Mail an markus.peroebner@gmail.com.