emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

emacs-29 6dd3e352f4: Extract common code into ruby-base-mode to derive f


From: Dmitry Gutov
Subject: emacs-29 6dd3e352f4: Extract common code into ruby-base-mode to derive from
Date: Mon, 2 Jan 2023 20:15:54 -0500 (EST)

branch: emacs-29
commit 6dd3e352f44eb402c9b76c8f6e5bef032317cc55
Author: Dmitry Gutov <dgutov@yandex.ru>
Commit: Dmitry Gutov <dgutov@yandex.ru>

    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.
---
 lisp/progmodes/ruby-mode.el    | 61 +++++++++++++++++++++++-------------------
 lisp/progmodes/ruby-ts-mode.el | 12 +--------
 2 files changed, 35 insertions(+), 38 deletions(-)

diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 14cdf0a1a2..2e8d335f15 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 6fb6f71991..c086214a11 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"))
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]