unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: Lynn Winebarger <owinebar@gmail.com>
To: Eli Zaretskii <eliz@gnu.org>
Cc: Alan Mackenzie <acm@muc.de>,
	gregory@heytings.org, Lars Ingebrigtsen <larsi@gnus.org>,
	emacs-devel <emacs-devel@gnu.org>
Subject: Re: New optimisations for long raw strings in C++ Mode.
Date: Fri, 12 Aug 2022 09:05:06 -0400	[thread overview]
Message-ID: <CAM=F=bCCPL3n_F=xcVtPQoxiDwC9hwKQhsOSM4H0CcpX1oJFmg@mail.gmail.com> (raw)
In-Reply-To: <834jykq9m6.fsf@gnu.org>

[-- Attachment #1: Type: text/plain, Size: 3449 bytes --]

On Wed, Aug 10, 2022, 1:44 PM Eli Zaretskii <eliz@gnu.org> wrote:

>
> Really?  Then please tell me how is it that we the humans can detect
> incorrect fontifications even when shown partial strings and comments?
> We know that fontifications are incorrect, and where strings or
> comments start or end immediately, just after a single glance.  We
> never need to go to BOB to find that out.


Serious question: is fontification intended to display text according to
what the author probably intended, or according to how a compiler will
process that text (leaving correctness to a more precise tool than
font-lock, whether Semantic, tree-sitter, LSP, whatever)?
Because I can definitely write code that has some subtle issue that I will
miss, and erroneously think should display one way but which would be
processed in a different way.  Should fontification show my likely
intention (plus, and only for bonus points, possibly highlight the error
that disconnects the likely intended from the actual parse), or should it
display according to the way the tools will interpret it so the author will
find errors that way?

When I use a dedicated IDE of recent vintage, it feels  less like I am
writing a stream of characters than filling in partially constructed
objects representing the abstract syntax of the language I'm writing in
(with grammar that has allowances for incomplete or erroneous constructs),
with the text being displayed as a representation of the underlying
object.  IOW, the relationship of the syntactic object and the text is
inverted compared to emacs's design, where (if I understand correctly) the
properties of the syntactic object are only tied to the text through text
properties.  With the other approach, the fontification and the syntax
object are tied together, but with emacs the relationship seems much more
tenuous. E.g. completion and fontification are completely separate
activities as far as I know, though the same contextual information should
be useful for both activities.

I have this CC-mode derived mode for a DSL I did not design.  I'm currently
the sole user of the mode, so I just wanted something quick and dirty.  But
as the pile of code I deal with in this DSL grows, I want to put in
Semantic support for it to get context-aware completion, precise
fontification, etc.  The current discussion has made me wonder if deriving
from CC mode is having some non-obvious effects on how font-lock works,
making it non-local in ways that are not necessary, so the re-entrant
nature of the Semantic parsers won't cure some of the slowness.  For
example, I want to use the font-lock of that mode in the REPL to fontify
the statements/expressions I enter at the prompt, but otherwise ignore
text.  Particularly, at the end and the beginning of the REPL buffer.  I
don't want to narrow the buffer, just the area fontification applies to.
Fontifying hundreds of megabytes of tracing print statements is not just
unnecessary, it's bad news for the GC even after the buffer is cleared IME.

If CC mode is determining more syntactic information than tree-sitter's
incremental parsing provides (per Immanuel Lizroth's comment in this
thread), then there is a disconnect somewhere in the scope of expectations
for what font-lock is supposed to do.  I'm certainly not clear (yet) on how
to cleanly separate and then rejoin a proper syntactic analysis with
fontification, and if there is "an Emacs way" to do it.

Lynn

[-- Attachment #2: Type: text/html, Size: 4098 bytes --]

  parent reply	other threads:[~2022-08-12 13:05 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-06 21:29 New optimisations for long raw strings in C++ Mode Alan Mackenzie
2022-08-07 12:49 ` Lars Ingebrigtsen
2022-08-07 13:25   ` Alan Mackenzie
2022-08-07 13:34     ` Lars Ingebrigtsen
2022-08-07 14:40       ` Alan Mackenzie
2022-08-07 14:41         ` Lars Ingebrigtsen
2022-08-07 14:54         ` Lars Ingebrigtsen
2022-08-07 16:13           ` Alan Mackenzie
2022-08-07 16:17             ` Eli Zaretskii
2022-08-09 11:00               ` Alan Mackenzie
2022-08-09 15:35                 ` Lars Ingebrigtsen
2022-08-09 15:38                   ` Lars Ingebrigtsen
2022-08-09 16:05                     ` Alan Mackenzie
2022-08-09 16:34                       ` Eli Zaretskii
2022-08-09 20:39                         ` Gregory Heytings
2022-08-09 21:43                           ` Alan Mackenzie
2022-08-09 23:05                             ` Stefan Monnier
2022-08-10  2:43                               ` Eli Zaretskii
2022-08-10  7:42                             ` Gregory Heytings
2022-08-10 13:28                             ` Eli Zaretskii
2022-08-10 16:23                               ` Alan Mackenzie
2022-08-10 16:35                                 ` Eli Zaretskii
2022-08-10 16:50                                   ` Alan Mackenzie
2022-08-10 16:58                                     ` Eli Zaretskii
2022-08-10 17:32                                       ` Alan Mackenzie
2022-08-10 17:41                                         ` Eli Zaretskii
2022-08-10 22:31                                           ` Stefan Monnier
2022-08-11  6:21                                             ` Eli Zaretskii
2022-08-11  7:37                                               ` Stefan Monnier
2022-08-11  6:27                                             ` Immanuel Litzroth
2022-08-11 16:54                                           ` Alan Mackenzie
2022-08-11 17:15                                             ` Eli Zaretskii
2022-08-12 13:05                                           ` Lynn Winebarger [this message]
2022-08-12 13:18                                             ` Eli Zaretskii
2022-08-11 15:47                                         ` Yuri Khan
2022-08-11 16:04                                           ` Eli Zaretskii
2022-08-10 17:19                                 ` Gregory Heytings
2022-08-10 17:21                                   ` Eli Zaretskii
2022-08-10 19:45                                   ` Alan Mackenzie
2022-08-14 20:15                                     ` Alan Mackenzie
2022-08-15  8:00                                       ` Gregory Heytings
2022-08-10 13:25                     ` Eli Zaretskii
2022-08-12 12:44                       ` Lars Ingebrigtsen
2022-08-12 12:52                         ` Eli Zaretskii
2022-08-07 15:00         ` Eli Zaretskii

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='CAM=F=bCCPL3n_F=xcVtPQoxiDwC9hwKQhsOSM4H0CcpX1oJFmg@mail.gmail.com' \
    --to=owinebar@gmail.com \
    --cc=acm@muc.de \
    --cc=eliz@gnu.org \
    --cc=emacs-devel@gnu.org \
    --cc=gregory@heytings.org \
    --cc=larsi@gnus.org \
    /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).