unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: "Jostein Kjønigsen" <jostein@secure.kjonigsen.net>
To: theo@thornhill.no, 43559@debbugs.gnu.org
Cc: acm@muc.de
Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode
Date: Tue, 22 Sep 2020 16:26:41 +0200	[thread overview]
Message-ID: <8081dcbd-1e89-c9e6-d691-1270df8f9f19@secure.kjonigsen.net> (raw)
In-Reply-To: <87wo0myn2l.fsf@thornhill.no>

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

On 22.09.2020 15:10, Theodor Thornhill wrote:
> Jostein Kjønigsen <jostein@secure.kjonigsen.net> writes:
>
>> Hey Theo.
>>
>> Thanks for your work on trying to get something new, and possibly better
>> C#-support mainlined in Emacs!
> My pleasure - hopefully we'll get there :)
>
> [...]
>
Hey Theo.

I still haven't looked at the code in your patch, but I've applied it to 
latest Emacs Git master, and given it a test-run.

When going over existing code, everything looks and feels nice. And it's 
much faster than my "old", non-transferable code. So I definitely think 
this is a /very good/ start.

While I hold no "position" in GNU or Emacs as a whole, I would consider 
myself a C# veteran (since 2004), and as the old maintainer of old 
csharp-mode, I think I have some experience which may be useful.

So for the time being, I'll just promote myself to being the "critical 
Emacs C#-user", and provide some feedback based on my expectations for 
how editing C# should feel or behave.

Please don't consider the following comments as negative towards your 
work, or me in any way trying to dissuade you from getting this 
mainlined. I'm just here to try to help you ensure that what you land is 
going to be "good enough" so that it will be easier to argue for 
inclusion in core-Emacs later on :)

So with all that said, so far I've noticed a few things which I think 
arguably goes against C# convention, and would be nice to get fixed, if 
possible. There's also a some things where I just feel it would "better" 
to do things differently.

Roughly it boils down to this list:

1. Attributes

2. Object initializers

3. Lambda indentation

4. Misc variables/field fontification issues


*First off: **Attributes are not handled properly. **
*

In java-mode annotations gets fontified and indented properly:

In your current csharp-mode draft, we get no fontification, and we also 
get a trailing indentation bug for the equivalent C# code:

For annotation-heavy frameworks like ASP.Net Core this might get 
annoying. It would be great if this could get fixed.


*Second: Object initializers are not indented properly.*

Consider the following fairly simple case. Using the provided patch we 
get the following indentation:

According to C# convention, one would expect something more like this:

This one is arguably very hard to get right, because it's a conceptually 
infinitely recursive problem. (You may initialize a property with 
another object-initializer.)

While solving this perfectly for all cases is clearly out the window, do 
you think it would be possible at least to make 1-level 
object-initilizers work?

One the bright side /collection-/initializers seems to work just fine :)


*Third: Lamda-function indentation when used with higher order functions
*

Lambdas also suffer from some unexpected indentation issues:

Here I would expect the following indentation instead:


*Fourth: variable-fontification*

Here I have no absolute C# convention to quote for absolute correctness, 
but it kinda "feels wrong" to me at places.

Without a proper language-engine to guide us, it will be literally 
impossible to know what is a class, a namespace, an enum, a local field 
or an actual variable at any point in the code, and fontify the code 
100% correctly based on that.

So we'll have to make due with imperfections, make some pragmatical 
decisions on what we think will be good default/fallback values, and 
that's OK.

Right now though, all implicitly typed variables (vars), local variables 
with method-access and local fields with property-access are shown using 
/font-lock-constant-face/ and that seems a bit off:

For var-heavy functions, this inconsistency is somewhat distracting, and 
I would much prefer a font-lock-variable-face fallback in these cases.

As for "_field" and "foo.", I'm not sure what the best fallback would 
be. Without a language-engine to guide us, this is genuinely hard stuff 
to get right.

By C# convention pascalCased or _underCased identifiers typically 
represent local variables and object-local fields (and thus might use 
font-lock-variable-face as a fallback).

