diff --git a/core/core-projects.el b/core/core-projects.el index 4fa345b29..d14505f51 100644 --- a/core/core-projects.el +++ b/core/core-projects.el @@ -48,8 +48,27 @@ Emacs.") :config (projectile-mode +1) + ;; In the interest of performance, we reduce the number of project root marker + ;; files/directories projectile searches for when resolving the project root. + (setq projectile-project-root-files-bottom-up + (append '(".project" ; doom project marker + ".git") ; Git VCS root dir + (when (executable-find "hg") + '(".hg")) ; Mercurial VCS root dir + (when (executable-find "fossil") + '(".fslckout" ; Fossil VCS root dir + "_FOSSIL_")) ; Fossil VCS root DB on Windows + (when (executable-find "bzr") + '(".bzr")) ; Bazaar VCS root dir + (when (executable-find "darcs") + '("_darcs"))) ; Darcs VCS root dir + ;; This will be filled by other modules. We build this list manually so + ;; projectile doesn't perform so many file checks every time it resolves + ;; a project's root -- particularly when a file has no project. + projectile-project-root-files '("TAGS") + projectile-project-root-files-top-down-recurring '(".svn" "Makefile")) + ;; a more generic project root file - (push ".project" projectile-project-root-files-bottom-up) (push (abbreviate-file-name doom-local-dir) projectile-globally-ignored-directories) ;; Disable commands that won't work, as is, and that Doom already provides a diff --git a/modules/lang/clojure/config.el b/modules/lang/clojure/config.el index 1f28e3290..3da3d0ab6 100644 --- a/modules/lang/clojure/config.el +++ b/modules/lang/clojure/config.el @@ -1,5 +1,12 @@ ;;; lang/clojure/config.el -*- lexical-binding: t; -*- +(after! projectile + (pushnew! projectile-project-root-files "project.clj" "build.boot" "deps.edn")) + + +;; +;;; Packages + ;;;###package clojure-mode (add-hook 'clojure-mode-hook #'rainbow-delimiters-mode) diff --git a/modules/lang/elixir/config.el b/modules/lang/elixir/config.el index 04d78ad5f..ce19d9e1d 100644 --- a/modules/lang/elixir/config.el +++ b/modules/lang/elixir/config.el @@ -1,5 +1,12 @@ ;;; lang/elixir/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "mix.exs")) + + +;; +;;; Packages + (use-package! elixir-mode :defer t :init diff --git a/modules/lang/ess/config.el b/modules/lang/ess/config.el index 1041a5130..8bdccc198 100644 --- a/modules/lang/ess/config.el +++ b/modules/lang/ess/config.el @@ -1,5 +1,12 @@ ;;; lang/ess/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "DESCRIPTION")) + + +;; +;;; Packages + (use-package! ess :commands stata SAS :init diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index c427f5b64..4ed768074 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -1,5 +1,8 @@ ;;; lang/haskell/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "stack.yaml")) + (cond ((featurep! +intero) (load! "+intero")) ((featurep! +dante) (load! "+dante")) ((featurep! +lsp) (load! "+lsp"))) diff --git a/modules/lang/java/config.el b/modules/lang/java/config.el index ed9ee04d0..e4818df76 100644 --- a/modules/lang/java/config.el +++ b/modules/lang/java/config.el @@ -17,6 +17,9 @@ If the depth is 1, the first directory in src/java/net/lissner/game/MyClass.java is removed: java.net.lissner.game. If the depth is 2, the first two directories are removed: net.lissner.game.") +(after! projectile + (pushnew! projectile-project-root-files "gradlew" "build.gradle")) + ;; ;; java-mode diff --git a/modules/lang/php/config.el b/modules/lang/php/config.el index d06e9f271..d3b34bd35 100644 --- a/modules/lang/php/config.el +++ b/modules/lang/php/config.el @@ -1,5 +1,12 @@ ;;; lang/php/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "composer.json")) + + +;; +;;; Packages + (use-package! php-mode :mode "\\.inc\\'" :config diff --git a/modules/lang/python/config.el b/modules/lang/python/config.el index b26030bf0..16388d4d0 100644 --- a/modules/lang/python/config.el +++ b/modules/lang/python/config.el @@ -8,6 +8,9 @@ called.") "CLI arguments to initialize 'jupiter console %s' with when `+python/open-ipython-repl' is called.") +(after! projectile + (pushnew! projectile-project-root-files "setup.py" "requirements.txt")) + ;; ;; Packages diff --git a/modules/lang/racket/config.el b/modules/lang/racket/config.el index 5145a3e92..86b18e2aa 100644 --- a/modules/lang/racket/config.el +++ b/modules/lang/racket/config.el @@ -1,5 +1,12 @@ ;;; lang/racket/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "info.rkt")) + + +;; +;;; Packages + (use-package! racket-mode :hook (racket-repl-mode . racket-unicode-input-method-enable) :config diff --git a/modules/lang/ruby/config.el b/modules/lang/ruby/config.el index c0ed30115..a42de9b24 100644 --- a/modules/lang/ruby/config.el +++ b/modules/lang/ruby/config.el @@ -1,5 +1,9 @@ ;;; lang/ruby/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "Gemfile")) + + ;; ;;; Packages diff --git a/modules/lang/rust/config.el b/modules/lang/rust/config.el index 671e6e24b..c7f00538d 100644 --- a/modules/lang/rust/config.el +++ b/modules/lang/rust/config.el @@ -1,5 +1,12 @@ ;;; lang/rust/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "Cargo.toml")) + + +;; +;;; Packages + (use-package! rust-mode :defer t :config diff --git a/modules/lang/scala/config.el b/modules/lang/scala/config.el index 4d4dcb099..4a81fedd9 100644 --- a/modules/lang/scala/config.el +++ b/modules/lang/scala/config.el @@ -1,5 +1,12 @@ ;;; lang/scala/config.el -*- lexical-binding: t; -*- +(after! projectile + (add-to-list 'projectile-project-root-files "build.sbt")) + + +;; +;;; Packages + (after! scala-mode (setq scala-indent:align-parameters t ;; indent block comments to first asterix, not second