From: Dmitry Gutov <dgutov@yandex.ru>
To: Stephen Leake <stephen_leake@stephe-leake.org>
Cc: emacs-devel@gnu.org
Subject: Re: project.el semantics
Date: Sun, 8 Nov 2015 15:07:33 +0200 [thread overview]
Message-ID: <563F4915.1080008@yandex.ru> (raw)
In-Reply-To: <86vb9dufs0.fsf@stephe-leake.org>
On 11/08/2015 09:11 AM, Stephen Leake wrote:
> These are inconsistent.
>
> It would be best for the project-library-roots-function doc string to
> _only_ refer to cl-defgeneric (ie, "default implementation of
> `project-libary-roots'"), so you don't have duplicate documentation that
> gets out of sync.
It would be impossible for project-library-roots-function to implement
the "outside of the current project" part of semantics, unless we pass
it the current project.
And then, what's the point? It's just as easy to call
project-subtract-directories from the default project-library-roots impl.
Any other inconsistencies? (I've pushed a minor update now, but it's
probably unrelated to your concerns).
> You seem to be trying to establish a difference between "a single
> project" and "the libraries used by a project". Better terminology would
> be "top level project" and "dependencies"; not all dependencies are
> libraries. It would be helpful to make this distinction more explicit.
I think we might want to introduce the notion of project dependencies
later, and then we'd have to call some of library-roots, again, library
roots, to distinguish from the dependencies.
Better to defer that change.
Note that you currently have the freedom to include the checked out
dependent projects in the project-roots (if you edit these projects
together).
> The default implementation of project-library-roots makes the lists
> disjoint, so the doc strings should say that.
Doesn't it? It says "outside".
> In particular,
> "load path" and "class path" contain _both_ the top level project and
> the dependencies, so project-library-roots should _not_ be the same as
> "load path" or "class path".
I think "list of directories outside of the project" is pretty clear.
> The advice in project-roots on "include here but not there" should
> mention top-level vs dependencies.
Could you rephrase that? I'm not sure I follow.
> On the other hand, `project-library-roots ((project (head vc))' does
> _not_ make them disjoint, so there is a bug here somewhere.
Fixed, thanks for pointing that out.
> The new function `project-find-regexp' is not consistent with other
> usage; other project- search functions search both top level and
> dependencies.
Sorry, what other project- search functions? Do you mean
xref-find-references?
Note that we also have project-or-libraries-find-regexp. IME, when doing
a regexp search across the project, you aren't interested in the library
code, most of the time.
>> Also see the FIXME commentary above project-library-roots-function;
>> it's waiting for the public opinion. Though it's not really about
>> source vs documentation as much as about different kinds of sources.
>
> That FIXME: says, in part:
>
> ;; FIXME: Using the current approach, we don't have access to the
> ;; "library roots" of language A from buffers of language B, which
> ;; seems desirable in multi-language projects, at least for some
> ;; potential uses, like "jump to a file in project or library".
>
> emacs-lisp-mode makes project-library-roots-function buffer-local,
> which makes it language-specific. That's an argument for overriding the
> default implementation of project-library-roots to do something more
> useful. Which is what `project-library-roots ((project (head vc))' does,
> for example. Which means that the behavior of projects in an elisp file
> that happens to be in a vc directory is different from one that is not.
`project-library-roots ((project (head vc))' knows nothing of library
roots, however, aside from the local variable that's supposed to be set
by the user.
> No other language mode sets project-library-roots-function.
There is etags-library-roots, however. It's not language-specific, but,
again, vc-project doesn't know about it.
There is also ruby-library-roots already brewing in my head.
> The root cause of this problem is trying to infer a project in an elisp
> file. This makes sense in general, because an elisp file implies the use
> of load-path, which is the main part of defining a project. A better way
> is to provide a project-find-function that returns an elisp-project
> object in elisp buffers;
That implies having to create a separate project implementation for
every language, making vc-project utterly useless.
You'd also have to create yet-another kind of project implementations,
for multi-language projects.
Note that determining whether the a given directory tree has Elisp files
inside is not 100% reliable, outside of traversing it whole. But if we
pick some detection mechanism, (and we'd have to, for Elisp-project
detection), we can just as well use it to call elisp-library-roots
globally and make it auto-detect whether the current project is
applicable. Like described in the FIXME.
> then elisp-project can override
> project-library-roots to return load-path; it could also add the emacs C
> sources if they are available.
At the moment, I feel that this approach would be a cop-out. But it's
definitely an option.
> That leaves the default behavior in non-elisp files that are also not in
> a vc directory; they currently use 'etags-library-roots. You could
> change the default definition of project-library-roots to use
> etags-library-roots directly, but it seems better to have a variable for
> this.
I don't think we ever call project-library-roots-function from anywhere
but project-library-roots (*). And that requires the presence of the
current project.
> I would delete the advice that overriding functions should use
> project-library-roots-function; the main reason to override is to do
> something different.
(*) Hence, if we go your way, there seems to be no need for
project-library-roots-function.
> I have no problems merging this branch to master; it makes things better
> in most places, and no worse in any. Howver, it would be best to clean
> up the inconsistencies above first.
Thanks, I'll merge after your next reply.
next prev parent reply other threads:[~2015-11-08 13:07 UTC|newest]
Thread overview: 162+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-15 20:23 find-file-project Stephen Leake
2015-09-15 22:21 ` find-file-project Dmitry Gutov
2015-09-16 2:49 ` find-file-project Stephen Leake
2015-09-16 3:26 ` find-file-project Stephen Leake
2015-09-16 3:34 ` find-file-project Stephen Leake
2015-09-16 3:38 ` find-file-project Dmitry Gutov
2015-09-16 12:56 ` find-file-project Stephen Leake
2015-09-16 14:37 ` find-file-project Dmitry Gutov
2015-09-16 16:41 ` find-file-project Stephen Leake
2015-09-16 16:59 ` find-file-project Stephen Leake
2015-09-16 17:13 ` find-file-project Dmitry Gutov
2015-09-16 17:25 ` find-file-project Dmitry Gutov
2015-09-16 21:01 ` find-file-project Stephen Leake
2015-09-17 17:45 ` find-file-project Dmitry Gutov
2015-09-18 16:08 ` project.el semantics Stephen Leake
2015-09-19 0:17 ` Dmitry Gutov
2015-11-08 1:47 ` Dmitry Gutov
2015-11-08 7:11 ` Stephen Leake
2015-11-08 13:07 ` Dmitry Gutov [this message]
2015-11-08 20:11 ` Dmitry Gutov
2015-11-09 9:10 ` Stephen Leake
2015-11-09 13:27 ` Dmitry Gutov
2015-11-09 18:15 ` Stephen Leake
2015-11-10 1:32 ` Dmitry Gutov
2015-11-10 2:40 ` Dmitry Gutov
2015-11-10 17:36 ` Stephen Leake
2015-11-11 0:47 ` Dmitry Gutov
2015-11-11 10:27 ` Stephen Leake
2015-11-11 13:21 ` Dmitry Gutov
2015-11-11 16:48 ` John Wiegley
2015-11-11 17:03 ` Dmitry Gutov
2015-11-11 17:22 ` John Wiegley
2015-11-11 21:46 ` Dmitry Gutov
2015-11-11 22:30 ` John Wiegley
2015-11-12 2:21 ` Dmitry Gutov
2015-11-12 17:26 ` John Wiegley
2015-11-12 17:53 ` Dmitry Gutov
2015-11-12 18:04 ` Dmitry Gutov
2015-11-12 18:17 ` John Wiegley
2015-11-12 18:26 ` John Mastro
2015-11-12 23:37 ` Dmitry Gutov
2015-11-12 18:50 ` Dmitry Gutov
2015-11-11 22:41 ` Stephen Leake
2015-11-11 22:14 ` Stephen Leake
2015-11-11 23:26 ` Dmitry Gutov
2015-11-12 6:44 ` Stephen Leake
2015-11-12 11:32 ` Dmitry Gutov
2015-11-12 19:28 ` Stephen Leake
2015-11-12 22:04 ` Dmitry Gutov
2015-11-19 2:21 ` Dmitry Gutov
2015-11-20 18:40 ` John Wiegley
2015-11-21 10:03 ` Stephen Leake
2015-11-21 10:10 ` Stephen Leake
2015-11-22 5:18 ` John Wiegley
2015-11-22 5:36 ` Dmitry Gutov
2015-11-22 5:43 ` John Wiegley
2015-11-22 5:58 ` Dmitry Gutov
2015-11-22 16:55 ` John Wiegley
2015-11-22 17:13 ` Dmitry Gutov
2015-11-22 19:54 ` John Wiegley
2015-11-22 21:27 ` John Wiegley
2015-11-23 1:14 ` Dmitry Gutov
2015-11-23 22:04 ` Steinar Bang
2015-11-23 23:17 ` Dmitry Gutov
2015-11-23 7:43 ` Stephen Leake
2015-11-23 12:59 ` Dmitry Gutov
2015-12-16 4:06 ` Dmitry Gutov
2015-12-16 6:52 ` John Wiegley
2015-12-28 4:20 ` Dmitry Gutov
2015-11-22 22:04 ` Stephen Leake
2015-11-22 23:21 ` Dmitry Gutov
2015-11-23 2:06 ` Richard Stallman
2015-11-22 5:32 ` Dmitry Gutov
2015-11-09 22:16 ` John Wiegley
2015-11-10 0:58 ` Dmitry Gutov
2015-11-10 1:07 ` John Wiegley
2015-11-10 1:18 ` Dmitry Gutov
2015-11-10 1:40 ` John Wiegley
2015-11-10 3:23 ` Dmitry Gutov
2015-11-10 6:00 ` John Wiegley
2015-11-10 10:54 ` Dmitry Gutov
2015-11-10 14:21 ` John Wiegley
2015-11-10 23:41 ` Stephen Leake
2015-11-11 0:56 ` Dmitry Gutov
2015-11-11 1:17 ` John Wiegley
2015-11-11 1:31 ` Dmitry Gutov
2015-11-11 9:55 ` Stephen Leake
2015-11-11 13:30 ` Dmitry Gutov
2015-11-12 8:46 ` Steinar Bang
2015-11-12 19:35 ` Stephen Leake
2015-11-11 9:44 ` Stephen Leake
2015-11-11 13:39 ` Dmitry Gutov
2015-11-10 17:38 ` Stephen Leake
2015-11-10 19:47 ` Dmitry Gutov
2015-09-16 4:41 ` find-file-project Dmitry Gutov
2015-09-16 13:04 ` find-file-project Stefan Monnier
2015-09-16 17:01 ` find-file-project Stephen Leake
2015-09-16 13:31 ` find-file-project Stephen Leake
2015-09-16 14:13 ` find-file-project Stephen Leake
2015-09-16 15:05 ` find-file-project Dmitry Gutov
2015-09-16 16:58 ` find-file-project Stephen Leake
2015-09-17 17:15 ` find-file-project Dmitry Gutov
2015-09-18 17:14 ` project.el semantics Stephen Leake
2015-09-19 0:08 ` Dmitry Gutov
2015-09-19 12:07 ` Stephen Leake
2015-09-19 12:40 ` Dmitry Gutov
2015-09-16 17:04 ` find-file-project Dmitry Gutov
2015-09-16 21:11 ` find-file-project Stephen Leake
2015-09-17 17:52 ` find-file-project Dmitry Gutov
2015-09-17 1:26 ` find-file-project Stefan Monnier
2015-09-17 18:09 ` find-file-project Dmitry Gutov
2015-09-18 17:07 ` find-file-project Stefan Monnier
2015-09-18 23:41 ` find-file-project Dmitry Gutov
2015-09-19 4:13 ` find-file-project Stefan Monnier
2016-01-06 1:29 ` find-file-project Dmitry Gutov
2016-01-07 4:52 ` find-file-project Stefan Monnier
2016-01-07 17:09 ` find-file-project Dmitry Gutov
2016-01-07 7:12 ` find-file-project Stephen Leake
2016-01-07 17:55 ` find-file-project Dmitry Gutov
2016-01-07 18:26 ` find-file-project Dmitry Gutov
2016-01-07 19:58 ` find-file-project Stephen Leake
2016-01-07 21:12 ` find-file-project Dmitry Gutov
2016-01-08 19:11 ` find-file-project Stephen Leake
2016-01-08 23:49 ` find-file-project Dmitry Gutov
2016-01-09 12:18 ` find-file-project Stephen Leake
2016-01-09 17:11 ` find-file-project Dmitry Gutov
2016-01-08 1:26 ` find-file-project John Wiegley
2016-01-08 1:38 ` find-file-project Dmitry Gutov
2016-01-08 2:19 ` find-file-project Richard Copley
2016-01-08 11:34 ` find-file-project Dmitry Gutov
2016-01-08 7:39 ` find-file-project Stefan Monnier
2016-01-19 6:15 ` find-file-project Dmitry Gutov
2016-01-19 14:20 ` find-file-project Stefan Monnier
2016-01-20 0:51 ` find-file-project Dmitry Gutov
2016-01-20 1:32 ` find-file-project Stefan Monnier
2016-01-20 1:47 ` find-file-project Dmitry Gutov
2016-01-20 2:25 ` find-file-project Stefan Monnier
2016-01-20 15:40 ` find-file-project Dmitry Gutov
2016-01-20 21:58 ` find-file-project Stefan Monnier
2016-01-20 22:12 ` find-file-project Dmitry Gutov
2016-01-20 22:17 ` find-file-project Drew Adams
2016-01-20 22:26 ` find-file-project Dmitry Gutov
2016-01-20 22:48 ` find-file-project Drew Adams
2016-01-20 22:50 ` find-file-project Dmitry Gutov
2016-01-20 23:09 ` find-file-project Drew Adams
2016-01-20 23:23 ` find-file-project Dmitry Gutov
2016-01-20 23:46 ` find-file-project Drew Adams
2016-01-20 23:51 ` find-file-project Dmitry Gutov
2016-01-21 0:08 ` find-file-project Drew Adams
2016-01-21 0:21 ` find-file-project Dmitry Gutov
2016-01-21 3:03 ` find-file-project Dmitry Gutov
2016-01-21 13:46 ` find-file-project Stefan Monnier
2016-01-17 21:23 ` find-file-project John Wiegley
2016-01-17 21:25 ` find-file-project Dmitry Gutov
2016-01-17 23:07 ` find-file-project John Wiegley
2016-01-18 1:42 ` find-file-project Dmitry Gutov
2015-09-16 7:16 ` find-file-project Eli Zaretskii
2015-09-16 13:06 ` find-file-project Stefan Monnier
2015-09-16 13:40 ` find-file-project Stephen Leake
2015-09-16 14:32 ` find-file-project Eli Zaretskii
2015-09-16 14:57 ` find-file-project Dmitry Gutov
2015-09-16 17:03 ` find-file-project Stephen Leake
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=563F4915.1080008@yandex.ru \
--to=dgutov@yandex.ru \
--cc=emacs-devel@gnu.org \
--cc=stephen_leake@stephe-leake.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).