bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#41572: 28.0.50; [PATCH] Support plain project marked with file .emac


From: Dmitry Gutov
Subject: bug#41572: 28.0.50; [PATCH] Support plain project marked with file .emacs-project
Date: Sat, 6 Jun 2020 02:11:37 +0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.8.0

Hi!

On 05.06.2020 22:22, Theodor Thornhill wrote:
"Dmitry Gutov" <dgutov@yandex.ru> writes:

I like this suggestion better (no "special" files), but would we be able
to avoid scope creep? Wouldn't users then expect being able to specify
ignored directories in such projects? And then faster indexing (e.g.
using caching), compared to the VC backend?

Isn't this already supported?

Not in the "plain" project backend as proposed.

In a major mode I'm making right now I believe I have covered both options:

Ignoring is covered by the API, yes. How did you cover the caching issue?

Also note that unless your new project backend is "good enough", you might make the users' experience worse as a result, at least in some respects.

(defcustom elm-root-file "elm.json"
   "...")
(defun elm-project-root (dir)
   "Create the cons cell `project-root' needs to discover root."
   (let ((root (locate-dominating-file dir elm-root-file)))
     (when root
       (cons 'elm root))))
(cl-defmethod project-root ((project (head elm)))
   (cdr project))

(cl-defmethod project-ignores ((project (head elm)) dir)
   (append vc-directory-exclusion-list
           ;; This could also be a defcustom ofc
           (list "./elm-stuff/")))

(add-hook 'project-find-functions #'elm-project-root)

The code is good. With probably one exception: if you have a big enough project, and it's checked into Git, the VC project will be much faster at indexing files than your project implementation (because project-files by default uses 'find').

But if you also define a faster project-files override, it should be fine.

Another issue is, well, if the user has a different package that defines projects installed (maybe Projectile grows project.el integration someday), or they're simply used to the VC backend, they might be surprised with some finer details unless you clearly document that your package does add a new project backend.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]