summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Gutov <dgutov@yandex.ru>2023-01-03 03:10:49 +0200
committerDmitry Gutov <dgutov@yandex.ru>2023-01-03 03:10:49 +0200
commit6dd3e352f44eb402c9b76c8f6e5bef032317cc55 (patch)
tree40712bcc6050c664d303ba6af1eb473bd252348c
parent94e330243e14200ba6b45e696e6a80c611438dec (diff)
downloademacs-6dd3e352f44eb402c9b76c8f6e5bef032317cc55.tar.gz
Extract common code into ruby-base-mode to derive from
* lisp/progmodes/ruby-mode.el (ruby-base-mode): New major base mode, to set up common vars and hooks. (ruby-mode-variables): Delete. Move most code to ruby-base-mode. And some -- to ruby-mode body. (ruby-mode): Derive from ruby-base-mode. Also move some setup to there. * lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode): Derive from ruby-base-mode. Remove duplicating settings.
-rw-r--r--lisp/progmodes/ruby-mode.el61
-rw-r--r--lisp/progmodes/ruby-ts-mode.el12
2 files changed, 35 insertions, 38 deletions
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 14cdf0a1a26..2e8d335f151 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -899,24 +899,6 @@ This only affects the output of the command `ruby-toggle-block'."
(while (and (setq state (apply #'ruby-parse-partial end state))
(>= (nth 2 state) 0) (< (point) end))))))
-(defun ruby-mode-variables ()
- "Set up initial buffer-local variables for Ruby mode."
- (setq indent-tabs-mode ruby-indent-tabs-mode)
- (smie-setup ruby-smie-grammar #'ruby-smie-rules
- :forward-token #'ruby-smie--forward-token
- :backward-token #'ruby-smie--backward-token)
- (unless ruby-use-smie
- (setq-local indent-line-function #'ruby-indent-line))
- (setq-local comment-start "# ")
- (setq-local comment-end "")
- (setq-local comment-column ruby-comment-column)
- (setq-local comment-start-skip "#+ *")
- (setq-local parse-sexp-ignore-comments t)
- (setq-local parse-sexp-lookup-properties t)
- (setq-local paragraph-start (concat "$\\|" page-delimiter))
- (setq-local paragraph-separate paragraph-start)
- (setq-local paragraph-ignore-fill-prefix t))
-
(defun ruby--insert-coding-comment (encoding)
"Insert a magic coding comment for ENCODING.
The style of the comment is controlled by `ruby-encoding-magic-comment-style'."
@@ -2629,29 +2611,54 @@ If there is no Rubocop config file, Rubocop will be passed a flag
"Value for `prettify-symbols-alist' in `ruby-mode'.")
;;;###autoload
-(define-derived-mode ruby-mode prog-mode "Ruby"
- "Major mode for editing Ruby code."
- (ruby-mode-variables)
+(define-derived-mode ruby-base-mode prog-mode "Ruby"
+ "Generic major mode for editing Ruby.
- (setq-local imenu-create-index-function #'ruby-imenu-create-index)
- (setq-local add-log-current-defun-function #'ruby-add-log-current-method)
- (setq-local beginning-of-defun-function #'ruby-beginning-of-defun)
- (setq-local end-of-defun-function #'ruby-end-of-defun)
+This mode is intended to be inherited by concrete major modes.
+Currently there are `ruby-mode' and `ruby-ts-mode'."
+ (setq indent-tabs-mode ruby-indent-tabs-mode)
+
+ (setq-local comment-start "# ")
+ (setq-local comment-end "")
+ (setq-local comment-column ruby-comment-column)
+ (setq-local comment-start-skip "#+ *")
+
+ (setq-local parse-sexp-ignore-comments t)
+ (setq-local parse-sexp-lookup-properties t)
+
+ (setq-local paragraph-start (concat "$\\|" page-delimiter))
+ (setq-local paragraph-separate paragraph-start)
+ (setq-local paragraph-ignore-fill-prefix t)
;; `outline-regexp' contains the first part of `ruby-indent-beg-re'
(setq-local outline-regexp (concat "^\\s *"
(regexp-opt '("class" "module" "def"))
"\\_>"))
(setq-local outline-level (lambda () (1+ (/ (current-indentation)
- ruby-indent-level))))
+ ruby-indent-level))))
(add-hook 'after-save-hook #'ruby-mode-set-encoding nil 'local)
(add-hook 'electric-indent-functions #'ruby--electric-indent-p nil 'local)
(add-hook 'flymake-diagnostic-functions #'ruby-flymake-auto nil 'local)
+ (setq-local prettify-symbols-alist ruby--prettify-symbols-alist))
+
+;;;###autoload
+(define-derived-mode ruby-mode ruby-base-mode "Ruby"
+ "Major mode for editing Ruby code."
+ (smie-setup ruby-smie-grammar #'ruby-smie-rules
+ :forward-token #'ruby-smie--forward-token
+ :backward-token #'ruby-smie--backward-token)
+ (unless ruby-use-smie
+ (setq-local indent-line-function #'ruby-indent-line))
+
+ (setq-local imenu-create-index-function #'ruby-imenu-create-index)
+ (setq-local add-log-current-defun-function #'ruby-add-log-current-method)
+ (setq-local beginning-of-defun-function #'ruby-beginning-of-defun)
+ (setq-local end-of-defun-function #'ruby-end-of-defun)
+
(setq-local font-lock-defaults '((ruby-font-lock-keywords) nil nil
((?_ . "w"))))
- (setq-local prettify-symbols-alist ruby--prettify-symbols-alist)
(setq-local syntax-propertize-function #'ruby-syntax-propertize))
diff --git a/lisp/progmodes/ruby-ts-mode.el b/lisp/progmodes/ruby-ts-mode.el
index 6fb6f71991c..c086214a11d 100644
--- a/lisp/progmodes/ruby-ts-mode.el
+++ b/lisp/progmodes/ruby-ts-mode.el
@@ -898,21 +898,11 @@ leading double colon is not added."
"C-c C-f" #'ruby-find-library-file)
;;;###autoload
-(define-derived-mode ruby-ts-mode prog-mode "Ruby"
+(define-derived-mode ruby-ts-mode ruby-base-mode "Ruby"
"Major mode for editing Ruby, powered by tree-sitter."
:group 'ruby
:syntax-table ruby-mode-syntax-table
- (setq indent-tabs-mode ruby-indent-tabs-mode)
-
- (setq-local paragraph-start (concat "$\\|" page-delimiter))
- (setq-local paragraph-separate paragraph-start)
- (setq-local paragraph-ignore-fill-prefix t)
-
- (setq-local comment-start "# ")
- (setq-local comment-end "")
- (setq-local comment-start-skip "#+ *")
-
(unless (treesit-ready-p 'ruby)
(error "Tree-sitter for Ruby isn't available"))