emacs-diffs
[Top][All Lists]
Advanced

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

[Emacs-diffs] master 9916410: Prepend 'rubocop' with 'bundle exec' when


From: Dmitry Gutov
Subject: [Emacs-diffs] master 9916410: Prepend 'rubocop' with 'bundle exec' when appropriate
Date: Tue, 25 Dec 2018 11:23:13 -0500 (EST)

branch: master
commit 9916410fa8bc765677e2d09384599aa85945967d
Author: Dmitry Gutov <address@hidden>
Commit: Dmitry Gutov <address@hidden>

    Prepend 'rubocop' with 'bundle exec' when appropriate
---
 etc/NEWS                    |  2 ++
 lisp/progmodes/ruby-mode.el | 15 ++++++++++++++-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/etc/NEWS b/etc/NEWS
index 34151d8..e427e84 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -511,6 +511,8 @@ This enables more efficient backends.  See the docstring of
 *** The Rubocop Flymake diagnostic function will only run Lint cops if
 it can't find the config file.
 
+*** Rubocop is called with 'bundle exec' if Gemfile mentions it.
+
 ** Package
 
 *** New function 'package-get-version' lets packages query their own version.
diff --git a/lisp/progmodes/ruby-mode.el b/lisp/progmodes/ruby-mode.el
index 351dac2..d0ae9b4 100644
--- a/lisp/progmodes/ruby-mode.el
+++ b/lisp/progmodes/ruby-mode.el
@@ -2323,6 +2323,7 @@ If there is no Rubocop config file, Rubocop will be 
passed a flag
   (let ((command (list "rubocop" "--stdin" buffer-file-name "--format" "emacs"
                        "--cache" "false" ; Work around a bug in old version.
                        "--display-cop-names"))
+        (default-directory default-directory)
         config-dir)
     (when buffer-file-name
       (setq config-dir (locate-dominating-file buffer-file-name
@@ -2331,7 +2332,12 @@ If there is no Rubocop config file, Rubocop will be 
passed a flag
           (setq command (append command '("--lint")))
         (setq command (append command (list "--config"
                                             (expand-file-name 
ruby-rubocop-config
-                                                              config-dir)))))
+                                                              config-dir))))
+        (when (ruby-flymake-rubocop--use-bundler-p config-dir)
+          (setq command (append '("bundle" "exec") command))
+          ;; In case of a project with multiple nested subprojects,
+          ;; each one with a Gemfile.
+          (setq default-directory config-dir)))
 
       (ruby-flymake--helper
        "rubocop-flymake"
@@ -2369,6 +2375,13 @@ If there is no Rubocop config file, Rubocop will be 
passed a flag
           into diags
           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)))))
+
 (defun ruby-flymake-auto (report-fn &rest args)
   (apply
    (if (and ruby-flymake-use-rubocop-if-available



reply via email to

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