diff options
| author | brotzeit <brotzeitmacher@gmail.com> | 2022-12-27 19:16:44 +0100 |
|---|---|---|
| committer | Sibi Prabakaran <sibi@psibi.in> | 2024-02-17 11:12:16 +0530 |
| commit | f74dd1cd87987ea7faf0cfc6240c2284ef9133cb (patch) | |
| tree | 1601fe6d9dab4a84a89a4e4be1fcf5b933591815 /rust-prog-mode.el | |
| parent | 8bbe70b72fde8046e12e6a41ffbee6c9f6b4ddd7 (diff) | |
| download | rust-mode-f74dd1cd87987ea7faf0cfc6240c2284ef9133cb.tar.gz | |
provide alternative rust-mode that derives from rust-ts-mode
Diffstat (limited to 'rust-prog-mode.el')
| -rw-r--r-- | rust-prog-mode.el | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/rust-prog-mode.el b/rust-prog-mode.el new file mode 100644 index 0000000..f443da8 --- /dev/null +++ b/rust-prog-mode.el @@ -0,0 +1,70 @@ +;;; rust-prog-mode.el --- old rust-mode without treesitter -*-lexical-binding: t-*- +;;; Commentary: + +;; rust-mode code deriving from prog-mode instead of rust-ts-mode + +;;; Code: + +;;;###autoload +(define-derived-mode rust-mode prog-mode "Rust" + "Major mode for Rust code. + +\\{rust-mode-map}" + :group 'rust-mode + :syntax-table rust-mode-syntax-table + + ;; Syntax + (setq-local syntax-propertize-function #'rust-syntax-propertize) + + ;; Indentation + (setq-local indent-line-function 'rust-mode-indent-line) + + ;; Fonts + (setq-local font-lock-defaults + '(rust-font-lock-keywords + nil nil nil nil + (font-lock-syntactic-face-function + . rust-mode-syntactic-face-function))) + + ;; Misc + (setq-local comment-start "// ") + (setq-local comment-end "") + (setq-local open-paren-in-column-0-is-defun-start nil) + + ;; Auto indent on } + (setq-local electric-indent-chars + (cons ?} (and (boundp 'electric-indent-chars) + electric-indent-chars))) + + ;; Allow paragraph fills for comments + (setq-local comment-start-skip "\\(?://[/!]*\\|/\\*[*!]?\\)[[:space:]]*") + (setq-local paragraph-start + (concat "[[:space:]]*\\(?:" + comment-start-skip + "\\|\\*/?[[:space:]]*\\|\\)$")) + (setq-local paragraph-separate paragraph-start) + (setq-local normal-auto-fill-function #'rust-do-auto-fill) + (setq-local fill-paragraph-function #'rust-fill-paragraph) + (setq-local fill-forward-paragraph-function #'rust-fill-forward-paragraph) + (setq-local adaptive-fill-function #'rust-find-fill-prefix) + (setq-local adaptive-fill-first-line-regexp "") + (setq-local comment-multi-line t) + (setq-local comment-line-break-function #'rust-comment-indent-new-line) + (setq-local imenu-generic-expression rust-imenu-generic-expression) + (setq-local imenu-syntax-alist '((?! . "w"))) ; For macro_rules! + (setq-local beginning-of-defun-function #'rust-beginning-of-defun) + (setq-local end-of-defun-function #'rust-end-of-defun) + (setq-local parse-sexp-lookup-properties t) + (setq-local electric-pair-inhibit-predicate + #'rust-electric-pair-inhibit-predicate-wrap) + (add-function :before-until (local 'electric-pair-skip-self) + #'rust-electric-pair-skip-self) + ;; Configure prettify + (setq prettify-symbols-alist rust-prettify-symbols-alist) + (setq prettify-symbols-compose-predicate #'rust--prettify-symbols-compose-p) + + (add-hook 'before-save-hook rust-before-save-hook nil t) + (add-hook 'after-save-hook rust-after-save-hook nil t)) + +(provide 'rust-prog-mode) +;;; rust-prog-mode.el ends here
\ No newline at end of file |
