Subject: bug#37774: 27.0.50; new :extend attribute broke visuals of all themes and other packages

From: Jonas Bernoulli <[email-masked]>
Date: Thu, 31 Oct 2019 17:06:17 +0100

Dmitry keeps urging me to comment here, so I am doing that even though
I don't feel like I understand this enough yet to not make a fool of
myself.  Oh well, if you insist.

My main concern--and, due to what I believe to be bugs in the current
implementation, I haven't been able to verify whether that is a valid
concerns--is that each and every theme that customizes a face that was
defined to `extend' beyond eol will have to redo that configuration.

If this is really so, then it will take years until all themes have been
adjusted and through these years users will keep failing bug reports
about broken looks of Magit and other packages.  I do not look forward
to that.

Then again maybe I am wrong about that. However I have glanced over some
things that sound like `extend' is getting some special treatment that
does not apply to other attributes.  If that is so then I would consider
that a mistake and a strong indicator that maybe another approach should
be found that does not require any special treatment.

IMO going with a `noextend' attribute instead of `extend' would be that
alternative approach.  Even if `extend' does not require any special
treatment and even if it does not require each and every theme to be
adjusted.  Again, I don't know whether there is any special treatment
and whether themes have to be adjusted.

(It should be clear by now that I am not so happy that Dmitry kept
urging me to comment here.)

Okay then lets move to the bugs that I have found, possibly.  Maybe they
are not bugs and I have just done something stupid without realizing it.
Anyways...

I believe that sometimes a face extends beyond eol even though there is
nothing (no explicit `:extend t` nor any `:inherit' what-so-ever) that
tells it to do so.  Maybe it does make a difference whether the face is
used by an overlay or not.  Or maybe that is completely irrelevant.
Other faces however do not extend past eol and I am unable to see how
these faces differ from the faces that do.

You can verify that
(1) by making sure no theme is in use
(2) opening a Magit diff
(3) note how most faces extend beyond eol
(4) look at the definition of these faces and notice that there is
    nothing that tells those faces to extend beyond eol.  Yet they
    do.

Such faces include for example `magit-section-highlight' and
`magit-diff-added'.

A counter example is `magit-diff-file-heading-highlight'.  That does
not extend and I don't see how it is different from the other faces
that I mentioned.