* bug#40421: 26.2; (And 27.0.90) Inconsistent fontifying in c-mode
@ 2020-04-04 1:08 Rolf Ade
[not found] ` <mailman.96.1585962545.2644.bug-gnu-emacs@gnu.org>
0 siblings, 1 reply; 4+ messages in thread
From: Rolf Ade @ 2020-04-04 1:08 UTC (permalink / raw
To: 40421
Recipt:
emacs -Q
Insert:
/* 11 */
EXTERN int XML_GetCurrentByteCount(XML_Parser parser);
/* 12 */
EXTERN enum XML_Status XML_SetBase(XML_Parser parser, const XML_Char *base);
/* 13 */
EXTERN const XML_Char * XML_GetBase(XML_Parser parser);
/* 14 */
EXTERN int XML_GetSpecifiedAttributeCount(XML_Parser parser);
/* 15 */
and M-x c-mode. The font-look seems randomly. Some EXTERN colered, some
not, some function names black, some blue.
The whole (small) file is here
http://tdom.org/index.html/raw/generic/tdomDecls.h?name=cccb9227. With
this syntactically correct file (at least gcc and clang consume it
without complain) there is similiar font-lock flicker around the lines
commented with 12, 13, 14.
I report this (and see it) on my working-place emacs-26.2 but have
verified, that a freshly build emacs-27.0.90 shows the same behaviour.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#40421: 26.2; (And 27.0.90) Inconsistent fontifying in c-mode
[not found] ` <mailman.96.1585962545.2644.bug-gnu-emacs@gnu.org>
@ 2020-04-04 9:09 ` Alan Mackenzie
2020-04-10 0:50 ` Rolf Ade
0 siblings, 1 reply; 4+ messages in thread
From: Alan Mackenzie @ 2020-04-04 9:09 UTC (permalink / raw
To: Rolf Ade; +Cc: 40421
Hello, Rolf.
In article <mailman.96.1585962545.2644.bug-gnu-emacs@gnu.org> you wrote:
> Recipt:
> emacs -Q
> Insert:
> /* 11 */
> EXTERN int XML_GetCurrentByteCount(XML_Parser parser);
> /* 12 */
> EXTERN enum XML_Status XML_SetBase(XML_Parser parser, const XML_Char *base);
> /* 13 */
> EXTERN const XML_Char * XML_GetBase(XML_Parser parser);
> /* 14 */
> EXTERN int XML_GetSpecifiedAttributeCount(XML_Parser parser);
> /* 15 */
> and M-x c-mode. The font-look seems randomly. Some EXTERN colered, some
> not, some function names black, some blue.
Yes. The problem here is that these declarations aren't syntactically
correct C. To C Mode, "EXTERN" just looks like an ordinary identifier,
not a macro which (presumably) expands to "extern".
I would recommend you to use CC Mode's "noise macro" facility here.
(See the CC Mode manual.) With this, you would tell CC Mode that
"EXTERN" just "expands to nothing", and thus won't interfere with the
syntactic analysis. One way to do this is to set c-noise-macro-names in
a hook function, probably c-mode-common-hook. Another way (if you don't
have many source files) would be to set that variable in a file local
variables section (see the Emacs manual) - for example, put the
following at the end of your C file:
/* Local Variables: */
/* c-noise-macro-names: ("EXTERN") */
/* END: */
. Then restart C Mode with M-x c-mode. The fontification should now
look OK.
> The whole (small) file is here
> http://tdom.org/index.html/raw/generic/tdomDecls.h?name=cccb9227. With
> this syntactically correct file (at least gcc and clang consume it
> without complain) there is similiar font-lock flicker around the lines
> commented with 12, 13, 14.
Thanks for taking the trouble to reduce the problem to a minimal test
case. That's appreciated.
> I report this (and see it) on my working-place emacs-26.2 but have
> verified, that a freshly build emacs-27.0.90 shows the same behaviour.
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#40421: 26.2; (And 27.0.90) Inconsistent fontifying in c-mode
2020-04-04 9:09 ` Alan Mackenzie
@ 2020-04-10 0:50 ` Rolf Ade
2020-04-13 18:32 ` Alan Mackenzie
0 siblings, 1 reply; 4+ messages in thread
From: Rolf Ade @ 2020-04-10 0:50 UTC (permalink / raw
To: Alan Mackenzie; +Cc: 40421
Hello Alan,
Alan Mackenzie <acm@muc.de> writes:
> In article <mailman.96.1585962545.2644.bug-gnu-emacs@gnu.org> you wrote:
>
>> Recipt:
>
>> emacs -Q
>
>> Insert:
>
>> /* 11 */
>> EXTERN int XML_GetCurrentByteCount(XML_Parser parser);
>> /* 12 */
>> EXTERN enum XML_Status XML_SetBase(XML_Parser parser, const XML_Char *base);
>> /* 13 */
>> EXTERN const XML_Char * XML_GetBase(XML_Parser parser);
>> /* 14 */
>> EXTERN int XML_GetSpecifiedAttributeCount(XML_Parser parser);
>> /* 15 */
>
>> and M-x c-mode. The font-look seems randomly. Some EXTERN colered, some
>> not, some function names black, some blue.
>
> Yes. The problem here is that these declarations aren't syntactically
> correct C. To C Mode, "EXTERN" just looks like an ordinary identifier,
> not a macro which (presumably) expands to "extern".
To that, or, depending on the build evironment, to something similar,
yes.
I can understand, that c-mode doesn't get this right. But part of the
point was the apparent randomly switching of the fontification. Getting
the colors wrong is one thing (but c-mode don't even got it wrong, for
the first handful of function prototypes), but getting it wrong
inconstently irritates particularly.
But, yes ...
> I would recommend you to use CC Mode's "noise macro" facility here.
> (See the CC Mode manual.) With this, you would tell CC Mode that
> "EXTERN" just "expands to nothing", and thus won't interfere with the
> syntactic analysis. One way to do this is to set c-noise-macro-names in
> a hook function, probably c-mode-common-hook. Another way (if you don't
> have many source files) would be to set that variable in a file local
> variables section (see the Emacs manual) - for example, put the
> following at the end of your C file:
>
> /* Local Variables: */
> /* c-noise-macro-names: ("EXTERN") */
> /* END: */
>
> . Then restart C Mode with M-x c-mode. The fontification should now
> look OK.
... that works well, thanks.
Sorry for the noise.
>> The whole (small) file is here
>> http://tdom.org/index.html/raw/generic/tdomDecls.h?name=cccb9227. With
>> this syntactically correct file (at least gcc and clang consume it
>> without complain) there is similiar font-lock flicker around the lines
>> commented with 12, 13, 14.
>
> Thanks for taking the trouble to reduce the problem to a minimal test
> case. That's appreciated.
>
>> I report this (and see it) on my working-place emacs-26.2 but have
>> verified, that a freshly build emacs-27.0.90 shows the same behaviour.
^ permalink raw reply [flat|nested] 4+ messages in thread
* bug#40421: 26.2; (And 27.0.90) Inconsistent fontifying in c-mode
2020-04-10 0:50 ` Rolf Ade
@ 2020-04-13 18:32 ` Alan Mackenzie
0 siblings, 0 replies; 4+ messages in thread
From: Alan Mackenzie @ 2020-04-13 18:32 UTC (permalink / raw
To: Rolf Ade; +Cc: 40421
Hello, Rolf
On Fri, Apr 10, 2020 at 02:50:12 +0200, Rolf Ade wrote:
> Hello Alan,
> Alan Mackenzie <acm@muc.de> writes:
> > In article <mailman.96.1585962545.2644.bug-gnu-emacs@gnu.org> you wrote:
> >> Recipt:
> >> emacs -Q
> >> Insert:
> >> /* 11 */
> >> EXTERN int XML_GetCurrentByteCount(XML_Parser parser);
> >> /* 12 */
> >> EXTERN enum XML_Status XML_SetBase(XML_Parser parser, const XML_Char *base);
> >> /* 13 */
> >> EXTERN const XML_Char * XML_GetBase(XML_Parser parser);
> >> /* 14 */
> >> EXTERN int XML_GetSpecifiedAttributeCount(XML_Parser parser);
> >> /* 15 */
> >> and M-x c-mode. The font-look seems randomly. Some EXTERN colered, some
> >> not, some function names black, some blue.
> > Yes. The problem here is that these declarations aren't syntactically
> > correct C. To C Mode, "EXTERN" just looks like an ordinary identifier,
> > not a macro which (presumably) expands to "extern".
> To that, or, depending on the build evironment, to something similar,
> yes.
> I can understand, that c-mode doesn't get this right. But part of the
> point was the apparent randomly switching of the fontification. Getting
> the colors wrong is one thing (but c-mode don't even got it wrong, for
> the first handful of function prototypes), but getting it wrong
> inconstently irritates particularly.
Sorry, I don't think I can offer anything constructive, here. Macro
occurrences in text are difficult to handle well, since they can expand
to anything at all (or nothing). Only if (?when) CC Mode starts doing
deeper analysis of the code, something compiler-like, is there really any
hope for anything better.
> But, yes ...
> > I would recommend you to use CC Mode's "noise macro" facility here.
> > (See the CC Mode manual.) With this, you would tell CC Mode that
> > "EXTERN" just "expands to nothing", and thus won't interfere with the
> > syntactic analysis. One way to do this is to set c-noise-macro-names in
> > a hook function, probably c-mode-common-hook. Another way (if you don't
> > have many source files) would be to set that variable in a file local
> > variables section (see the Emacs manual) - for example, put the
> > following at the end of your C file:
> > /* Local Variables: */
> > /* c-noise-macro-names: ("EXTERN") */
> > /* END: */
> > . Then restart C Mode with M-x c-mode. The fontification should now
> > look OK.
> ... that works well, thanks.
Good! :-)
> Sorry for the noise.
Not a problem. I'll close the bug report (as notabug). Sorry I can't
offer anything better.
> >> The whole (small) file is here
> >> http://tdom.org/index.html/raw/generic/tdomDecls.h?name=cccb9227. With
> >> this syntactically correct file (at least gcc and clang consume it
> >> without complain) there is similiar font-lock flicker around the lines
> >> commented with 12, 13, 14.
> > Thanks for taking the trouble to reduce the problem to a minimal test
> > case. That's appreciated.
> >> I report this (and see it) on my working-place emacs-26.2 but have
> >> verified, that a freshly build emacs-27.0.90 shows the same behaviour.
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-04-13 18:32 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-04-04 1:08 bug#40421: 26.2; (And 27.0.90) Inconsistent fontifying in c-mode Rolf Ade
[not found] ` <mailman.96.1585962545.2644.bug-gnu-emacs@gnu.org>
2020-04-04 9:09 ` Alan Mackenzie
2020-04-10 0:50 ` Rolf Ade
2020-04-13 18:32 ` Alan Mackenzie
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).