Subject: Re: bug#41736: 28.0.50; project.el - support global patterns for project-ignores

From: Dmitry Gutov <[email-masked]>
Date: Sat, 6 Jun 2020 14:08:41 +0300

On 06.06.2020 12:45, Theodor Thornhill wrote:
> Hello,
> 
> In https://debbugs.gnu.org/cgi/bugreport.cgi?bug=41572 there is talk about supporting a "plain project", and when joining that chat I realised that the "best" current implementation is the VC backend. However, this backend does not easily include other patterns to ignore.
> 
> For example we might want to ignore "node_modules", "elm-stuff" etc.
> These can be added pretty easily to 'project-vc-ignores' via:
> 
> 1. Major mode support: "(setq-local project-vc-ignores '("foo" "bar"))"

I'm not sure major modes are the place to do this: after all, the user 
can call project-find-files while visiting a file in some other mode 
(say, README.md). The view of the list of project files should remain 
consistent.

> 2. User init.el "(add-to-list project-vc-ignores "foo")"
> 
> However, there are some drawbacks.
> Method 1:
> - We rely on major mode to implement this
> - When using "project-switch-project", then press "f - find-file" the ignore is not recognized yet since it relies on the major mode.

Indeed.

> - It does not work when a project uses several modes

And I think it's the common case.

> Method 2:
> - Needs user to add this to own init file.
> - Pollutes the defcustom globally
> 
> Is there a way to set these patters such that we still can use the fast VC backend, but not have these drawbacks?

How about .dir-locals.el?

project--value-in-dir takes particular care to read these files.

> It seems like an easy solution could be to add a "defcustom project-ignore-patterns" that the project-vc backend picks up. This could be set by both future major modes and as user customization.

This also either pollutes user's init.el or remains major mode specific, 
right?