From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Alan Mackenzie Newsgroups: gmane.emacs.devel Subject: Re: cc-mode fontification feels random Date: Sun, 6 Jun 2021 11:37:47 +0000 Message-ID: References: <86a85d26-75c0-e4a3-e8d3-244c5346dd3a@dancol.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14599"; mail-complaints-to="usenet@ciao.gmane.io" Cc: emacs-devel@gnu.org To: Daniel Colascione Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Sun Jun 06 13:38:59 2021 Return-path: Envelope-to: ged-emacs-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1lpr7K-0003dw-OP for ged-emacs-devel@m.gmane-mx.org; Sun, 06 Jun 2021 13:38:58 +0200 Original-Received: from localhost ([::1]:51512 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lpr7J-0007J6-Im for ged-emacs-devel@m.gmane-mx.org; Sun, 06 Jun 2021 07:38:57 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:52338) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lpr6J-0006eH-7Q for emacs-devel@gnu.org; Sun, 06 Jun 2021 07:37:55 -0400 Original-Received: from colin.muc.de ([193.149.48.1]:17197 helo=mail.muc.de) by eggs.gnu.org with smtp (Exim 4.90_1) (envelope-from ) id 1lpr6H-00056v-1L for emacs-devel@gnu.org; Sun, 06 Jun 2021 07:37:55 -0400 Original-Received: (qmail 92493 invoked by uid 3782); 6 Jun 2021 11:37:48 -0000 Original-Received: from acm.muc.de (p2e5d5696.dip0.t-ipconnect.de [46.93.86.150]) (using STARTTLS) by colin.muc.de (tmda-ofmipd) with ESMTP; Sun, 06 Jun 2021 13:37:47 +0200 Original-Received: (qmail 6239 invoked by uid 1000); 6 Jun 2021 11:37:47 -0000 Content-Disposition: inline In-Reply-To: <86a85d26-75c0-e4a3-e8d3-244c5346dd3a@dancol.org> X-Submission-Agent: TMDA/1.3.x (Ph3nix) X-Primary-Address: acm@muc.de Received-SPF: pass client-ip=193.149.48.1; envelope-from=acm@muc.de; helo=mail.muc.de X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane-mx.org@gnu.org Original-Sender: "Emacs-devel" Xref: news.gmane.io gmane.emacs.devel:270472 Archived-At: Hello, Daniel. On Fri, Jun 04, 2021 at 11:30:09 -0700, Daniel Colascione wrote: > On 6/4/21 8:54 AM, Alan Mackenzie wrote: > >> Is there any *general* way that we can make fontification more robust > >> and consistent? > > Like other people have said on the thread, rewriting CC Mode to use an > > LSP parser. > > Less drastically, it would be possible to fix the specific bug you > > allude to, by the user making a list of types and configuring CC Mode > > with them, rather than attempting to recognise such types. This feels > > as though it would be tedious to use, though. > I understand that cc-mode can't always get it right. It's only > asymptotically omniscient. :-) Some deficiencies in highlighting are > bound to happen. > What's striking to me is the inconsistency in the highlighting. None of > the types in the std::variant declaration in my screenshot is special. > They're all declared in the same file as the std::variant typedef. So > why is PrimitiveType fontified while the others aren't? Because of the order various jit-lock chunks are fontified. If the chunk which establishes foo as a type is fontified first, subsequent fontifications of foo will use font-lock-type-face. Otherwise, not. > FWIW, fontification is correct and consistent when I set > font-lock-support-mode to nil, so this really does look like another > case of getting unlucky with jit-lock block divisions. Maybe an improvement might come from scanning the buffer for occurrences of foo after foo has been recognised as a type and entered into the CC Mode table. That way, the lack of fontification on foo would be temporary, at least provided your Emacs is configured to fontify non-displayed bits of the buffer in the background (which it is by default). This might need enhanced support from jit-lock, such as some sort of signal indicating a buffer has been completly fontified. I haven't thought this through, yet. > Yes, I'm sure that this particular problem is caused by some bug, and > with the right repro, we can quickly isolate and fix it. But this kind > of seemingly-inexplicable inconsistent highlighting has been happening > for years and years now. There's something fundamental about the way > cc-mode is written that makes bugs like this keep popping up. Is there > some internal abstraction we can add, some algorithmic test suite we > can write, that would make this whole class of bug less likely? Well, "seemingly-inexplicable inconsistent highlighting" isn't much to go on. If this means "problems with types not getting fontified", then see above. Otherwise, particulars help. It may well be that the ad-hoc parsing method which CC Mode uses is no longer appropriate for the modern languages it supports; that's what a lot of this thread has been discussing. By "internal abstraction" I think you might mean getting information from a compiler, or building a partial compiler into CC Mode. This is surely possible in theory, but in practice? [ .... ] -- Alan Mackenzie (Nuremberg, Germany).