emacs-devel
[Top][All Lists]
Advanced

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

Re: [PATCH] Flymake support for C/C++


From: Alan Mackenzie
Subject: Re: [PATCH] Flymake support for C/C++
Date: Thu, 12 Oct 2017 20:39:53 +0000
User-agent: Mutt/1.7.2 (2016-11-26)

Hello again, João.

On Thu, Oct 12, 2017 at 19:46:20 +0100, João Távora wrote:
> Hi Alan,

> Alan Mackenzie <address@hidden> writes:

> > I must admit not to being too keen on CC Mode changing like this; it
> > would spoil the unity of purpose of the mode.  I've glanced through the
> > new code, but can't quite see why it needs to be an integral part of CC
> > Mode.

> Does setting a variable in the mode function make it an "integral part"?

Yes.  It tightly couples Flymake Mode with CC Mode.  It would render CC
Mode non-functional in the absence of Flymake Mode.  Distinct
functionalities should not be tightly coupled.

> > What is stopping the needed setup and initialisation being in a
> > function to be added to one of the mode's hooks: say c-mode-common-hook,
> > or even c-initialization-hook (which are documented in the CC Mode
> > manual)?

> I may be wrong, but I thought hooks were reserved for the user and
> should be empty by default. 

But it would surely be a user action which would enable flymake-mode,
thus adding to a CC Mode hook.  Major mode hooks are usually not used by
Emacs itself, but I'm not aware of any convention which prohibits it.

> But even if they weren't I don't think it would work:

> c-initialization-hook doesn't work, as flymake-diagnostic-functions is
> a hook which needs a buffer-local value.

OK, so f-d-functions could be set in c-mode-common-hook then, couldn't
it?

> c-mode-common-hook is where a user would turn on `flymake-mode'. I, for
> example, have this in my .emacs, which is the recommended way to turn on
> a minor mode:

>   (add-hook 'c-mode-common-hook 'flymake-mode)

> If the setup is also moved to c-mode-common-hook, then this won't work
> (because flymake-mode activation comes before its setup).

I don't understand that last bit.  What's the difference between
activation and setup?  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?

> > If there is any reason why it couldn't work on a CC Mode hook,

> Absolutely no reason, but those two don't seem to fit. Perhaps some new
> hook run before c-mode-common-hook.

"Those two" being activation and setup?

What do they need which is in CC Mode?  And how would a new CC Mode hook
help?  Would you be wanting it to be run before CC Mode is fully
initialised?

> > I'd far rather solve that reason (thus making the solution available
> > for other libraries too, and pres<erving the unity of CC Mode).

> I don't understand what the boundaries of that "unity" are, ....

"Do one thing and do it well".  Let's not get into the "do it well" bit
here, but the "do one thing" is "edit C/C++/... buffers".  Flymake would
appear to be distinct from that one thing.  What does Flymake do,
anyway?  There's nothing in the Emacs manual about it, and it's doc
string consists purely of boilerplate, at least in Emacs 25.3.

> .... but I do understand cc-mode.el seems to be a special citizen in
> Emacs major-mode-land.

:-)  As a matter of interest CC Mode consists of ~14 files, one of which
is cc-mode.el.

> Anyway Flymake wants to be a part of the global infrastructure for major
> modes, which includes setting variables for recent "fancy" stuff like
> ElDoc (eldoc-documentation-function), and older stuff like newcomment.el
> (comment-*), to give just two examples. My patch does the same for
> Flymake and flymake-diagnostic-functions.

But it should be loosely coupled with major modes, not tightly coupled,
surely?

> João

-- 
Alan Mackenzie (Nuremberg, Germany).



reply via email to

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