Function: projectile-detect-project-type
projectile-detect-project-type is a byte-compiled function defined in
projectile.el.
Signature
(projectile-detect-project-type &optional DIR PROJECT-ROOT)
Documentation
Detect the type of the project.
When DIR is specified it detects its project type, otherwise it acts
on the current project. PROJECT-ROOT, if provided, is used for caching
instead of re-resolving via projectile-project-root(var)/projectile-project-root(fun).
Fallback to a generic project type when the type can't be determined.
Source Code
;; Defined in ~/.emacs.d/elpa/projectile-20260820.1509/projectile.el
(defun projectile-detect-project-type (&optional dir project-root)
"Detect the type of the project.
When DIR is specified it detects its project type, otherwise it acts
on the current project. PROJECT-ROOT, if provided, is used for caching
instead of re-resolving via `projectile-project-root'.
Fallback to a generic project type when the type can't be determined."
;; Resolve the root up front so function markers receive it (they used to
;; get DIR, which is nil when detecting the current project's type - see
;; #1909) and so the cache key below reuses the same value.
(let* ((project-root (or project-root (projectile-project-root dir)))
;; List the root once and answer plain-name markers from the
;; listing. Detection walks every registered type (50+), and the
;; vast majority use plain-name markers in the root, so this turns
;; "one stat per marker per type" into a single `directory-files'
;; call - a big win on the first detection of a remote project.
(entry-set (and project-root
(projectile--directory-entry-set project-root)))
(project-type
(or (car (seq-find
(lambda (project-type-record)
(let ((project-type (car project-type-record))
(marker (plist-get (cdr project-type-record) 'marker-files)))
(if (functionp marker)
(and (funcall marker project-root) project-type)
;; An empty marker set is vacuously satisfied by
;; `projectile-verify-files' (`seq-every-p' over nil
;; is t), which would make the type match every
;; project. Guard against it so clearing a type's
;; markers disables detection instead of inverting it.
(and marker (projectile-verify-files marker dir entry-set) project-type))))
projectile-project-types))
'generic)))
(puthash project-root project-type projectile-project-type-cache)
project-type))