Conversely CamelCased identifiers typically represent either Classes or 
public properties/methods on those, depending on identifier in question 
being dot-accessed or not (and for these another face might make more 
sense).

I'm sure just/discussing/ the///soft-rules/ for these aspects could take 
months alone, not speaking for the effort required to actually making it 
happen in code.

Consider it something to aim for, but I wouldn't expect anyone to get 
this right in a version 1 of anything.


Otherwise, great work, and thank you for putting in this effort!

-- 
Kind regards
*Jostein Kjønigsen*

jostein@kjonigsen.net 🍵 jostein@gmail.com
https://jostein.kjønigsen.no

[-- Attachment #2.1: Type: text/html, Size: 7246 bytes --]

[-- Attachment #2.2: nhebmpbbonkfichd.png --]
[-- Type: image/png, Size: 7374 bytes --]

[-- Attachment #2.3: epihfhegglofbbha.png --]
[-- Type: image/png, Size: 7013 bytes --]

[-- Attachment #2.4: hfhhbebmljemcgca.png --]
[-- Type: image/png, Size: 5608 bytes --]

[-- Attachment #2.5: fiaafecacbkbgbkh.png --]
[-- Type: image/png, Size: 5475 bytes --]

[-- Attachment #2.6: aceilhdglgpjgcad.png --]
[-- Type: image/png, Size: 5913 bytes --]

[-- Attachment #2.7: mehgknkpcccjilmm.png --]
[-- Type: image/png, Size: 6620 bytes --]

[-- Attachment #2.8: jognflfdjkamkonl.png --]
[-- Type: image/png, Size: 6622 bytes --]

[-- Attachment #2.9: igcegelpjofikpgg.png --]
[-- Type: image/png, Size: 19080 bytes --]

  reply	other threads:[~2020-09-22 14:26 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-22 10:37 bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-09-22 12:51 ` Jostein Kjønigsen
2020-09-22 13:10   ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-09-22 14:26     ` Jostein Kjønigsen [this message]
2020-09-22 21:15       ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-09-23  8:46         ` Jostein Kjønigsen
2020-09-23 10:11 ` Alan Mackenzie
2020-09-23 18:38   ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2020-09-28 19:52   ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-07-21 12:19     ` Lars Ingebrigtsen
2021-07-21 12:36       ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-07-21 12:58         ` Stefan Monnier via Bug reports for GNU Emacs, the Swiss army knife of text editors
2021-07-21 13:18           ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
     [not found]             ` <jwvim13zo90.fsf-monnier+emacs@gnu.org>
     [not found]               ` <35791e76-b783-4856-a4e4-adf7996b5a45@www.fastmail.com>
     [not found]                 ` <jwv5yx3zisf.fsf-monnier+emacs@gnu.org>
     [not found]                   ` <jwvsg07y0jc.fsf-monnier+emacs@gnu.org>
     [not found]                     ` <m1a6mf4fs0.fsf@Frende-MacBook.lan>
     [not found]                       ` <jwvtuknwi87.fsf-monnier+emacs@gnu.org>
     [not found]                         ` <m17dhj4bwo.fsf@Frende-MacBook.lan>
     [not found]                           ` <jwvh7gkrcrw.fsf-monnier+emacs@gnu.org>
     [not found]                             ` <m1mtpcouwb.fsf@Frende-MacBook.lan>
     [not found]                               ` <jwveeamohsz.fsf-monnier+emacs@gnu.org>
     [not found]                                 ` <325FA529-DED9-4061-8536-39168D18A504@thornhill.no>
2021-08-25 16:07                                   ` Lars Ingebrigtsen
2021-07-21 14:05           ` Jostein Kjønigsen

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=8081dcbd-1e89-c9e6-d691-1270df8f9f19@secure.kjonigsen.net \
    --to=jostein@secure.kjonigsen.net \
    --cc=43559@debbugs.gnu.org \
    --cc=acm@muc.de \
    --cc=theo@thornhill.no \
    /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).