aboutsummaryrefslogtreecommitdiff
path: root/barb-mode.el
diff options
context:
space:
mode:
Diffstat (limited to 'barb-mode.el')
-rw-r--r--barb-mode.el58
1 files changed, 58 insertions, 0 deletions
diff --git a/barb-mode.el b/barb-mode.el
new file mode 100644
index 0000000..c7bcc31
--- /dev/null
+++ b/barb-mode.el
@@ -0,0 +1,58 @@
+;;; barb-mode.el --- major mode for barb files -*- lexical-binding: t; -*-
+(eval-when-compile
+ (require 'rx))
+
+(defconst barb--font-lock-defaults
+ (let ((keywords '("GET" "POST" "PUT" "PATCH" "DELETE" "HEAD")))
+ `(((,(rx-to-string `(: (or ,@keywords))) 0 font-lock-keyword-face)
+ ("^#\\([[:word:]]+\\):" 1 font-lock-function-name-face)))))
+
+(defvar barb-mode-syntax-table
+ (let ((st (make-syntax-table)))
+ st))
+
+(defun barb-indent-line ()
+ "Indent the current line - I do nothing."
+ (save-excursion
+ (back-to-indentation)
+ (let ((start-point (point)))
+ (move-beginning-of-line nil)
+ (let* ((line-start (point))
+ (indent (floor (/ (- start-point line-start) tab-width))))
+ (indent-to (* (1+ indent) tab-width)))))
+ (back-to-indentation))
+
+(defvar barb-mode-abbrev-table nil
+ "Abbreviation table used by `barb-mode' buffers.")
+(define-abbrev-table 'barb-mode-abbrev-table
+ '())
+
+(defun barb-run-file ()
+ "Run the current file with `barb'."
+ (interactive)
+ (save-excursion
+ (save-buffer)
+ (let ((active-buf (current-buffer)))
+ (with-output-to-temp-buffer "*barb*"
+ (let ((buffer (get-buffer "*barb*")))
+ (call-process "/home/etenil/.cargo/bin/barb" nil t nil (buffer-file-name active-buf)))))))
+
+
+(defvar barb-mode-map
+ (let ((map (make-sparse-keymap)))
+ (define-key map (kbd "C-c C-c") #'barb-run-file)
+ map))
+
+;;;###autoload
+(define-derived-mode barb-mode prog-mode "barb"
+ "Major mode for barb files."
+ :abbrev-table barb-mode-abbrev-table
+ (setq font-lock-defaults barb--font-lock-defaults)
+ ;(setq-local comment-start "##")
+ (setq-local indent-line-function #'barb-indent-line)
+ (setq-local indent-tabs-mode t))
+
+;;;###autoload
+(add-to-list 'auto-mode-alist '("\\.barb" . barb-mode))
+
+(provide 'barb-mode)