From: Alan Mackenzie <acm@muc.de>
To: "João Távora" <joaotavora@gmail.com>
Cc: eliz@gnu.org, npostavs@users.sourceforge.net, sdl.web@gmail.com,
monnier@iro.umontreal.ca, emacs-devel@gnu.org
Subject: Re: [PATCH] Flymake support for C/C++
Date: Sat, 2 Jun 2018 10:33:17 +0000 [thread overview]
Message-ID: <20180602103317.GA4392@ACM> (raw)
In-Reply-To: <87in72p3yq.fsf@gmail.com>
Hello, João
On Fri, Jun 01, 2018 at 22:54:53 +0100, João Távora wrote:
> Alan Mackenzie <acm@muc.de> writes:
> > cc-flymake.el is like the font locking patterns for CC Mode as they were
> > ~20 years ago. It has nothing in common with CC Mode. It is likely to
> > stay that way for the forseeable future. Isn't it?
> Yes. No problem. Will change to flymake-cc.el
And take all the symbol names out of CC Mode's namespace, please?
> >> Activation is enabling the minor mode via the flymake-mode
> >> function. Setup is ensuring that that activation is met with suitable
> >> circunstances for the correct operation of the minor mode, in this case
> >> that cc-specific "backends" are set.
> > So setup is major mode dependant.
> Yes.
> >> > It would seem then, the activation has nothing to do with the major
> >> > mode, or else it could be done in a major mode hook. What am I
> >> > missing here?
> >> You are not mistaken that activation has nothing to do with the major
> >> mode, but you are missing that there are two steps, activation and
> >> setup, that they differ in the ways I hope to have clarified above.
> > The activation is done just once per Emacs session, then?
> No, activation of a minor mode is done once per major-mode call. I.e
> everytime you visit a c-mode buffer.
And the setup is also done once per major mode call. At the moment I
can't see why these are distinct. I'll try reading some earlier posts
again, maybe this will help.
> > If the user needed it with CC Mode, then this activation would be a
> > prime use of c-initialization-hook.
> > The setup would likewise be a prime use for c-mode-common-hook, or one
> > of (c-mode-hook, c++-mode-hook, java-mode-hook, ....)
> No, read below.
> >> No sorry, those two being the two hooks that you suggested.
> >> > What do they need which is in CC Mode?
> >> They need to hook on to the major mode's function.
> > Maybe I've lost information over the last few months, but how is
> > c-mode-common-hook not a suitable way for this to occur.
> Because c-mode-common-hook, AFAIU is where the user places his own hook.
> And the user might want to *remove* the flymake-cc-backend from
> flymake-diagnostic-functions in that hook. Or he might want to add his
> own backends, in which case he shouldn't have to worry whether that hook
> element runs before or after the one that flymake-cc.el would have
> placed there.
The flymake hook which would be put into c-mode-common-hook should be
designed such that it doesn't matter whether it is executed before or
after the user's other hook functions. A user doing something like
removing something from flymake-diagnostic-functions will surely be doing
this in flymake-mode-hook, no?
> Or maybe some user with some old configuration does some `setq' on the
> hook var, which has always worked, that user would be surprised that
> M-x flymake-mode doesn't do what his neighbour's does.
Hook variables get changed with add-hook and remove-hook. Anybody using
setq for this has problems anyway.
[ .... ]
> I was merely pointing out that a brief "flymake" appearance in
> cc-mode.el would hardly be an exception. Of course Emacs has so many
> other parts that some of them are bound to not appear in cc-mode :-).
Calling flymake directly from C Mode would very much be an exception.
This would go against the fundamental architecture of Emacs.
[ .... ]
> > But you're proposing tightening the coupling between flymake and CC
> > Mode, you're proposing explicitly calling flymake from CC Mode, you're
> > proposing putting flymake stuff inside the CC Mode source code.
> Now come on! :-) I propose a line that adds a symbol to a hook,
> something that will never break if flymake disappears, or is redesigned
> to become a specialized brocolli cooker instead. And I've already
> agreed to call the file something else that doesn't interfere with the
> cc-*.el file-naming-space.
CC Mode doesn't have, and shouldn't have direct interfaces with brocolli
cookers. Cooks should use hooks.
And just a small point, your proposed patch is lacking clauses like
(if (boundp 'flymake-diagnostic-functions) ....)
to check that flymake mode actually exists, and an assignment to it won't
throw an error if it doesn't exist.
> > I still don't see the reason why. Hooks were designed to allow loose
> > coupling between unrelated subsystems. Why can't we use them?
> We can, but I believe c-mode-common-hook in particular should be a
> pristine nil after Emacs -Q. Perhaps I am mistaken and it's not that
> common a practice, but all the major modes flymake has entered in have
> followed the same guideline.
c-mode-common-hook should, indeed must, be nil on Emacs -Q. And flymake
mode must equally remain disabled until explicitly enabled (e.g. by a
user customisation). The whole point of -Q is to get an uncustomised
vanilla Emacs.
> Take care,
> João
--
Alan Mackenzie (Nuremberg, Germany).
next prev parent reply other threads:[~2018-06-02 10:33 UTC|newest]
Thread overview: 65+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-10-12 15:09 [PATCH] Flymake support for C/C++ João Távora
2017-10-12 15:50 ` Mark Oteiza
2017-10-12 17:50 ` Alan Mackenzie
2017-10-12 18:45 ` Stefan Monnier
2017-10-12 20:45 ` Alan Mackenzie
2017-10-12 21:03 ` Stefan Monnier
2017-10-13 6:28 ` Eli Zaretskii
2017-10-12 18:46 ` João Távora
2017-10-12 20:39 ` Alan Mackenzie
2017-10-12 21:05 ` Stefan Monnier
2017-10-12 21:24 ` João Távora
2018-06-01 21:07 ` Alan Mackenzie
2018-06-01 21:54 ` João Távora
2018-06-01 22:08 ` Stefan Monnier
2018-06-01 23:23 ` Rolf Ade
2018-06-02 10:33 ` Alan Mackenzie [this message]
2018-06-02 14:44 ` Stefan Monnier
2018-06-02 18:13 ` João Távora
2018-06-03 15:45 ` Alan Mackenzie
2018-06-03 16:28 ` João Távora
2018-06-03 16:43 ` Alan Mackenzie
2018-06-03 17:02 ` João Távora
2018-06-02 17:16 ` Stefan Monnier
2018-06-02 15:26 ` Stefan Monnier
2018-06-03 13:44 ` Alan Mackenzie
2017-10-14 1:34 ` Richard Stallman
2017-10-14 7:10 ` Reuben Thomas
2017-10-14 7:58 ` Sami Kerola
2017-10-14 8:00 ` Eli Zaretskii
2017-10-14 8:15 ` Reuben Thomas
2017-10-14 8:22 ` Dmitry Gutov
2017-10-14 8:29 ` Reuben Thomas
2017-10-14 10:36 ` Eli Zaretskii
2017-10-14 11:22 ` Reuben Thomas
2017-10-14 8:33 ` Eli Zaretskii
2017-10-17 10:53 ` Phillip Lord
2017-10-17 10:56 ` Reuben Thomas
2017-10-18 4:03 ` Richard Stallman
2017-10-18 10:18 ` Reuben Thomas
2017-10-19 3:26 ` Richard Stallman
2017-10-19 7:38 ` Reuben Thomas
2017-10-22 23:18 ` Richard Stallman
2017-10-22 23:23 ` Reuben Thomas
2017-10-24 4:12 ` Richard Stallman
2017-10-24 9:45 ` Reuben Thomas
2017-10-24 9:48 ` Dmitry Gutov
2017-10-24 9:52 ` Reuben Thomas
2017-10-24 9:57 ` Dmitry Gutov
2017-10-24 10:07 ` Reuben Thomas
2017-10-24 10:21 ` Dmitry Gutov
2017-10-24 10:28 ` Reuben Thomas
2017-10-24 15:44 ` Stefan Monnier
2017-10-25 19:30 ` Richard Stallman
2017-10-27 0:43 ` Reuben Thomas
2017-10-28 21:47 ` Richard Stallman
2017-10-18 12:16 ` Clément Pit-Claudel
2017-10-18 17:30 ` John Wiegley
2017-10-14 13:55 ` Stefan Monnier
2017-10-14 9:33 ` João Távora
2017-10-14 10:56 ` guillaume papin
2017-10-14 16:29 ` João Távora
2017-10-14 16:36 ` Reuben Thomas
2017-10-18 12:22 ` Clément Pit-Claudel
2017-10-18 14:26 ` João Távora
2017-10-14 9:29 ` João Távora
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=20180602103317.GA4392@ACM \
--to=acm@muc.de \
--cc=eliz@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=joaotavora@gmail.com \
--cc=monnier@iro.umontreal.ca \
--cc=npostavs@users.sourceforge.net \
--cc=sdl.web@gmail.com \
/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).