Emacs + typescript-tools + auto-complete + flymake

引き続き TypeScript の環境整備。

普通に flymake を使うと毎回 node tsc.js が走ってしまうのと取れるエラーの数に制限がかかっているのを解消するために typescript-tools からエラーをとれるようにして flymake に流しこむ。

普通に flymake の初期化を定義するとプロセス起動しかできないので、初期化関数では nil を返しておいて処理をスキップしてタイマーで実際のエラー取得をするようにした。(flymake側でプロセス呼んで標準入力読む以外の方法対応しないかなぁ)

  (defun flymake-typescript-init ()
    (run-at-time 0.1 nil 'flymake-typescript-check-error)
    nil)
  
  (add-to-list 'flymake-allowed-file-name-masks
               '("\\.ts\\'" flymake-typescript-init))

(defun flymake-typescript-check-error ()
  "Show syntax errors."
  (interactive)
  (setq flymake-last-change-time nil)
  (setq flymake-check-start-time (flymake-float-time))
  ...
  (setq flymake-new-err-info
		(flymake-parse-err-lines
		 flymake-new-err-info lines))
  (flymake-post-syntax-check 0 "tss")
  (setq flymake-is-running nil))

typescript-tools でスクリプトの編集結果を読み込めるようにしたり、コンパイルエラーをとれるようにしたりしていたら、同時期にどちらも公式側で対応されてた……。LanguageService の API を出しているだけで大差なかったのは幸いか。 clausreinke さん働き過ぎ。

https://github.com/zakki/auto-complete-ts/tree/typescript-tools