]> git.eshelyaron.com Git - emacs.git/commitdiff
ruby-rubocop-use-bundler: New user option
authorDmitry Gutov <dmitry@gutov.dev>
Mon, 13 May 2024 02:36:28 +0000 (05:36 +0300)
committerEshel Yaron <me@eshelyaron.com>
Mon, 13 May 2024 08:38:56 +0000 (10:38 +0200)
* lisp/progmodes/ruby-mode.el (ruby-rubocop-use-bundler):
New user option.
(ruby-flymake-rubocop--use-bundler-p): Use it.

* etc/NEWS: Mention it.

(cherry picked from commit f560e759338e4cd43113fef39bb6e35c9e8a5893)

etc/NEWS
lisp/progmodes/ruby-mode.el

index 5239175b71f0492f0ee39a7036d399c414443ea5..ac073ef5fe94a3fabcf86a9f810b8ee0d629c628 100644 (file)
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1804,6 +1804,11 @@ options of GNU 'ls'.
 If non-nil, moving point forward or backward between widgets by typing
 'TAB' or 'S-TAB' skips over inactive widgets.  The default value is nil.
 
+** Ruby mode
+New user option 'ruby-rubocop-use-bundler'. By default it retains the
+previous behavior: read the contens of Gemfile and act accordingly. But
+you can also set it to t or nil to skip the check.
+
 ** Miscellaneous
 
 ---
index 999fbebfb08371a759e4e8190dc598b9ae95364f..f6ef175e11e8fbcdb06b8d778aa8144c866daff3 100644 (file)
@@ -2553,6 +2553,16 @@ If there is no Rubocop config file, Rubocop will be passed a flag
   :type 'string
   :safe 'stringp)
 
+(defcustom ruby-rubocop-use-bundler 'check
+  "Non-nil with allow `ruby-flymake-rubocop' to use `bundle exec'.
+When the value is `check', it will first see whether Gemfile exists in
+the same directory as the configuration file, and whether it mentions
+the gem \"rubocop\".  When t, it's used unconditionally.  "
+  :type '(choice (const :tag "Always" t)
+                 (const :tag "No" nil)
+                 (const :tag "If rubocop is in Gemfile" check))
+  :safe 'booleanp)
+
 (defun ruby-flymake-rubocop (report-fn &rest _args)
   "RuboCop backend for Flymake."
   (unless (executable-find "rubocop")
@@ -2614,11 +2624,17 @@ If there is no Rubocop config file, Rubocop will be passed a flag
           finally (funcall report-fn diags)))))))
 
 (defun ruby-flymake-rubocop--use-bundler-p (dir)
-  (let ((file (expand-file-name "Gemfile" dir)))
-    (and (file-exists-p file)
-         (with-temp-buffer
-           (insert-file-contents file)
-           (re-search-forward "^ *gem ['\"]rubocop['\"]" nil t)))))
+  (cond
+   ((eq t ruby-rubocop-use-bundler)
+    t)
+   ((null ruby-rubocop-use-bundler)
+    nil)
+   (t
+    (let ((file (expand-file-name "Gemfile" dir)))
+      (and (file-exists-p file)
+           (with-temp-buffer
+             (insert-file-contents file)
+             (re-search-forward "^ *gem ['\"]rubocop['\"]" nil t)))))))
 
 (defun ruby-flymake-auto (report-fn &rest args)
   (apply