unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
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).



  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).