Skip to content

Replace projectile with project.el #31

@hlissner

Description

@hlissner

Important

This is a roadmap issue and is used solely to announce and document progress (to make it easier for users to follow and maintainers to track). Please do not use it for discussion; use our discussion board instead.

To replace projectile with project.el (built in since 26, but became mature enough to use by 27).

Motivations

  • Relevant to our goal to prioritize native functionality, where equivalent or superior,
  • project.el is tied to more native functionality (e.g. vc.el, grep.el, capf, etc),
  • project.el has reached sufficient (but not total) feature parity with projectile,
  • project.el is a simpler, lighter, and more stable codebase, and so is easier to build upon.

Challenges

  • project.el file list collectors lack a caching mechanism (but maybe we don't need them?)
  • project.el cannot simply be reconfigured to use fd/ripgrep (fast) instead of find/grep (slow, and potentially buggy on BSD systems).
  • project.el is built into Emacs. I plan to install a newer version anyway, but care must be taken to avoid the built-in version shadowing the new one.

Tasks

  • find-sibling-file replaces projectile-find-other-file, but only searches the current directory (whereas the latter searches the whole project for matches). An advice (or another command altogether) is needed to replicate projectile's behavior. (wrong-numbe-of-arguments error from backported find-sibling-file command doomemacs#7795, 198fe82b6d49)
  • Modify project--files-in-directory to use fd or ripgrep (falling back to find+xref otherwise).
  • Replace references to projectile variables with project.el analogues:
    • projectile-project-root-files -> project-vc-extra-root-markers
    • projectile-globally-ignored-directories -> one or more of of project-vc-ignores, vc-directory-exclusion-list, grep-find-ignored-files
  • Invalidate project-vc property if project-vc-merge-submodules/project-vc-extra-root-markers changes.
  • Add interactive version of project-remember-project (see project-forget-project for reference).
  • Adapt projectile references in lisp/lib/{buffers,projects,scratch,files}.el to project.el.
  • Adapt projectile references in modules (not an exhaustive list, just the more important ones):
    • ui/workspaces
    • ui/modeline
    • config/default (autoloads, keybindings)
    • completion/*

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions