branch: elpa/rubocop
commit a809fa70218155335880389ddfa4df2e1c27ca5b
Author: Bozhidar Batsov <[email protected]>
Commit: Bozhidar Batsov <[email protected]>
[Fix #24] Always run RuboCop from the project's root when within a
project
---
rubocop.el | 30 +++++++++++++++++++-----------
1 file changed, 19 insertions(+), 11 deletions(-)
diff --git a/rubocop.el b/rubocop.el
index 160a155..f8d2549 100644
--- a/rubocop.el
+++ b/rubocop.el
@@ -70,8 +70,10 @@
(t
file-name)))
-(defun rubocop-project-root ()
- "Retrieve the root directory of a project if available."
+(defun rubocop-project-root (&optional no-error)
+ "Retrieve the root directory of a project if available.
+
+When NO-ERROR is non-nil returns nil instead of raise an error."
(or
(car
(mapcar #'expand-file-name
@@ -79,7 +81,9 @@
(mapcar
(lambda (f) (locate-dominating-file default-directory f))
rubocop-project-root-files))))
- (error "You're not into a project")))
+ (if no-error
+ nil
+ (error "You're not into a project"))))
(defun rubocop-buffer-name (file-or-dir)
"Generate a name for the RuboCop buffer from FILE-OR-DIR."
@@ -97,10 +101,12 @@ Alternatively prompt user for directory."
(let ((directory
(or directory
(read-directory-name "Select directory: "))))
- (compilation-start
- (rubocop-build-command command (rubocop-local-file-name directory))
- 'compilation-mode
- (lambda (arg) (message arg) (rubocop-buffer-name directory)))))
+ ;; make sure we run RuboCop from a project's root if the command is
executed within a project
+ (let ((default-directory (or (rubocop-project-root 'no-error)
default-directory)))
+ (compilation-start
+ (rubocop-build-command command (rubocop-local-file-name directory))
+ 'compilation-mode
+ (lambda (arg) (message arg) (rubocop-buffer-name directory))))))
;;;###autoload
(defun rubocop-check-project ()
@@ -133,10 +139,12 @@ Alternatively prompt user for directory."
(rubocop-ensure-installed)
(let ((file-name (buffer-file-name (current-buffer))))
(if file-name
- (compilation-start
- (rubocop-build-command command (rubocop-local-file-name file-name))
- 'compilation-mode
- (lambda (_arg) (rubocop-buffer-name file-name)))
+ ;; make sure we run RuboCop from a project's root if the command is
executed within a project
+ (let ((default-directory (or (rubocop-project-root 'no-error)
default-directory)))
+ (compilation-start
+ (rubocop-build-command command (rubocop-local-file-name file-name))
+ 'compilation-mode
+ (lambda (_arg) (rubocop-buffer-name file-name))))
(error "Buffer is not visiting a file"))))
;;;###autoload