@@ -144,6 +144,16 @@ For example, \[ is allowed in :db/id[:db.part/user]."
144144 (and (listp value)
145145 (cl-every 'characterp value))))
146146
147+ (defcustom clojure-build-tool-files '(" project.clj" " build.boot" " build.gradle" )
148+ " A list of files, which are looked for in order to identify the
149+ project's root. Out-of-the box clojure-mode understands lein,
150+ boot and gradle."
151+ :type '(repeat string)
152+ :group 'clojure
153+ :safe (lambda (value )
154+ (and (listp value)
155+ (cl-every 'stringp value))))
156+
147157(defvar clojure-mode-map
148158 (let ((map (make-sparse-keymap )))
149159 (define-key map (kbd " C-:" ) #'clojure-toggle-keyword-string )
@@ -1041,16 +1051,13 @@ nil."
10411051
10421052Use `default-directory' if DIR-NAME is nil.
10431053Return nil if not inside a project."
1044- (let ((dir-name (or dir-name default-directory)))
1045- (let ((lein-project-dir (locate-dominating-file dir-name " project.clj" ))
1046- (boot-project-dir (locate-dominating-file dir-name " build.boot" )))
1047- (when (or lein-project-dir boot-project-dir)
1048- (file-truename
1049- (cond ((not lein-project-dir) boot-project-dir)
1050- ((not boot-project-dir) lein-project-dir)
1051- (t (if (file-in-directory-p lein-project-dir boot-project-dir)
1052- lein-project-dir
1053- boot-project-dir))))))))
1054+ (let* ((dir-name (or dir-name default-directory))
1055+ (choices (delq nil
1056+ (mapcar (lambda (fname )
1057+ (locate-dominating-file dir-name fname))
1058+ clojure-build-tool-files))))
1059+ (when (> (length choices) 0 )
1060+ (car (sort choices #'file-in-directory-p )))))
10541061
10551062(defun clojure-project-relative-path (path )
10561063 " Denormalize PATH by making it relative to the project root."
0 commit comments