| Age | Commit message (Collapse) | Author |
|
Add `projectile-compile-subproject` and `projectile-test-subproject`
for building/testing individual modules in multi-module projects
(e.g. Maven, Gradle). These commands find the nearest build file
(project-file marker) between the current directory and the project
root, then run the compile/test command in that directory.
Keybindings: `c m c` (compile subproject), `c m t` (test subproject).
|
|
|
|
|
|
- Use VCS-appropriate command in projectile-get-sub-projects-files
instead of hardcoding projectile-git-command.
- Add projectile-hg-ignored-command and projectile-svn-ignored-command
defcustoms so ignored-file filtering works for hg and svn projects
in native/hybrid indexing mode.
|
|
seq-union requires Emacs 28.1+ and seq-keep requires Emacs 29.1+.
|
|
seq-union is not available in Emacs 27's built-in seq.el.
Use (seq-uniq (append ...)) which achieves the same result.
|
|
The fboundp guard was removed but vc-git is only loaded at runtime,
so the byte-compiler needs a declare-function to avoid a warning.
|
|
seq-keep was added in Emacs 29.1 and is not provided by the compat
package. Revert to (delq nil (mapcar ...)) which works on all
supported Emacs versions.
|
|
This function was defined but never called anywhere in the codebase.
|
|
Use seq-keep (available via compat 30) for the filter-map pattern
in projectile-normalise-paths, projectile-rgrep-default-command,
and projectile-open-projects.
|
|
Use the non-destructive seq-uniq instead of delete-dups across
9 call sites for consistency with the seq.el migration.
|
|
- Remove (fboundp 'vc-git-grep) check since (require 'vc-git) is
called right before it, making the function always available.
- Remove (declare-function string-trim "subr-x") since string-trim
is unconditionally available via compat 30.
|
|
- Replace (nth 0/1/2 ...) with car/cadr/caddr
- Replace (unless (equal ... nil) ...) with (when ...)
- Replace (> (length x) n) with (length> x n) (via compat 30)
|
|
Replace manual (if (string-prefix-p "./" f) (substring f 2) f) with
(string-remove-prefix "./" f), and (equal (substring dir -1) "/")
with string-remove-suffix. Both are available via compat 30.
|
|
Use the more idiomatic alist-get accessor instead of the
(cdr (assoc ...)) pattern across ~15 call sites in cmake helpers
and search command constructors.
|
|
Migrate cl-remove-if-not → seq-filter, cl-remove-if → seq-remove,
cl-some → seq-some, cl-every → seq-every-p, cl-find-if → seq-find,
cl-mapcan → mapcan, cl-union → seq-union, cl-sort → seq-sort,
cl-case → pcase, and delete projectile-difference in favor of
seq-difference. Manual replacements for cl-notany, cl-typep, cl-incf,
cl-remove, and cl-subst.
cl-lib is still required for cl-defun, cl-defmethod, cl-loop, cl-letf,
and cl-flet*.
|
|
The compat package is hosted on GNU ELPA, not MELPA. Add GNU ELPA
to the Eldev configuration so CI can resolve the dependency.
|
|
Add (compat "30") as a dependency, which backports newer Emacs
functions to older versions with zero overhead on modern Emacs.
Changes enabled by compat:
- Use string-replace instead of replace-regexp-in-string for literal
replacements (resolves TODO in projectile-complementary-dir)
Also simplified version-conditional code now safe with Emacs 27.1+:
- Remove redundant fboundp check for xref-references-in-directory
- Remove redundant fboundp check for xref-find-definitions
- Simplify auto tags backend to prefer ggtags then xref
|
|
Emacs 27.1 was released nearly 6 years ago (August 2020). Bumping
the minimum version lets us remove ~30 lines of compatibility code:
- Remove fileloop fallback using deprecated tags-loop-scan/operate
- Fix tags-query-replace FIXME in projectile-replace-regexp by using
fileloop-initialize-replace + fileloop-continue
- Replace projectile-flatten with built-in flatten-tree (6 call sites)
- Simplify projectile-time-seconds to just (time-convert nil 'integer)
- Use proper-list-p for known-projects file validation
- Use json-parse-buffer unconditionally in CMake preset reader
- Use package-get-version unconditionally
- Add (require 'fileloop) as a proper dependency
- Drop Emacs 26.3 from CI matrix
|
|
Document 8 user-visible changes that were missing:
- #1964: project.el project-name and project-buffers integration
- #1962: fix other-file crash for root directory files
- projectile-add-known-project keybinding (A) and menu entry
- projectile-ripgrep glob quoting fix for zsh
- CMake version parsing robustness
- Jujutsu file listing template syntax
- build.mill as Mill project marker
- Emacs 31+ compatibility (obsolete macro replacements)
|
|
- Wrap file-expand-wildcards in ignore-errors so project root
detection works when parent directories are not readable,
e.g. on iCloud Drive or Termux (#1816)
- Preserve the user's compilation-buffer-name-function instead of
unconditionally binding it to nil in projectile--run-project-cmd,
so custom buffer naming works when projectile-per-project-compilation-buffer
is nil (#1841)
|
|
- Pass unique=t to rename-buffer in projectile-grep so subsequent
greps don't fail with "buffer name in use", which prevented
projectile-grep-finished-hook from running (#1687)
- Filter nonexistent files from projectile-replace-regexp file list
to avoid stopping on deleted files (#1456)
- Validate that deserialized known-projects data is a proper list,
gracefully handling corrupted bookmarks files (#1939)
|
|
- Update the mode-line via window-configuration-change-hook so
non-file buffers like Magit display correct project info (#1823)
- Use projectile-acquire-root instead of projectile-project-root in
projectile--run-project-cmd to prevent wrong-type-argument error
when running commands in newly created projects (#1886)
|
|
projectile-root-top-down used projectile-locate-dominating-file which
stops at the first (bottommost) match going up the directory tree.
This made it behave identically to projectile-root-bottom-up.
Add projectile-locate-dominating-file-top-down which walks the entire
directory hierarchy and returns the topmost match. For example, with
nested Makefiles at both project/ and project/subdir/, searching from
project/subdir/ now correctly returns project/ instead of
project/subdir/.
|
|
projectile-project-dirs previously only returned directories that
directly contain files, missing intermediate directories that contain
only subdirectories (e.g. src/ when it only has src/ComponentA/).
Fix by walking each file path's ancestor directories up to the project
root, so all intermediate directories are included.
|
|
#1554)
Two unrelated small fixes:
1. projectile-cache-current-file now checks file-exists-p before adding
a file to the cache. This prevents ghost entries when visiting a new
file with find-file and abandoning the buffer without saving.
2. Add -F (fixed-string) flag to the grep and git-grep commands used by
projectile-files-with-string, matching what rg, ag, and ack already
do. This fixes errors when the search string contains regex special
characters like [ ] and @.
|
|
Two bugs in projectile-replace:
1. fileloop is autoloaded but never required, so (fboundp
#'fileloop-continue) returns nil and the function falls back to the
legacy Emacs 25/26 code path even on Emacs 27+. Fix by requiring
fileloop before the check.
2. fileloop-initialize-replace expects a regexp, but projectile-replace
is documented to do literal replacement. Fix by wrapping the search
term with regexp-quote.
|
|
- actions/checkout v4 -> v6
- actions/stale v9 -> v10
|
|
- VCS commands: table of all per-VCS command variables, plus
projectile-git-submodule-command and projectile-git-ignored-command
- Caching: projectile-files-cache-expire
- Tags: projectile-tags-file-name, projectile-tags-backend
- Searching: projectile-use-git-grep
- Project name: projectile-project-name-function
- Dirty projects: projectile-vcs-dirty-state
- Hooks: projectile-find-file-hook, projectile-find-dir-hook,
projectile-before-switch-project-hook
- Misc: projectile-verbose, projectile-show-menu
- Ignore/unignore: projectile-globally-ignored-file-suffixes,
projectile-global-ignore-file-patterns,
projectile-globally-unignored-files,
projectile-globally-unignored-directories
|
|
- fd integration: projectile-git-use-fd, projectile-fd-executable,
projectile-git-fd-args
- Known projects: projectile-known-projects-file,
projectile-ignored-projects, projectile-ignored-project-function,
projectile-track-known-projects-automatically
- Buffer filtering: projectile-buffers-filter-function,
projectile-kill-buffers-filter
- Test/impl toggling: projectile-default-src-directory,
projectile-default-test-directory, projectile-test-prefix-function,
projectile-test-suffix-function, projectile-create-missing-test-files
|
|
- Use cl-remove-if instead of seq-remove for consistency with the rest
of the codebase.
- Remove unnecessary project/.git/ from test fixture (git init creates it).
- Remove unnecessary projectile-indexing-method binding in test.
|
|
When fd is unavailable or disabled, `git ls-files -zco --exclude-standard`
returns files still tracked in the index even if deleted from disk. This
causes projectile-dir-files-alien to list ghost files. Fix by running
`git ls-files -zd` and removing those entries from the result.
|
|
Wrap the directory-files call in ignore-errors so that unreadable
directories (e.g. .Spotlight-V100 on macOS) are silently skipped
instead of aborting the entire native indexing operation.
|
|
Newer fd versions (8.3.0+) prepend "./" to output. The --strip-cwd-prefix
flag was already added to projectile-generic-command and projectile-git-fd-args,
but this flag doesn't exist in older fd versions, causing errors.
Add post-processing in projectile-files-via-ext-command to strip the "./"
prefix from results as a defensive fallback, matching the existing pattern
in projectile-files-from-cmd.
Fixes #1749
|
|
On case-insensitive filesystems (macOS default), a ~/workspace directory
matches the "WORKSPACE" Bazel marker because file-exists-p returns t for
both files and directories. This causes the home directory to be falsely
detected as a Bazel project root, leading to severe performance issues.
Add a (not (file-directory-p ...)) guard in projectile-root-top-down so
that only regular files can satisfy file-type marker checks.
Fixes #1961
|
|
|
|
|
|
|
|
|
|
- Include projectile-cache-file in projectile-globally-ignored-files default
- Add :safe predicate to allow dir-locals configuration
- Add tests for default values and :safe predicate validation
- Update related file and test matching functions to use let* variants
- Improve variable binding consistency and future compatibility
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This makes code using project.el APIs work better with projectile
projects.
|
|
|
|
Emacs 31.1 treats when-let and cl-gensym as obsolete errors during
byte-compilation, so switch to when-let* and gensym to keep snapshot
CI green.
|
|
|