diff --git a/core/siren-core-modules.el b/core/siren-core-modules.el index 2e94731..a1b6181 100644 --- a/core/siren-core-modules.el +++ b/core/siren-core-modules.el @@ -189,6 +189,7 @@ (require 'siren-nginx) (require 'siren-php) (require 'siren-plantuml) +(require 'siren-protobuf) (require 'siren-ruby) (require 'siren-rust) (require 'siren-sass) diff --git a/modules/languages/siren-protobuf.el b/modules/languages/siren-protobuf.el new file mode 100644 index 0000000..458410e --- /dev/null +++ b/modules/languages/siren-protobuf.el @@ -0,0 +1,51 @@ +;;; siren-protobuf.el --- jimeh's Emacs Siren: protobuf-mode configuration. + +;;; Commentary: + +;; Basic configuration for protobuf-mode. + +;;; Code: + +(require 'siren-company) +(require 'siren-flycheck) +(require 'siren-folding) +(require 'siren-prog-mode) + +(use-package protobuf-mode + :mode "\\.proto\\'" + :hook + (protobuf-mode . siren-protobuf-mode-setup) + + :init + (defun siren-protobuf-mode-setup () + (run-hooks 'prog-mode-hook) + (c-add-style "siren" '((c-basic-offset . 2) + (indent-tabs-mode . nil)) t) + + (company-mode +1) + (subword-mode +1) + (siren-folding)) + + (defun flycheck-protobuf-buf-project-root (&optional _checker) + "Return the nearest directory holding the buf.yaml configuration." + (and buffer-file-name + (locate-dominating-file buffer-file-name "buf.yaml"))) + + :config + (unbind-key "C-c C-u" 'c-mode-base-map) + + (flycheck-define-checker protobuf-buf + "A protobuf syntax checker using buf. +See URL `https://github.com/bufbuild/buf'." + :command ("buf" "lint" "--path" source-original) + :error-patterns + ((warning line-start (file-name) ":" line ":" column ":" (message) line-end)) + :modes protobuf-mode + :enabled flycheck-protobuf-buf-project-root + :working-directory flycheck-protobuf-buf-project-root + :predicate flycheck-buffer-saved-p) + + (add-to-list 'flycheck-checkers 'protobuf-buf)) + +(provide 'siren-protobuf) +;;; siren-protobuf.el ends here