Emacs
Bazel

EmacsでBazelビルドコマンドを実行する

More than 1 year has passed since last update.

Bazelをビルドシステムとして用いている場合に便利なコマンドです。
新しいモジュールとユニットテストを書く場合とか、
モジュールを大幅に変更する場合などを想定しています。
なので、エラーログも出来る限りたくさん出すようにしてます。

これで実行するとエラーが出た行に飛べたりするので、ターミナルで実行する場合と比べて結構便利です。
プロジェクト管理用のEmacs LispであるProjectileがインストールされている前提です。

キーバインド

  • ソースファイル編集中にC-c cで現在のバッファに関連したビルド&テストを実行。
  • C-c bでBazelの全体のビルド&テストを実行します。

ソースコード

;; requireしてなければ
(require 'projectile)

(defun find-parent-directory-with-file(name)
  (projectile-locate-dominating-file (file-truename (buffer-file-name)) name))

(defun bazel-build-current ()
  "Build & test in the first parent directory containing BUILD."
  (interactive)
  (let ((default-directory (find-parent-directory-with-file  "BUILD")))
    (if default-directory
    (compile "bazel test ...  --test_output=all --test_arg=--log_level=message")
      (error "BUILD file not found in the parent directories"))))

(define-key c++-mode-map (kbd "C-c n") 'bazel-build-current)

(defun bazel-build-workspace ()
  "Build & test in the first parent directory containing WORKSPACE."
  (interactive)
  (let ((default-directory (find-parent-directory-with-file  "WORKSPACE")))
    (if default-directory
    (compile "bazel test ...")
      (error "WORKSPACE file not found in the parent directories"))))

(define-key c++-mode-map (kbd "C-c b") 'bazel-build-workspace)