| Age | Commit message (Collapse) | Author |
|
Fixes #1923
When compilation output references a file via a relative path, the
advice now also checks if the file exists relative to the project root
and adds its parent directory to the search path. This handles the
edge case where a directory only contains subdirectories (no files
directly) and therefore was not included in the file-derived directory
list from projectile-current-project-dirs.
|
|
|
|
- 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.
|
|
|
|
|