GNU bug report logs - #43559
28.0.50; [PATCH] Add csharp support to cc-mode

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Theodor Thornhill <theo@HIDDEN>; dated Tue, 22 Sep 2020 10:39:02 UTC; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 14:06:24 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 21 10:06:24 2021
Received: from localhost ([127.0.0.1]:38153 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1m6Crf-0001wn-PM
	for submit <at> debbugs.gnu.org; Wed, 21 Jul 2021 10:06:24 -0400
Received: from wout5-smtp.messagingengine.com ([64.147.123.21]:60471)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <jostein@HIDDEN>) id 1m6Cre-0001wa-1j
 for 43559 <at> debbugs.gnu.org; Wed, 21 Jul 2021 10:06:22 -0400
Received: from compute3.internal (compute3.nyi.internal [10.202.2.43])
 by mailout.west.internal (Postfix) with ESMTP id EF27A3200957;
 Wed, 21 Jul 2021 10:06:15 -0400 (EDT)
Received: from imap1 ([10.202.2.51])
 by compute3.internal (MEProxy); Wed, 21 Jul 2021 10:06:16 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 secure.kjonigsen.net; h=mime-version:message-id:in-reply-to
 :references:date:from:reply-to:to:cc:subject:content-type; s=
 fm3; bh=mROVJyIul/mDrQ0EI7fK+h7w3cxefBq/F+Tbu4J5d3o=; b=MDhTYHR+
 nYC5cU2w0+IwkH6zzjWmx34Cnb6ZrfyrfX05ISpGm2qP3Kka17RKbzIeopopPTb4
 4WeHf/C99RWjzTy48HrfYyC+VrFNAGHckPB2340xVafC8fmubsx7LQCGwYgV6rNi
 QVFdbeWUAxANVEqUFOwGyzwbJT6bCLvSpNOisR17L4yWrfT71QluwLXsrrTUgoiN
 3bbatJT6v/9rqQ2jXh79Z/wJynnoH3rUXWwuFGWa1xPZZmyvvMaUAzmKDhr03+7+
 ItPov2jxCsMEcQ/3sl/YsATPGdy5Is63aIXJlfTh1ETrxPFhGUnrDNNzjNgJ3IMY
 oMnJ9Mt0GwTOVg==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:content-type:date:from:in-reply-to
 :message-id:mime-version:references:reply-to:subject:to
 :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=
 fm3; bh=mROVJyIul/mDrQ0EI7fK+h7w3cxefBq/F+Tbu4J5d3o=; b=uDuR+hKa
 2DyoKJqn8rs0e61PE8RimMhHRb4VgXSVoWTzcvXdqbJyBbcMjLnkgGCJJEAr7FHW
 W5pKumt8Oz5lFxoRuEulLFfaKmViPhznSM3+Tkspw8ZYZQ6/O6zPTlIchOYzA1WW
 tCPHLq5xjdb9RJQKlgCO6s1cde6OPPxWnwoDTiwyilM38uM/F1HP7+n/vq7nLRLd
 K84RpZ5Dma4IuaTmDvjyqkqT3AUOzceWrAcvf6WtvbaNLFRTdUZGAdfIr2lmjenl
 e7hm6CcIRGMd0gO9LlVkXlwiuifB7Mi4ai+wjGsw9JrsTCU5C9l1vRmHHT2GLd4U
 NWbaHm7JqXIr0w==
X-ME-Sender: <xms:1in4YNN1geXBg6nxqkxksPrQG5ub_Sup9T7DMrWED-SMAqifK672Kg>
 <xme:1in4YP_YdOjeXZOVBCGDhHhlQeHVgn-sZckVzMpDj-5swURJ59Cx88-PYntC_WFin
 tHeZISS3G9nutM09g>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrfeeggdeiiecutefuodetggdotefrodftvf
 curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
 uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
 fjughrpefofgggkfgjfhffhfhrvffutgesrgdtreerreerjeenucfhrhhomheplfhoshht
 vghinhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnih
 hgshgvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepjeevfeffieeijeegtdejkeejgfev
 tefhuefhudettdelgffghfeujeefuedvhefhnecuffhomhgrihhnpehkjhhnihhgshgvnh
 drnhhonecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhep
 jhhoshhtvghinhesshgvtghurhgvrdhkjhhonhhighhsvghnrdhnvght
X-ME-Proxy: <xmx:1in4YMTWKRn6RuaACfJ8Gk35kiNVC8-OMD1-FbFsIhWl0KZcAoLkXg>
 <xmx:1in4YJv1V4e1lTYB5CFELzwQbsjl4mbs3PInobcbXGE1zupIQAVBwg>
 <xmx:1in4YFeZRLhk38u_1qH4UkqtKQL216FluqmirTlZoMrb1TjQTCoR3Q>
 <xmx:1in4YJ5E2aTYvzHeR98IqyVPooWFoNm2OCz7gGoJQo5SCNu6egp-Gg>
Received: by mailuser.nyi.internal (Postfix, from userid 501)
 id 358E1130114A; Wed, 21 Jul 2021 10:06:14 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.5.0-alpha0-539-g8589ead45b-fm-20210721.001-g8589ead4
Mime-Version: 1.0
Message-Id: <8b258133-42d5-487c-b0ad-cdd044436a94@HIDDEN>
In-Reply-To: <jwvh7gn25er.fsf-monnier+emacs@HIDDEN>
References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@HIDDEN>
 <jwvh7gn25er.fsf-monnier+emacs@HIDDEN>
Date: Wed, 21 Jul 2021 16:05:53 +0200
From: =?UTF-8?Q?Jostein_Kj=C3=B8nigsen?= <jostein@HIDDEN>
To: "Stefan Monnier" <monnier@HIDDEN>,
 "Theodor Thornhill" <theo@HIDDEN>
Subject: Re: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode
Content-Type: multipart/alternative; boundary=40f0322d817f4c4692375f2b179d9c09
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 43559
Cc: Alan Mackenzie <acm@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
 =?UTF-8?Q?Jostein_Kj=C3=B8nigsen?= <jostein@HIDDEN>,
 43559 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Reply-To: jostein@HIDDEN
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

--40f0322d817f4c4692375f2b179d9c09
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable

On vacation without a laptop, but just chiming in that I=E2=80=99ve prev=
iously done the required FSF copyright assignment.=20

So any commits on my part should not lead to any additional paperwork.=20=


--
Vennlig hilsen
Jostein Kj=C3=B8nigsen

jostein@HIDDEN =F0=9F=8D=B5 jostein@HIDDEN
https://jostein.kj=C3=B8nigsen.no <https://jostein.xn--kjnigsen-64a.no/>=



On Wed, Jul 21, 2021, at 14:58, Stefan Monnier wrote:
> > > Great!  Including it in GNU ELPA would be cool.  Stefan?
>=20
> Fine by me.
>=20
> > Right now it lives in melpa, but there is no particular reason for i=
t
> > not to be in elpa/Emacs by default.
>=20
> Excellent.
>=20
> > There are some performance issues that are being addressed by Alan
> > with regards to multiline strings.
>=20
> That should have no bearing on inclusion into GNU ELPA.
>=20
> > The paperwork should be very easy, as I _think_ the only people with=

> > commits that needs paperwork is Jostein and me.
>=20
> Can you double check?
>=20
>=20
>         Stefan
>=20
>=20

--40f0322d817f4c4692375f2b179d9c09
Content-Type: text/html;charset=utf-8
Content-Transfer-Encoding: quoted-printable

<!DOCTYPE html><html><head><title></title><style type=3D"text/css">p.Mso=
Normal,p.MsoNoSpacing{margin:0}</style></head><body><div>On vacation wit=
hout a laptop, but just chiming in that I=E2=80=99ve previously done the=
 required FSF copyright assignment.&nbsp;<br></div><div><br></div><div>S=
o any commits on my part should not lead to any additional paperwork.&nb=
sp;</div><div><br></div><div id=3D"sig19302177"><div class=3D"signature"=
>--<br></div><div id=3D"sig19302177" class=3D"signature"><div class=3D"s=
ignature">Vennlig hilsen<br></div></div><div class=3D"signature">Jostein=
 Kj=C3=B8nigsen<br></div><div class=3D"signature"><br></div><div class=3D=
"signature"><a href=3D"mailto:jostein@HIDDEN">jostein@HIDDEN=
et</a> =F0=9F=8D=B5 <a href=3D"mailto:jostein@HIDDEN">jostein@HIDDEN=
om</a><br></div><div class=3D"signature"><a href=3D"https://jostein.kj=C3=
=B8nigsen.no">https://jostein.kj=C3=B8nigsen.no</a><br></div></div><div>=
<br></div><div><br></div><div>On Wed, Jul 21, 2021, at 14:58, Stefan Mon=
nier wrote:<br></div><blockquote type=3D"cite" id=3D"qt" style=3D""><div=
>&gt; &gt; Great!&nbsp; Including it in GNU ELPA would be cool.&nbsp; St=
efan?<br></div><div><br></div><div>Fine by me.<br></div><div><br></div><=
div>&gt; Right now it lives in melpa, but there is no particular reason =
for it<br></div><div>&gt; not to be in elpa/Emacs by default.<br></div><=
div><br></div><div>Excellent.<br></div><div><br></div><div>&gt; There ar=
e some performance issues that are being addressed by Alan<br></div><div=
>&gt; with regards to multiline strings.<br></div><div><br></div><div>Th=
at should have no bearing on inclusion into GNU ELPA.<br></div><div><br>=
</div><div>&gt; The paperwork should be very easy, as I _think_ the only=
 people with<br></div><div>&gt; commits that needs paperwork is Jostein =
and me.<br></div><div><br></div><div>Can you double check?<br></div><div=
><br></div><div><br></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
; Stefan<br></div><div><br></div><div><br></div></blockquote><div><br></=
div></body></html>
--40f0322d817f4c4692375f2b179d9c09--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 13:18:09 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 21 09:18:09 2021
Received: from localhost ([127.0.0.1]:36494 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1m6C6z-0000G6-Gj
	for submit <at> debbugs.gnu.org; Wed, 21 Jul 2021 09:18:09 -0400
Received: from out0.migadu.com ([94.23.1.103]:31802)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1m6C6v-0000Fp-F8
 for 43559 <at> debbugs.gnu.org; Wed, 21 Jul 2021 09:18:08 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1626873484;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=wZt74hJkQSSqffFxyTzTEAO+8gSC3O75kshCdqFctP4=;
 b=OqtFXvK/jpT9XVuW1ugeEHqN8Sx1wNRzWgYuqeOEAbaH3YomnF4iqeb1YMQA8O4xGYcwFf
 M0MbE7tZDLNXpma0oyxJ7wlSTeNzJQx9CSPto3htmdx9v+gzDbUnyJcNR8U7CGkH6mDPXQ
 s/UqqJbY+N0KUp1HlpkhzfHEJ47tkY/IP/eCFbs3BB7oKEB1ch3LV5YPw+YL3NtCvezAW9
 mvIsI5HuhAZrsk1GYpRVjPwwAP5/C8are+/SmXcXeLfymdTSFOU1hCDnFJULpB+8QUQKj4
 YUuhpf3ESnyihvtbej9zKP50i7TsIBdAluklWYLDSvwnFMHPQhk0nLd3IZt5Sg==
From: Theodor Thornhill <theo@HIDDEN>
To: Stefan Monnier <monnier@HIDDEN>
Subject: Re: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode
In-Reply-To: <jwvh7gn25er.fsf-monnier+emacs@HIDDEN>
References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@HIDDEN>
 <jwvh7gn25er.fsf-monnier+emacs@HIDDEN>
Date: Wed, 21 Jul 2021 15:18:02 +0200
Message-ID: <m1im134xh1.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Migadu-Flow: FLOW_OUT
X-Migadu-Auth-User: theo@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 43559
Cc: Alan Mackenzie <acm@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
 jostein@HIDDEN, 43559 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.7 (-)

Stefan Monnier <monnier@HIDDEN> writes:

>> > Great!  Including it in GNU ELPA would be cool.  Stefan?
>
> Fine by me.
>

Cool!

>> There are some performance issues that are being addressed by Alan
>> with regards to multiline strings.
>
> That should have no bearing on inclusion into GNU ELPA.

No, I assume it should be even easier to change csharp-mode when those
fixes arrive.

>
>> The paperwork should be very easy, as I _think_ the only people with
>> commits that needs paperwork is Jostein and me.
>
> Can you double check?
>

I'm not completely sure how I'd double check that for there to be no
issues at all legally.  When I did the rewrite I did it without looking
at the already existing code, since I wanted the option to include it in
emacs at some point.  If you look at
https://github.com/emacs-csharp/csharp-mode/blame/master/csharp-mode.el
you'll find that most commits are from me, except the header comments,
which I took from the existing code. Most of the other commits that are
referenced in that blame is either whitespace that didn't change when
the new version was merged as well as some one line bug patches that
came after the new version arrived.  I assume they are ok to add to
elpa, given their size?

Other commits are ci related and an indentation fix.  How do I verify
this?

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 12:58:37 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 21 08:58:37 2021
Received: from localhost ([127.0.0.1]:36466 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1m6Bo4-0008Cr-Ts
	for submit <at> debbugs.gnu.org; Wed, 21 Jul 2021 08:58:37 -0400
Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:4728)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <monnier@HIDDEN>) id 1m6Bo3-0008Cd-93
 for 43559 <at> debbugs.gnu.org; Wed, 21 Jul 2021 08:58:35 -0400
Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id B2792100221;
 Wed, 21 Jul 2021 08:58:29 -0400 (EDT)
Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1])
 by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 569341000F8;
 Wed, 21 Jul 2021 08:58:24 -0400 (EDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca;
 s=mail; t=1626872304;
 bh=eYUQByRo0PQSSqRZsmZNuz76Z8gVg0CVXrfBVMswKyU=;
 h=From:To:Cc:Subject:References:Date:In-Reply-To:From;
 b=GvmR8YoVMxL2sX9qSofyVWhcnRLshgX5FlsAnIUdiSpoC7Hn1o4WFALQp8CMe5qb6
 yVNFpffp4vZUn1eNX92EO09K8lWpWTx59tfTxBJYcpD0gn2tWs+NhHWUU1x5fll/I1
 LLORN4cEfvCGVxhHC8DURRDFgyTsk4lbn2mo1h8Ez6rXAZqmD9vK/KDhjbSzac9vgb
 Lrl1IxDjYmvtcxH4vKHwkNN44rh/VU8q8CJmo4/0xyGUNi7YO5gtNgr7i3V0/Ucow0
 VyLtYVYD6F8oknuIKeVKirOlWKFLONYOhgrEVR40MWjWXxiPowgj7jOX0leKU3QEoQ
 U3S86q2qWScpQ==
Received: from alfajor (unknown [216.154.29.138])
 by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 17D25120533;
 Wed, 21 Jul 2021 08:58:24 -0400 (EDT)
From: Stefan Monnier <monnier@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode
Message-ID: <jwvh7gn25er.fsf-monnier+emacs@HIDDEN>
References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@HIDDEN>
Date: Wed, 21 Jul 2021 08:58:23 -0400
In-Reply-To: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@HIDDEN> (Theodor
 Thornhill's message of "Wed, 21 Jul 2021 14:36:41 +0200")
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
X-SPAM-INFO: Spam detection results:  0
 ALL_TRUSTED                -1 Passed through trusted hosts only via SMTP
 AWL -0.096 Adjusted score from AWL reputation of From: address
 BAYES_00                 -1.9 Bayes spam probability is 0 to 1%
 DKIM_SIGNED               0.1 Message has a DKIM or DK signature,
 not necessarily valid
 DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature
 DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's
 domain
X-SPAM-LEVEL: 
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 43559
Cc: Alan Mackenzie <acm@HIDDEN>, Lars Ingebrigtsen <larsi@HIDDEN>,
 jostein@HIDDEN, 43559 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

> > Great!  Including it in GNU ELPA would be cool.  Stefan?

Fine by me.

> Right now it lives in melpa, but there is no particular reason for it
> not to be in elpa/Emacs by default.

Excellent.

> There are some performance issues that are being addressed by Alan
> with regards to multiline strings.

That should have no bearing on inclusion into GNU ELPA.

> The paperwork should be very easy, as I _think_ the only people with
> commits that needs paperwork is Jostein and me.

Can you double check?


        Stefan





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 12:37:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 21 08:37:07 2021
Received: from localhost ([127.0.0.1]:36397 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1m6BT2-0007Xr-NS
	for submit <at> debbugs.gnu.org; Wed, 21 Jul 2021 08:37:07 -0400
Received: from out0.migadu.com ([94.23.1.103]:21662)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1m6BSx-0007Xc-58
 for 43559 <at> debbugs.gnu.org; Wed, 21 Jul 2021 08:36:51 -0400
Date: Wed, 21 Jul 2021 14:36:41 +0200
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1626871005;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:  in-reply-to:in-reply-to; 
 bh=NCC5hQMQPv70r+tH55z1Y5hXfqAsFhCuL9kS1CuyGo8=;
 b=nZ0JQweCAxMAddQ84SuuIU3z+waF5z0BNCkhhkz92j+74RhbGBHiaJxrrAV9vnM63MEJdf
 nMK/jLWVM5wUz4BxMkJZujSA4CAQd+ePCMrPxU+7xPn5ukdaN3ASzUFxU+3WcwSG7+BI0/
 BVf3deMTPsI74KLXo9Mf6xZD67+TtGdIXuOt5sDkuhf/vOcpBMd5EAvH5F6MJtrBAn1a07
 HWlFg24dFzjP8snLcg/P2weqz28eyizKqxoCVTVm8HC2tDz1tlHATOeIsQQRQgG4aAcbBP
 hyBKeJIfwUsoT0ZhXQHWiVEc+YMlIYc3qqSGxFP+CijVGSIuBD/Qb3EdBZljnQ==
Subject: Re: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode
Message-ID: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@HIDDEN>
X-Android-Message-ID: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@HIDDEN>
In-Reply-To: <87czrbkgfb.fsf@HIDDEN>
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
From: Theodor Thornhill <theo@HIDDEN>
To: Lars Ingebrigtsen <larsi@HIDDEN>
Importance: Normal
X-Priority: 3
X-MSMail-Priority: Normal
MIME-Version: 1.0
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: base64
X-Migadu-Flow: FLOW_OUT
X-Migadu-Auth-User: theo@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 43559
Cc: Alan Mackenzie <acm@HIDDEN>, jostein@HIDDEN,
 Stefan Monnier <monnier@HIDDEN>, 43559 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -0.3 (/)

PGRpdiBkaXI9J2F1dG8nPjxkaXY+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRp
diBjbGFzcz0iZ21haWxfcXVvdGUiPk9uIDIxIEp1bCAyMDIxIDE0OjE5LCBMYXJzIEluZ2Vicmln
dHNlbiAmbHQ7bGFyc2lAZ251cy5vcmcmZ3Q7IHdyb3RlOjxiciB0eXBlPSJhdHRyaWJ1dGlvbiI+
PGJsb2NrcXVvdGUgY2xhc3M9InF1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVy
LWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PHAgZGlyPSJsdHIiPlRoZW9k
b3IgVGhvcm5oaWxsICZsdDt0aGVvQHRob3JuaGlsbC5ubyZndDsgd3JpdGVzOgo8YnI+Cgo8YnI+
CiZndDsmZ3Q7IEkgZG9uJ3Qgc2VlIGEgcmVhc29uIHdoeSB0aGVyZSBzaG91bGRuJ3QgYmUgYSBD
IyBNb2RlIGRpcmVjdGx5IGluIEVtYWNzLgo8YnI+CiZndDsKPGJyPgomZ3Q7IFRoZSBjdXJyZW50
IGNzaGFycCBtb2RlIGlzIG5vdyByZXdyaXR0ZW4sCjxicj4KCjxicj4KR3JlYXQhJm5ic3A7IElu
Y2x1ZGluZyBpdCBpbiBHTlUgRUxQQSB3b3VsZCBiZSBjb29sLiZuYnNwOyBTdGVmYW4/Cjxicj4K
CjwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBkaXI9ImF1dG8iPjxicj48
L2Rpdj48ZGl2IGRpcj0iYXV0byI+UmlnaHQgbm93IGl0IGxpdmVzIGluIG1lbHBhLCBidXQgdGhl
cmUgaXMgbm8gcGFydGljdWxhciByZWFzb24gZm9yIGl0IG5vdCB0byBiZSBpbiBlbHBhL0VtYWNz
IGJ5IGRlZmF1bHQuIFRoZXJlIGFyZSBzb21lIHBlcmZvcm1hbmNlIGlzc3VlcyB0aGF0IGFyZSBi
ZWluZyBhZGRyZXNzZWQgYnkgQWxhbiB3aXRoIHJlZ2FyZHMgdG8gbXVsdGlsaW5lIHN0cmluZ3Mu
IFRoZSBwYXBlcndvcmsgc2hvdWxkIGJlIHZlcnkgZWFzeSwgYXMgSSBfdGhpbmtfIHRoZSBvbmx5
IHBlb3BsZSB3aXRoIGNvbW1pdHMgdGhhdCBuZWVkcyBwYXBlcndvcmsgaXMgSm9zdGVpbiBhbmQg
bWUuIEFzIGZvciB0aGUgcGFja2FnZSBvdmVyIGF0Jm5ic3A7aHR0cHM6Ly9naXRodWIuY29tL2Vt
YWNzLWNzaGFycC9jc2hhcnAtbW9kZSwgcGVyc29uYWxseSBJIHRoaW5rIGl0IGNvdWxkIGJlIGFu
IGlkZWEgdG8gc3BsaXQgaXQsIHNpbmNlIGl0IGN1cnJlbnRseSBoYXMgdHdvIGltcGxlbWVudGF0
aW9ucywgb25lIGZvciBjYyBtb2RlIGFuZCBvbmUgZm9yIHRyZWUtc2l0dGVyLiZuYnNwOzwvZGl2
PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBkaXI9ImF1dG8iPkknbSBub3QgY2VydGFp
biB3aGF0J3MgdGhlIGJlc3Qgd2F5IHRvIGRlYWwgd2l0aCBzcGxpdHRpbmcgdGhlIHBhY2thZ2Uu
IFRoZXJlIHNlZW1zIHRvIGJlIHNvbWUgbW9tZW50dW0gdG8gdHJlZSBzaXR0ZXIgaW4gdGhpcyBt
b2RlLiZuYnNwOzwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBkaXI9ImF1dG8i
PklmIHRoZSBjYyB2ZXJzaW9uIGlzIHJpcHBlZCBvdXQsIGhvdyB3b3VsZCB0aGF0IGFmZmVjdCBi
YWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIG9sZGVyIEVtYWNzIHZlcnNpb25zPzwvZGl2Pjxk
aXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBkaXI9ImF1dG8iPkFsc28sIEkgdGhpbmsgaXQg
c2hvdWxkIGJlIGl0cyBvd24gbW9kZSB0aGF0IGRlcml2ZXMgZnJvbSBjYyBtb2RlLCBhbmQgd291
bGRuJ3QgbmVlZCB0byBsaXZlIGJlc2lkZSB0aGUgb3RoZXIgbW9kZXMgaW5zaWRlIGNjIG1vZGUg
aXRzZWxmLiZuYnNwOzwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBkaXI9ImF1
dG8iPkkgd291bGQgbG92ZSBmb3IgSm9zdGVpbiB0byBhZGQgaGlzIHRha2Ugb24gdGhpcy4gVGhp
cyBiZWNhdXNlIGhlIGhhcyBsaXZlZCBhcyB0aGUgbWFpbiBtYWludGFpbmVyIG9mIGl0IGZvciBm
YXIgbG9uZ2VyIHRoYW4gbWUuPC9kaXY+PGRpdiBkaXI9ImF1dG8iPjxicj48L2Rpdj48ZGl2IGRp
cj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgZGlyPSJhdXRvIj48YnI+PC9kaXY+PGRpdiBkaXI9ImF1
dG8iPjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGJs
b2NrcXVvdGUgY2xhc3M9InF1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxl
ZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PHAgZGlyPSJsdHIiPgomZ3Q7IEhv
d2V2ZXIsIFRoZSBsYW1iZGEgY2FzZSBpcyBub3cgZml4ZWQsIGJ1dCB3aXRoIGEgcGF0Y2ggdG8g
ZW1hY3MKPGJyPgomZ3Q7IGl0c2VsZjoKPGJyPgomZ3Q7Cjxicj4KJmd0OyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQo8YnI+CiZndDsgZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL2NjLWVuZ2lu
ZS5lbCBiL2xpc3AvcHJvZ21vZGVzL2NjLWVuZ2luZS5lbAo8YnI+CiZndDsgaW5kZXggNGUzMzZj
MGEwNi4uYjQxNWU0YjgyMSAxMDA2NDQKPGJyPgomZ3Q7IC0tLSBhL2xpc3AvcHJvZ21vZGVzL2Nj
LWVuZ2luZS5lbAo8YnI+CiZndDsgKysrIGIvbGlzcC9wcm9nbW9kZXMvY2MtZW5naW5lLmVsCjxi
cj4KCjxicj4KQWxhbiwgd291bGQgaXQgYmUgT0sgdG8gaW5jbHVkZSB0aGF0IHNtYWxsIGNoYW5n
ZSBpbiBjYy1lbmdpbmU/Cjxicj4KCjwvcD48L2Jsb2NrcXVvdGU+PC9kaXY+PC9kaXY+PC9kaXY+
PGRpdiBkaXI9ImF1dG8iPklmIEkgcmVtZW1iZXIgY29ycmVjdGx5LCB0aGlzIGNoYW5nZSBpcyBz
dGlsbCBuZWVkZWQuIElmIHdlIHdhbnQgdG8gbW92ZSBmdXJ0aGVyIHdpdGggdGhpcywgdGhlbiBJ
IGNhbiB0YWtlIGEgZ29vZCBsb29rIGF0IHRoZSBwYXRjaGVzIEkndmUgYWRkZWQgaW4gY3NoYXJw
LW1vZGUsIGFuZCBob3BlZnVsbHkgd2UgY2FuIGF2b2lkIGhhdmluZyB0aGVtIGF0IGFsbC48L2Rp
dj48ZGl2IGRpcj0iYXV0byI+PGJyPjwvZGl2PjxkaXYgZGlyPSJhdXRvIj5UaGVvJm5ic3A7PC9k
aXY+PC9kaXY+





Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.
Removed tag(s) patch. Request was from Lars Ingebrigtsen <larsi@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 12:19:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Jul 21 08:19:49 2021
Received: from localhost ([127.0.0.1]:36371 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1m6BCX-0004nR-LO
	for submit <at> debbugs.gnu.org; Wed, 21 Jul 2021 08:19:49 -0400
Received: from quimby.gnus.org ([95.216.78.240]:42052)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <larsi@HIDDEN>) id 1m6BCW-0004nB-5W
 for 43559 <at> debbugs.gnu.org; Wed, 21 Jul 2021 08:19:48 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org;
 s=20200322; h=Content-Type:MIME-Version:Message-ID:In-Reply-To:Date:
 References:Subject:Cc:To:From:Sender:Reply-To:Content-Transfer-Encoding:
 Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender:
 Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:
 List-Subscribe:List-Post:List-Owner:List-Archive;
 bh=nhKWmTNIRbLbNH75g0QtJ3HwSpbA7rt4q4H2fHH9y/Y=; b=ILUDwNHWbADd4FsVEZRxts9d3l
 5FPyLqp9cNtuQ+dbK5zDGNqGUct/uUVUB8/uo/9LjaUaTgVqfGJTetnpaUIJxhvOB7l/7dkdQDVir
 tAxtSJ5rhdVA/8Yx2TkSpGXyJQDTkI/TNqgKLu/JDCVtGgdQfyq4X35baLJtVYLtOAJY=;
Received: from cm-84.212.220.105.getinternet.no ([84.212.220.105] helo=elva)
 by quimby.gnus.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.92) (envelope-from <larsi@HIDDEN>)
 id 1m6BCL-0006QP-2D; Wed, 21 Jul 2021 14:19:39 +0200
From: Lars Ingebrigtsen <larsi@HIDDEN>
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode
References: <87zh5iyu4d.fsf@HIDDEN> <20200923101150.GB6178@ACM>
 <87ft714r33.fsf@HIDDEN>
X-Now-Playing: David Byrne's _3 Big Songs_: "Big Business (Dance Mix)"
Date: Wed, 21 Jul 2021 14:19:36 +0200
In-Reply-To: <87ft714r33.fsf@HIDDEN> (Theodor Thornhill's message of
 "Mon, 28 Sep 2020 21:52:00 +0200")
Message-ID: <87czrbkgfb.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/28.0.50 (gnu/linux)
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Report: Spam detection software, running on the system "quimby.gnus.org",
 has NOT identified this incoming email as spam.  The original
 message has been attached to this so you can view it or label
 similar future email.  If you have any questions, see
 @@CONTACT_ADDRESS@@ for details.
 Content preview: Theodor Thornhill <theo@HIDDEN> writes: >> I don't see
 a reason why there shouldn't be a C# Mode directly in Emacs. > > The current
 csharp mode is now rewritten, Great! Including it in GNU ELPA would be cool.
 Stefan? Content analysis details:   (-2.9 points, 5.0 required)
 pts rule name              description
 ---- ---------------------- --------------------------------------------------
 -1.0 ALL_TRUSTED            Passed through trusted hosts only via SMTP
 -1.9 BAYES_00               BODY: Bayes spam probability is 0 to 1%
 [score: 0.0000]
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 43559
Cc: Alan Mackenzie <acm@HIDDEN>, jostein@HIDDEN,
 Stefan Monnier <monnier@HIDDEN>, 43559 <at> debbugs.gnu.org
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -3.3 (---)

Theodor Thornhill <theo@HIDDEN> writes:

>> I don't see a reason why there shouldn't be a C# Mode directly in Emacs.
>
> The current csharp mode is now rewritten,

Great!  Including it in GNU ELPA would be cool.  Stefan?

> However, The lambda case is now fixed, but with a patch to emacs
> itself:
>
> --------------------------------------------------------------------------------
> diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
> index 4e336c0a06..b415e4b821 100644
> --- a/lisp/progmodes/cc-engine.el
> +++ b/lisp/progmodes/cc-engine.el

Alan, would it be OK to include that small change in cc-engine?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 28 Sep 2020 19:53:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Mon Sep 28 15:53:02 2020
Received: from localhost ([127.0.0.1]:54063 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kMzCo-0002pQ-Ai
	for submit <at> debbugs.gnu.org; Mon, 28 Sep 2020 15:53:02 -0400
Received: from out1.migadu.com ([91.121.223.63]:12736)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1kMzCl-0002ow-0M
 for 43559 <at> debbugs.gnu.org; Mon, 28 Sep 2020 15:53:01 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1601322777;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=Ftugfl6e8+cXsWSTmKFLxLQC4nnSq2UjhZQKjxabtxY=;
 b=X5fTc1wMl4ayqVJeBoBJcEtTBZIHELy9xe5NvmGw54ywo6CKvRg4bPYMZaws9P95K8xM9K
 DFyuFtwto40t+TPWS187TZ7iU/thiFFPDv7efFzludfZiOhKQHX4nV4POHafgoymFRj05f
 bzCpjBLeyOq0fGWIrqYNKRok0CKJCXrZ4kndf64yQWqsAvWRPai7Wn8WOCSKl3NeOcWhMO
 9YSki06hIQs9Y6oLfUFqoIRgntHxEeIt5mUMB4mr3Du/bZwrmMQi14NpbuKj3/f8SOeEve
 ZmC2t8V5tHEyyVIrCSqSkM6BMoUUydg608P4iYYC5inHyGb2WXj2wp9/7pB8IA==
From: Theodor Thornhill <theo@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
In-Reply-To: <20200923101150.GB6178@ACM>
References: <87zh5iyu4d.fsf@HIDDEN> <20200923101150.GB6178@ACM>
Date: Mon, 28 Sep 2020 21:52:00 +0200
Message-ID: <87ft714r33.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -0.10
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 43559
Cc: 43559 <at> debbugs.gnu.org, jostein@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Alan!

Alan Mackenzie <acm@HIDDEN> writes:

[...]

>
> I don't see a reason why there shouldn't be a C# Mode directly in Emacs.
>

The current csharp mode is now rewritten, and I've gotten almost
everything to work nicely apart from one issue, and I was hoping that
you could help me figure it out, or point me in the right direction.

I described it here:
https://lists.gnu.org/archive/html/emacs-devel/2020-09/msg01975.html

However, The lambda case is now fixed, but with a patch to emacs
itself:

--------------------------------------------------------------------------------
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 4e336c0a06..b415e4b821 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -12011,7 +12011,8 @@ c-looking-at-inexpr-block
 			 (> (point) closest-lim))
 		  (not (bobp))
 		  (progn (backward-char)
-			 (looking-at "[]).]\\|\\w\\|\\s_"))
+			 (or (looking-at "[\]\).]\\|\w\\|\\s_")
+                             (looking-at ">")))
 		  (c-safe (forward-char)
 			  (goto-char (scan-sexps (point) -1))))
 
@@ -12085,7 +12086,11 @@ c-looking-at-inexpr-block
 			  (setq passed-bracket-pairs 1)
 			  (setq bracket-pos (point))))
 		      'maybe)
-		  'maybe))))
+		  'maybe)
+		(if (or (looking-at "([[:alnum:][:space:]_,]*)[ \t\n]*=>[ \t\n]*{")
+			(looking-at "[[:alnum:]_]+[ \t\n]*=>[ \t\n]*{"))
+		    ;; If we are at a C# lambda header
+		    (cons 'inexpr (point))))))
 
       (if (eq res 'maybe)
 	  (cond
--------------------------------------------------------------------------------

This patch lets CC Mode detect the lambda case for C#. I know this is a
patch specific to C#, but I could not find anywhere or anyhow this would
work without these lines.  With them, the indentation in case 1 in the
mentioned link works perfectly.

Maybe this (or something similar) could be eligible for inclusion in CC
Mode, to account for that lambda syntax. I know many other C-like
languages uses similar syntax, so I believe it could be useful for
someone else as well.

Have a nice evening!

--
Theodor Thornhill




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 23 Sep 2020 18:38:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 23 14:38:28 2020
Received: from localhost ([127.0.0.1]:37836 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kL9eu-0006Gm-86
	for submit <at> debbugs.gnu.org; Wed, 23 Sep 2020 14:38:28 -0400
Received: from out0.migadu.com ([94.23.1.103]:61826)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1kL9ep-0006GU-GQ
 for 43559 <at> debbugs.gnu.org; Wed, 23 Sep 2020 14:38:26 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1600886301;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=b5GJ15hYEzwnzoluGHN5m+Ut3IYPvtEKYb6sh5xdGnI=;
 b=Uzej1GoRi7sROIcgzRzfPifcP6TKWxLrn4X5Rfei34RpkfhJKwEod4GXMzEVK+Vnvj9+wx
 OrJcchr43vQVVGC4vVH6AOjdy1g4KB/87SiTmNSNy0tKUG8BPvSiEr64UMJ9H8aD726/2v
 nDNUSjOgQzY81aBVSlX/t1HVexFXiGzSDLN+AGuhxEvqLMyPCWUsTyxzhan2D6jzxgoGHq
 E+VVqz3xHS7c0J/9ZP/Mhz0UqyqAuBgcWrsuBpbx9jVxZu/xekne3ynA7FRawDTtiZCIl2
 +VweD54Ms0cttdgV5xjeHSV9vSobGH17ssDHCzD35SxaF/unnkBUVnSRW3TS8A==
From: Theodor Thornhill <theo@HIDDEN>
To: Alan Mackenzie <acm@HIDDEN>
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
In-Reply-To: <20200923101150.GB6178@ACM>
References: <87zh5iyu4d.fsf@HIDDEN> <20200923101150.GB6178@ACM>
Date: Wed, 23 Sep 2020 20:38:22 +0200
Message-ID: <87o8lw49up.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain
X-Spam-Score: -0.10
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 43559
Cc: 43559 <at> debbugs.gnu.org, jostein@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Alan Mackenzie <acm@HIDDEN> writes:

> Hello, Theodor.
>

Hello, and thanks for responding!

> On Tue, Sep 22, 2020 at 12:37:54 +0200, Theodor Thornhill wrote:
>
>
>> Hello!
>
>> For some time, I've been a little dissatisfied with the support for C#
>> in emacs.  Recently, there has been some breakage in handling of strings
>> and fontification, more precisely:
>
>>   - https://github.com/josteink/csharp-mode/issues/128
>
> The current C# mode uses syntax-propertize-function.  This clashes
> nastily with CC Mode's use of the syntax-table text property.  When
> syntax-propertize-function is non-nil, Emacs arbitrarily wipes all
> syntax-table properties from a region then relies on s-p-f to reapply
> all the necessary s-t properties.  However the current C# s-p-f only
> applies a restricted subset of the necessary properties.  This will
> produce random bugs.

Thanks for this information.  It will help me investigate further.

>
> The documentation for syntax-propertize-function didn't used to mention
> this problem, but it does now.  (As from Emacs 27.2).
>
> The method used in CC Mode to apply and remove these properties is to
> add functions, effectively before- or after-change-functions, to either
> or both of c-get-state-before-change-functions and
> c-before-font-lock-functions.
>

[...]

>> While working on this, I realized the easiest way to get something good
>> here is to overall reduce the complexity.  As such I created this patch.
>
> CC Mode places a high priority on correctness, hence much of its
> complexity.  That priority needn't necessarily be carried over to
> derived modes.  ;-)
>
Hehe, yeah - it is my hope to leverage more what is already there.

>> It seems to work nicely, removing the need for the external mode
>> completely.
>
> You're proposing integrating a new C# Mode directly into CC Mode.  This
> goes against CC Mode policy, both because it would swell the already
> massive code base, and it would increases the danger of "orphan"
> submodes.  We already have IDL Mode and Pike Mode which have remained
> entirely and almost entirely unchanged in the last 15 years.  The people
> who created them are no longer around.

I see your point here.  I guess I wrongly assumed this should be the
main way to include new cc-mode based modes.

>
> Also, there is no advantage for an integrated mode over a derived mode
> separate from CC Mode.  (If there is, that is a bug in CC Mode.  ;-)
> There is a slight effort in using c-add-language, that is all.
>

That is good to hear.  I guess I'll try to reimplement this patch using
this api, rather than convince you to pollute CC Mode.

>> However, I see that including csharp here is most likely a bigger effort
>> than just sending this patch, but I wanted to send what I have, and
>> hopefully get some pointers.  Or in worst case stop before I go too
>> far..
>
> I don't see a reason why there shouldn't be a C# Mode directly in Emacs.
>
Good. I'll start working on csharp-mode.el, rather than integrating
things.

>> This patch is written without consulting the current mode, so paperwork
>> should not be an issue.
>
>> In addition, the current mode has an implementation of imenu rewritten
>> from scratch by Jostein, and as such I think this can be included as
>> well.
>
>> I tried not to do too much, since I believe most of the advanced
>> functionality should be provided by an lsp mode such as eglot or lsp-mode.
>
> That is a completely different topic.  The amount of work needed to use
> one of these is massive.  For what it's worth, somebody familiar with
> LSPs opined that they weren't yet sufficiently mature to support
> something like CC Mode, but this was some while ago (between 1 and 2
> years ago).

Yeah, I wasn't really suggesting to integrate CC Mode with eglot.  I was
merely commenting on reducing the scope of this potential mode.

Thanks for taking your time so far.  I think I'll for the time being
leave this bug, take it back to github, and create a standalone mode. 

(@Jostein - I'll respond to your comments on GitHub)

Have a nice day/evening,

--
Theodor Thornhill




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at 43559 <at> debbugs.gnu.org:


Received: (at 43559) by debbugs.gnu.org; 23 Sep 2020 10:12:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 23 06:12:01 2020
Received: from localhost ([127.0.0.1]:34605 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kL1kn-0002aA-J1
	for submit <at> debbugs.gnu.org; Wed, 23 Sep 2020 06:12:01 -0400
Received: from colin.muc.de ([193.149.48.1]:11674 helo=mail.muc.de)
 by debbugs.gnu.org with smtp (Exim 4.84_2)
 (envelope-from <acm@HIDDEN>) id 1kL1kk-0002Zh-H6
 for 43559 <at> debbugs.gnu.org; Wed, 23 Sep 2020 06:12:00 -0400
Received: (qmail 77029 invoked by uid 3782); 23 Sep 2020 10:11:51 -0000
Received: from acm.muc.de (p4fe156c4.dip0.t-ipconnect.de [79.225.86.196]) by
 localhost.muc.de (tmda-ofmipd) with ESMTP;
 Wed, 23 Sep 2020 12:11:51 +0200
Received: (qmail 6535 invoked by uid 1000); 23 Sep 2020 10:11:50 -0000
Date: Wed, 23 Sep 2020 10:11:50 +0000
To: Theodor Thornhill <theo@HIDDEN>
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
Message-ID: <20200923101150.GB6178@ACM>
References: <87zh5iyu4d.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
In-Reply-To: <87zh5iyu4d.fsf@HIDDEN>
X-Delivery-Agent: TMDA/1.1.12 (Macallan)
From: Alan Mackenzie <acm@HIDDEN>
X-Primary-Address: acm@HIDDEN
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 43559
Cc: 43559 <at> debbugs.gnu.org, jostein@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -1.0 (-)

Hello, Theodor.

On Tue, Sep 22, 2020 at 12:37:54 +0200, Theodor Thornhill wrote:


> Hello!

> For some time, I've been a little dissatisfied with the support for C#
> in emacs.  Recently, there has been some breakage in handling of strings
> and fontification, more precisely:

>   - https://github.com/josteink/csharp-mode/issues/128

The current C# mode uses syntax-propertize-function.  This clashes
nastily with CC Mode's use of the syntax-table text property.  When
syntax-propertize-function is non-nil, Emacs arbitrarily wipes all
syntax-table properties from a region then relies on s-p-f to reapply
all the necessary s-t properties.  However the current C# s-p-f only
applies a restricted subset of the necessary properties.  This will
produce random bugs.

The documentation for syntax-propertize-function didn't used to mention
this problem, but it does now.  (As from Emacs 27.2).

The method used in CC Mode to apply and remove these properties is to
add functions, effectively before- or after-change-functions, to either
or both of c-get-state-before-change-functions and
c-before-font-lock-functions.

> Also, it is using a lot of internal c-mode functions:
>   - https://github.com/josteink/csharp-mode/issues/153

> I've had some discussions with with the current maintainer, Jostein
> Kjűnigsen (cc'd) about the future of this mode in
> https://github.com/josteink/csharp-mode/issues/162.

> Some points of note:
>   - It cannot easily be donated to emacs due to paperwork
>   - Jostein does not have time to do it himself
>   - I took upon myself to rewrite it in a separate branch, as an end
>   goal for it to be included in emacs

> While working on this, I realized the easiest way to get something good
> here is to overall reduce the complexity.  As such I created this patch.

CC Mode places a high priority on correctness, hence much of its
complexity.  That priority needn't necessarily be carried over to
derived modes.  ;-)

> It seems to work nicely, removing the need for the external mode
> completely.

You're proposing integrating a new C# Mode directly into CC Mode.  This
goes against CC Mode policy, both because it would swell the already
massive code base, and it would increases the danger of "orphan"
submodes.  We already have IDL Mode and Pike Mode which have remained
entirely and almost entirely unchanged in the last 15 years.  The people
who created them are no longer around.

Also, there is no advantage for an integrated mode over a derived mode
separate from CC Mode.  (If there is, that is a bug in CC Mode.  ;-)
There is a slight effort in using c-add-language, that is all.

> However, I see that including csharp here is most likely a bigger effort
> than just sending this patch, but I wanted to send what I have, and
> hopefully get some pointers.  Or in worst case stop before I go too
> far..

I don't see a reason why there shouldn't be a C# Mode directly in Emacs.

> This patch is written without consulting the current mode, so paperwork
> should not be an issue.

> In addition, the current mode has an implementation of imenu rewritten
> from scratch by Jostein, and as such I think this can be included as
> well.

> I tried not to do too much, since I believe most of the advanced
> functionality should be provided by an lsp mode such as eglot or lsp-mode.

That is a completely different topic.  The amount of work needed to use
one of these is massive.  For what it's worth, somebody familiar with
LSPs opined that they weren't yet sufficiently mature to support
something like CC Mode, but this was some while ago (between 1 and 2
years ago).

> Have a nice day!
> Theodor Thornhill

[ Patch snipped, but briefly scanned. ]

-- 
Alan Mackenzie (Nuremberg, Germany).




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 23 Sep 2020 08:47:06 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed Sep 23 04:47:06 2020
Received: from localhost ([127.0.0.1]:34491 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kL0Qb-000814-Nx
	for submit <at> debbugs.gnu.org; Wed, 23 Sep 2020 04:47:06 -0400
Received: from lists.gnu.org ([209.51.188.17]:49778)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <jostein@HIDDEN>) id 1kL0QZ-00080v-D4
 for submit <at> debbugs.gnu.org; Wed, 23 Sep 2020 04:47:05 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:47210)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jostein@HIDDEN>)
 id 1kL0QZ-0006LI-1d
 for bug-gnu-emacs@HIDDEN; Wed, 23 Sep 2020 04:47:03 -0400
Received: from wout5-smtp.messagingengine.com ([64.147.123.21]:35241)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jostein@HIDDEN>)
 id 1kL0QW-0007nW-2O
 for bug-gnu-emacs@HIDDEN; Wed, 23 Sep 2020 04:47:02 -0400
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailout.west.internal (Postfix) with ESMTP id E373B9C2;
 Wed, 23 Sep 2020 04:46:57 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute2.internal (MEProxy); Wed, 23 Sep 2020 04:46:58 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 secure.kjonigsen.net; h=subject:to:cc:references:from:message-id
 :date:mime-version:in-reply-to:content-type; s=fm1; bh=KhBQbCorI
 LfSTu85H4eo44H9LqT1YPQjiFLHafT524Q=; b=GYZCqoETnWST8oynbk+ppjL+I
 XqNy/xlwiNDCRFWayaDFnJ2RvnPVVjMSnNHMK9auT5QXczY7w/vdnQFP6H9J6VTQ
 7ROc5a27EgACUD6aRBNXcHqu5PxIqBRC47/fQYM6ACXtXtBRA0KBR1tMatUoIIn8
 6gdh3tiVdZanTq+V2635KKx620PBUuI4ZjmNWVn7V88YnxmxIFptBnxJPE9Wymii
 jLqPlrYdGGDeXhMPUsK7/Xr8sRmMzgEXvDTq/zdY12sQU5WW3I3BhxI16CN77ZlQ
 e2mJRfDOCP3YLLMw7PkvLNBC4Y1CXGy1EoDM3zstA6pswYbZBVRFD4pw4HOnQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:content-type:date:from:in-reply-to
 :message-id:mime-version:references:subject:to:x-me-proxy
 :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=KhBQbC
 orILfSTu85H4eo44H9LqT1YPQjiFLHafT524Q=; b=YwxmqfS89wdSG4TmC4EmEW
 RbsHuwfzxqUMZBg+cpUUsR+X5BGfGa7Ory7y6ORKfJ2niqyGpN2/yusFs+xa340m
 aoWyInzrYPBqkqO0TL/Ijfm141adyi64AOeyMAySmegUITczzhQ0S38HL7CDo0q6
 bHNSSpUDoP2jsic29IniOlQ/u7c9A1rfdTkG1gkgaA6aWMf66pgHChkIVNtGfGgC
 uGDQarEJxqfEVxFvQkuVnCy607ZCwcB0uUsHwceBgbjUagR9gVof3lbRsEIirKi7
 K3p4e9UgEpHAQ6KYfH4lGGLa0oixDgkdfcMd3/7pVw7gvqBv18nlZMw8cEYNU7Dw
 ==
X-ME-Sender: <xms:gQtrX2hQAGV3iYBnDUBcbZLx94z0ZjGb-24pgxxwVMvoht4V6coI_A>
 <xme:gQtrX3DINeFDNyvJmM2IqDk2OeqHe5B_C2imgbHWQieaehLmU740ibBeRXnEJ6z5-
 VyCGAFjtd5d7A02zA>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeigddtkecutefuodetggdotefrodftvf
 curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
 uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
 fjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomheplfhoshhtvghi
 nhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnihhgsh
 gvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepudfffeffveffffehveeivedvveduvdff
 ueegfeejlefggfefgfdvffetfefgheehnecuffhomhgrihhnpehnihhgshgvnhdrnhhone
 cukfhppeekgedrvdduuddrfedvrddufeejnecuvehluhhsthgvrhfuihiivgeptdenucfr
 rghrrghmpehmrghilhhfrhhomhepjhhoshhtvghinhesshgvtghurhgvrdhkjhhonhhigh
 hsvghnrdhnvght
X-ME-Proxy: <xmx:gQtrX-FPmxSBPbZtvskUeKILM-6Tq0_AKAItCHT-ZOSCUqlimSPg0A>
 <xmx:gQtrX_SUNFYPg5o4X4K0eO6CG9arioly5ryjVJIr7j4XLbeGxKFOBQ>
 <xmx:gQtrXzxoahe2P1zF1os-5vSqsstw474_axRPHxfccgQ-hLuY61ZkCA>
 <xmx:gQtrXxYodJGX77ZbRDxVUPXSPEZQ0UKUaMbfsvneZXd25SQsyaUyTg>
Received: from [192.168.1.132] (cm-84.211.32.137.getinternet.no
 [84.211.32.137])
 by mail.messagingengine.com (Postfix) with ESMTPA id 5BF85328005D;
 Wed, 23 Sep 2020 04:46:56 -0400 (EDT)
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
To: Theodor Thornhill <theo@HIDDEN>, bug-gnu-emacs@HIDDEN
References: <87zh5iyu4d.fsf@HIDDEN>
 <ab7fd8f4-77f3-dbb2-f1a3-d0ac71fc7b44@HIDDEN>
 <87wo0myn2l.fsf@HIDDEN>
 <8081dcbd-1e89-c9e6-d691-1270df8f9f19@HIDDEN>
 <87r1qt4ip3.fsf@HIDDEN>
From: =?UTF-8?Q?Jostein_Kj=c3=b8nigsen?= <jostein@HIDDEN>
Message-ID: <3b523279-b05b-427b-7aeb-0e970d787704@HIDDEN>
Date: Wed, 23 Sep 2020 10:46:54 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.12.0
MIME-Version: 1.0
In-Reply-To: <87r1qt4ip3.fsf@HIDDEN>
Content-Type: multipart/alternative;
 boundary="------------091FB645DEE82464D7A7865E"
Content-Language: en-GB
Received-SPF: pass client-ip=64.147.123.21;
 envelope-from=jostein@HIDDEN;
 helo=wout5-smtp.messagingengine.com
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/23 04:12:43
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x [generic] [fuzzy]
X-Spam_score_int: -26
X-Spam_score: -2.7
X-Spam_bar: --
X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, NICE_REPLY_A=-0.001,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.6 (-)
X-Debbugs-Envelope-To: submit
Cc: acm@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.6 (--)

This is a multi-part message in MIME format.
--------------091FB645DEE82464D7A7865E
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit


On 22.09.2020 23:15, Theodor Thornhill wrote:
>
> my most recent patch seems to deal with this (attributes) properly, as far
> as I can tell.  I've tested with your example code and also with random
> files in the roslyn repository.  Fontification is still sparse here.
Basic attribute-indentation is confirmed fixed on my end. Still no 
fontification, but I don't think that's critical.
>
>> *Second: Object initializers are not indented properly.*
> This one should be fixed in the attached patch.

It's better, but not quite there. For a simple 1-level nested 
object-initializer, the line containing the closing bracket is still 
incorrectly indented:

>
> I think the recursion case works as well.  I've made an attempt in the
> attached 'test.cs'
I can't reproduce this. Are you sure the attached patch contains all 
your changes?

Looking at your example, your sub-initializer is actually a /collection 
/initializer, which may explain why it seemingly worked on your end.


>
> This (lambdas) one should be fixed in the latest patch.
Confirmed fixed on my end.
>> *Fourth: variable-fontification*
>>
>> Here I have no absolute C# convention to quote for absolute correctness,
>> but it kinda "feels wrong" to me at places.
>> 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.
>>
> Agreed
>
>> 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:
> This case is fixed now.  It was due to the 'var' keyword was put in the
> wrong basket.

Confirmed fixed. This change alone makes things look much better.

In the process of testing this, I've also taken a look at some other 
keywords: const, string, bool, int, async and await.

 From what I can tell, they all look proper except for "await".

Looking in the patch, I see it's not mentioned there, so it should 
probably be a quick fix though?

Looking at faces more in depth, I also see annotated functions are not 
getting their function-names fontified.

I guess this goes back to the overall complexity of the attribute-store 
and core cc-mode support?
>
>> 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.
>>
> Yeah, this one is kind of hard, so I've been ignoring it for a little
> while.  The easiest thing should be to remove the highlighting, but not
> sure if that is the best move so far.

I agree this is hard. Even trying to come up with some simple pragmatic 
rules, I'm constantly left thinking about "what ifs"... So we can leave 
it for now.

As for your test-file, I see you've added a multi-line case with a 
ternary operator. That made me look into multi-line statements in 
general. It seems they are not getting indented as expected:

Maybe if you figure out how to fix that, you will also fix the 
ternary-issue at the same time?

-- 
Kind regards
*Jostein KjĂžnigsen*

jostein@HIDDEN đŸ” jostein@HIDDEN
https://jostein.kjĂžnigsen.no

--------------091FB645DEE82464D7A7865E
Content-Type: multipart/related;
 boundary="------------207598F6F335CF36EADC430B"


--------------207598F6F335CF36EADC430B
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p><br>
    </p>
    <div class="moz-cite-prefix">On 22.09.2020 23:15, Theodor Thornhill
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:87r1qt4ip3.fsf@HIDDEN"><br>
      <pre class="moz-quote-pre" wrap="">my most recent patch seems to deal with this (attributes) properly, as far
as I can tell.  I've tested with your example code and also with random
files in the roslyn repository.  Fontification is still sparse here.
</pre>
    </blockquote>
    Basic attribute-indentation is confirmed fixed on my end. Still no
    fontification, but I don't think that's critical.
    <blockquote type="cite" cite="mid:87r1qt4ip3.fsf@HIDDEN"><br>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">*Second: Object initializers are not indented properly.*
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">This one should be fixed in the attached patch.
</pre>
    </blockquote>
    <p>It's better, but not quite there. For a simple 1-level nested
      object-initializer, the line containing the closing bracket is
      still incorrectly indented:</p>
    <p><img src="cid:part1.9FFA08ED.899FAB73@HIDDEN"
        alt=""></p>
    <blockquote type="cite" cite="mid:87r1qt4ip3.fsf@HIDDEN"><br>
      <pre class="moz-quote-pre" wrap="">I think the recursion case works as well.  I've made an attempt in the
attached 'test.cs'
</pre>
    </blockquote>
    I can't reproduce this. Are you sure the attached patch contains all
    your changes?<br>
    <p><img src="cid:part2.2A9A3449.C61A9B20@HIDDEN"
        alt=""></p>
    <p>Looking at your example, your sub-initializer is actually a <i>collection
      </i>initializer, which may explain why it seemingly worked on your
      end.</p>
    <p><br>
    </p>
    <blockquote type="cite" cite="mid:87r1qt4ip3.fsf@HIDDEN"><br>
      <pre class="moz-quote-pre" wrap="">This (lambdas) one should be fixed in the latest patch.
</pre>
    </blockquote>
    Confirmed fixed on my end.<br>
    <blockquote type="cite" cite="mid:87r1qt4ip3.fsf@HIDDEN">
      <pre class="moz-quote-pre" wrap="">
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">
*Fourth: variable-fontification*

Here I have no absolute C# convention to quote for absolute correctness, 
but it kinda "feels wrong" to me at places.
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">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.

</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Agreed

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">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:
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
This case is fixed now.  It was due to the 'var' keyword was put in the
wrong basket.</pre>
    </blockquote>
    <p>Confirmed fixed. This change alone makes things look much better.</p>
    <p>In the process of testing this, I've also taken a look at some
      other keywords: const, string, bool, int, async and await.</p>
    <p>From what I can tell, they all look proper except for "await".</p>
    <p><img src="cid:part3.2C02FA55.681D43FC@HIDDEN"
        alt=""></p>
    <p> Looking in the patch, I see it's not mentioned there, so it
      should probably be a quick fix though?</p>
    <p>Looking at faces more in depth, I also see annotated functions
      are not getting their function-names fontified.</p>
    <p><img src="cid:part4.6C1DB572.A75B709D@HIDDEN"
        alt=""></p>
    I guess this goes back to the overall complexity of the
    attribute-store and core cc-mode support?<br>
    <blockquote type="cite" cite="mid:87r1qt4ip3.fsf@HIDDEN">
      <pre class="moz-quote-pre" wrap="">

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">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.

</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">
Yeah, this one is kind of hard, so I've been ignoring it for a little
while.  The easiest thing should be to remove the highlighting, but not
sure if that is the best move so far.</pre>
    </blockquote>
    <p>I agree this is hard. Even trying to come up with some simple
      pragmatic rules, I'm constantly left thinking about "what ifs"...
      So we can leave it for now.</p>
    <p>As for your test-file, I see you've added a multi-line case with
      a ternary operator. That made me look into multi-line statements
      in general. It seems they are not getting indented as expected:</p>
    <p><img src="cid:part5.3442B5E3.25B1D5E8@HIDDEN"
        alt=""></p>
    <p>Maybe if you figure out how to fix that, you will also fix the
      ternary-issue at the same time?<br>
    </p>
    <div class="moz-signature">-- <br>
      Kind regards<br>
      <b>Jostein KjĂžnigsen</b><br>
      <br>
      <a class="moz-txt-link-abbreviated" href="mailto:jostein@HIDDEN">jostein@HIDDEN</a> đŸ” <a class="moz-txt-link-abbreviated" href="mailto:jostein@HIDDEN">jostein@HIDDEN</a><br>
      <a href="https://jostein.kjĂžnigsen.no">https://jostein.kjĂžnigsen.no</a></div>
  </body>
</html>

--------------207598F6F335CF36EADC430B
Content-Type: image/png;
 name="cbdccnkapbnidcfb.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.9FFA08ED.899FAB73@HIDDEN>
Content-Disposition: inline;
 filename="cbdccnkapbnidcfb.png"

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
/Moq6f9kMVYAAAAASUVORK5CYII=
--------------207598F6F335CF36EADC430B
Content-Type: image/png;
 name="dadgfepfdgfigdjo.png"
Content-Transfer-Encoding: base64
Content-ID: <part2.2A9A3449.C61A9B20@HIDDEN>
Content-Disposition: inline;
 filename="dadgfepfdgfigdjo.png"

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
--------------207598F6F335CF36EADC430B
Content-Type: image/png;
 name="kgdddfodhnglljmd.png"
Content-Transfer-Encoding: base64
Content-ID: <part3.2C02FA55.681D43FC@HIDDEN>
Content-Disposition: inline;
 filename="kgdddfodhnglljmd.png"

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
s20F6bkAAAAASUVORK5CYII=
--------------207598F6F335CF36EADC430B
Content-Type: image/png;
 name="oclbllokmkogdccb.png"
Content-Transfer-Encoding: base64
Content-ID: <part4.6C1DB572.A75B709D@HIDDEN>
Content-Disposition: inline;
 filename="oclbllokmkogdccb.png"

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
q6trbW3tpUuX9/2yD68U0+UzIi7WSbCfyUTF5/NfC3/t+80/dPisa2pq0tPToidGP1epxLi5
EpYVI3ikw861aRuXJup0+tjPBtHoZEfyTBY9fIrz7k/SNi5JbFLpYv/jx2CS3fqaidfWTLyW
nyHpsDVqsWd0rOf1Y6WfL7y9c21qQ73aox+vy3VmZtfV1isxDA0OFOCPDAkSIISu3W6uDDIq
3Hnjv0P7+9paWNB5XIvI4S67vong8yzIBPzhWwHjR7mx2QyhPfuzDwc7CNiknudjBAUoEUJ0
OmPa9Klr//Xx7FlzlErlJ5+saz2fQtDq6+u7cdNX97OyZs54fdWqd318fDZu/MrQSlwmkrik
5tOUmAwJCVmz5sMjR47ExEz9/fff58ydY9S+Ika8r5a/uXzFijcPHzo8ffqMd99dXVdXN9Bv
IJlnhAiLdRLv5y6jQggFBQcxGIzUtE4Pw9PT0oODg56rny4xLpVgGDqxJ6+2XCGpVf29M9eu
t+WgoW0rjxD0Pbknv7pUIalVHd2Zy+/FCoyg4KyHrdBy2BSXi38V3b1Q0digEVerbhwvzU0T
d9lRr0c3EioQQq8EChFCTAYtYKA9Quj67XI82rfj/DAMJdyrHD/71JL3r8rkTQ4C9qwpzXXS
EpOrRBOORkzpoJgbx5o5JsIVIXTyfNGYmSd2/5bF45JKQAbtC1C2bqXRsB3bd1ZUVNTV1R0+
fMTZ2bl1riFonT5jmkQi2b5tu0QiKSgo2L59h6+vb0hIMJmQEhLubP5uc0FBgaZJg5fUFAgE
vr4+ZPoaSkxWVVXV1dV99+3mXr16jR49Gm+dNXtWdvaDQ4cOy2Sy69euX7p4qf0aVr+3uvW0
a9++fclsFxHuDQcHhxkzZvz262+nT59pkDZUVVYdOXwkOSmZ5JoJdLmfiV9BhFDfvn3VanXr
Oupt5OXlWVpauru7P320VDH6DE5hdvOApbpUoZBrnD05RvR9PNipLVfIpU1OntbGbr09r0F8
DEP3b9ea0BfPGvjByKABdmxLuliqTrtfhxByceQ4CKwQQrt+zRJLVBlZdacvFiHUcghDwNOd
R6djCKG9f2Q1yJp+O5QjkzeRjwovQIm/pw0FKFsvoNPpHz16hN+uq61FCNm2qt5G0Nq/X//7
9+8bvv6XlpaGEOrfv4PfFWoPw7Cp06bu2fPzqdMnL1+5tHXrj6hVSU1ig4J0vPYAAAsnSURB
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
AABJRU5ErkJggg==
--------------207598F6F335CF36EADC430B
Content-Type: image/png;
 name="nhalblonfacnkbej.png"
Content-Transfer-Encoding: base64
Content-ID: <part5.3442B5E3.25B1D5E8@HIDDEN>
Content-Disposition: inline;
 filename="nhalblonfacnkbej.png"

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
--------------207598F6F335CF36EADC430B--

--------------091FB645DEE82464D7A7865E--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 21:15:19 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 22 17:15:19 2020
Received: from localhost ([127.0.0.1]:33606 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kKpd7-00023N-Nt
	for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 17:15:19 -0400
Received: from lists.gnu.org ([209.51.188.17]:43204)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1kKpd3-00023C-Ft
 for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 17:15:16 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:40568)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1kKpd3-00045m-80
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 17:15:13 -0400
Received: from out0.migadu.com ([94.23.1.103]:39746)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1kKpcx-0006DC-5z
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 17:15:12 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1600809303;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 in-reply-to:in-reply-to:references:references;
 bh=lo8OBc0soEQfnjT0sa+SKPLNQL1VQWgao4mpCug9wps=;
 b=XRlZopmrbzHquQgy1VPcK4dsf3AjITcnA390NEEnrjgaw4BaGGZWuHWOSg+e2vYVi6cTac
 NEMDZxRLeCJuoypxAuJpf7zgPhwcIAXwJkyxd9TZj192PWHJP8+pPe8iEVWji5APWe5d1K
 1+HaFVgM5g7G2rGdqFp0pQF4R1WmSy+tCXsO+WoPk331/7xp86ea+ZG80p6KnkpQtQ7wUQ
 7DKpLTYafij6C0pimBu4VrcxNp/R514ZduUfaQLEfGVuikyUeBpOQ8ZAl4kvVfUScHD9ou
 Db0mXsuv3r4hg36AZwlceLPf7k4qGNvEIzSgj+zNZb0zS1j5jUMS8AhS7WBuzQ==
From: Theodor Thornhill <theo@HIDDEN>
To: Jostein =?utf-8?Q?Kj=C3=B8nigsen?= <jostein@HIDDEN>,
 bug-gnu-emacs@HIDDEN
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
In-Reply-To: <8081dcbd-1e89-c9e6-d691-1270df8f9f19@HIDDEN>
References: <87zh5iyu4d.fsf@HIDDEN>
 <ab7fd8f4-77f3-dbb2-f1a3-d0ac71fc7b44@HIDDEN>
 <87wo0myn2l.fsf@HIDDEN>
 <8081dcbd-1e89-c9e6-d691-1270df8f9f19@HIDDEN>
Date: Tue, 22 Sep 2020 23:15:04 +0200
Message-ID: <87r1qt4ip3.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -0.10
Received-SPF: pass client-ip=94.23.1.103; envelope-from=theo@HIDDEN;
 helo=out0.migadu.com
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/22 17:15:04
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x [generic]
X-Spam_score_int: -16
X-Spam_score: -1.7
X-Spam_bar: -
X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1,
 DKIM_SIGNED=0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.4 (-)
X-Debbugs-Envelope-To: submit
Cc: acm@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.4 (--)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

Jostein Kj=C3=B8nigsen <jostein@HIDDEN> writes:

> On 22.09.2020 15:10, Theodor Thornhill wrote:
>> Jostein Kj=C3=B8nigsen <jostein@HIDDEN> writes:

[...]

> I still haven't looked at the code in your patch, but I've applied it to=
=20
> latest Emacs Git master, and given it a test-run.
> When going over existing code, everything looks and feels nice. And it's=
=20
> much faster than my "old", non-transferable code. So I definitely think=20
> this is a /very good/ start.

Nice!

>
> While I hold no "position" in GNU or Emacs as a whole, I would consider=20
> myself a C# veteran (since 2004), and as the old maintainer of old=20
> csharp-mode, I think I have some experience which may be useful.
Most definitively.  Thank you for taking your time!

>
> So for the time being, I'll just promote myself to being the "critical=20
> Emacs C#-user", and provide some feedback based on my expectations for=20
> how editing C# should feel or behave.
>
> Please don't consider the following comments as negative towards your=20
> work, or me in any way trying to dissuade you from getting this=20
> mainlined. I'm just here to try to help you ensure that what you land is=
=20
> going to be "good enough" so that it will be easier to argue for=20
> inclusion in core-Emacs later on :)
None of your comment are taken as negative.  I'd much rather you'd be
critical early, so that we can get something nice quicker!

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

Before I answer your comments, I'll just let you know I'm still wrapping
my head around the whole cc-mode.  I might find better solutions to all
this later on.

>
> *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=20
> get a trailing indentation bug for the equivalent C# code:

Yeah, this is a difficult one, because the java version of this
implements lots of logic in the cc-engine.el, and for now, we don't.
However, my most recent patch seems to deal with this properly, as far
as I can tell.  I've tested with your example code and also with random
files in the roslyn repository.  Fontification is still sparse here.

>
> *Second: Object initializers are not indented properly.*
>
> Consider the following fairly simple case. Using the provided patch we=20
> get the following indentation:

This one should be fixed in the attached patch.

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

I think the recursion case works as well.  I've made an attempt in the
attached 'test.cs'

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

Hopefully, we have it now!

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

Great!

>
> *Third: Lamda-function indentation when used with higher order functions
> *
>
> Lambdas also suffer from some unexpected indentation issues:

This one should be fixed in the latest patch.

>
> *Fourth: variable-fontification*
>
> Here I have no absolute C# convention to quote for absolute correctness,=
=20
> but it kinda "feels wrong" to me at places.

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

Agreed

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

This case is fixed now.  It was due to the 'var' keyword was put in the
wrong basket.

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

Yeah, this one is kind of hard, so I've been ignoring it for a little
while.  The easiest thing should be to remove the highlighting, but not
sure if that is the best move so far.

>
> I'm sure just/discussing/ the///soft-rules/ for these aspects could take=
=20
> months alone, not speaking for the effort required to actually making it=
=20
> happen in code.
>
> Consider it something to aim for, but I wouldn't expect anyone to get=20
> this right in a version 1 of anything.
>

Yeah, more cases are coming up all the time.  My initial focus has been
mostly on the indentation part, since font-locking is a 'bonus-feature'
in some sense.  However, they seem intimately connected in cc-mode.

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

My pleasure :)


One issue I have now is that there are many rules in the c-style-alist,
and I think it would be better to design or reuse some constructs from
cc-engine to apply some other syntax rules to the code.  One example and
consequence of this is the fix of the attributes from your code.  It
aligns nicely, but destroys the indentation of the 'aligned ternary' (on
the bottom of the file).


Please, if you have time, take a look at the second patch, as well as
the test file.  Maybe you get some ideas, but I think some of the low
hanging fruits are found, and it is time to dive into the engine itself.

I really appreciate you taking your time to find these bugs for me.
Thanks.

--
Theo


P.S
Pasting the contents of test.cs here, since I apparently suck at email

/// Working

[Test]
public class Foo
{
    [Zoo]
    [Goo]
    public void Bar()
    {
=20=20=20=20=20=20=20=20
    }
};

var x =3D new SomeType[]
{
    Prop1 =3D "foo",
    Prop2 =3D new SomeType2[]
    {
        Prop3 =3D true ? "this" : "that";
    }
    //
};


var x =3D new SomeType[] {
    new SomeType(a, b),
    new SomeType(b, c)
    // lol
};

/// Kind of working

goo.Select(i =3D> {
    return goo.Select(i)
    .Foo()
    .Bar()
});

Foo foo =3D new Foo();
var bar1 =3D foo.Bar(_field);
Bar bar3 =3D foo.Bar(_field.Prop);

/// Not working

var x =3D foo
? bar
: baz;



--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=v2-0001-Add-csharp-support-to-cc-mode.patch

From e3707e7d45d708c20733c7c496b98c1c2724b808 Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@HIDDEN>
Date: Tue, 22 Sep 2020 12:09:38 +0200
Subject: [PATCH v2] Add csharp support to cc-mode

---
 lisp/progmodes/cc-defs.el   |  27 +++----
 lisp/progmodes/cc-fonts.el  |  33 ++++++++
 lisp/progmodes/cc-langs.el  | 148 +++++++++++++++++++++++-------------
 lisp/progmodes/cc-mode.el   |  65 +++++++++++++---
 lisp/progmodes/cc-styles.el |  36 +++++++++
 lisp/progmodes/cc-vars.el   |  22 ++++++
 6 files changed, 253 insertions(+), 78 deletions(-)

diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 77e263f1aa..ac1c421e37 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -95,12 +95,12 @@ c-version-sym
 
 (defvar c-buffer-is-cc-mode nil
   "Non-nil for all buffers with a major mode derived from CC Mode.
-Otherwise, this variable is nil.  I.e. this variable is non-nil for
-`c-mode', `c++-mode', `objc-mode', `java-mode', `idl-mode',
-`pike-mode', `awk-mode', and any other non-CC Mode mode that calls
-`c-initialize-cc-mode'.  The value is the mode symbol itself
-\(i.e. `c-mode' etc) of the original CC Mode mode, or just t if it's
-not known.")
+Otherwise, this variable is nil.  I.e. this variable is non-nil
+for `c-mode', `c++-mode', `objc-mode', `csharp-mode',
+`java-mode', `idl-mode', `pike-mode', `awk-mode', and any other
+non-CC Mode mode that calls `c-initialize-cc-mode'.  The value is
+the mode symbol itself \(i.e. `c-mode' etc) of the original CC
+Mode mode, or just t if it's not known.")
 (make-variable-buffer-local 'c-buffer-is-cc-mode)
 
 ;; Have to make `c-buffer-is-cc-mode' permanently local so that it
@@ -1874,13 +1874,14 @@ c-keep-region-active
   (and (boundp 'zmacs-region-stays)
        (setq zmacs-region-stays t)))
 
-(put 'c-mode    'c-mode-prefix "c-")
-(put 'c++-mode  'c-mode-prefix "c++-")
-(put 'objc-mode 'c-mode-prefix "objc-")
-(put 'java-mode 'c-mode-prefix "java-")
-(put 'idl-mode  'c-mode-prefix "idl-")
-(put 'pike-mode 'c-mode-prefix "pike-")
-(put 'awk-mode  'c-mode-prefix "awk-")
+(put 'c-mode      'c-mode-prefix "c-")
+(put 'c++-mode    'c-mode-prefix "c++-")
+(put 'objc-mode   'c-mode-prefix "objc-")
+(put 'csharp-mode 'c-mode-prefix "csharp-")
+(put 'java-mode   'c-mode-prefix "java-")
+(put 'idl-mode    'c-mode-prefix "idl-")
+(put 'pike-mode   'c-mode-prefix "pike-")
+(put 'awk-mode    'c-mode-prefix "awk-")
 
 (defsubst c-mode-symbol (suffix)
   "Prefix the current mode prefix (e.g. \"c-\") to SUFFIX and return
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index bb7e5bea6e..c361609e0f 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -2579,6 +2579,39 @@ objc-font-lock-keywords
   (setq objc-font-lock-extra-types
 	(cc-eval-when-compile (list (concat "[" c-upper "]\\sw*")))))
 
+
+;;; Csharp.
+
+(c-override-default-keywords 'csharp-font-lock-keywords)
+
+(defconst csharp-font-lock-keywords-1 (c-lang-const c-matchers-1 csharp)
+  "Minimal font locking for C# mode.
+Fontifies nothing except the syntactic fontification of strings and
+comments.")
+
+(defconst csharp-font-lock-keywords-2 (c-lang-const c-matchers-2 csharp)
+  "Fast normal font locking for C# mode.
+In addition to `csharp-font-lock-keywords-1', this adds fontification of
+keywords, simple types, declarations that are easy to recognize, the
+user defined types on `csharp-font-lock-extra-types', and the doc
+comment styles specified by `c-doc-comment-style'.")
+
+(defconst csharp-font-lock-keywords-3 (c-lang-const c-matchers-3 csharp)
+  "Accurate normal font locking for C# mode.
+Like variable `csharp-font-lock-keywords-2' but detects declarations in a more
+accurate way that works in most cases for arbitrary types without the
+need for `csharp-font-lock-extra-types'.")
+
+(defvar csharp-font-lock-keywords csharp-font-lock-keywords-3
+  "Default expressions to highlight in C# mode.")
+
+(defun csharp-font-lock-keywords-2 ()
+  (c-compose-keywords-list csharp-font-lock-keywords-2))
+(defun csharp-font-lock-keywords-3 ()
+  (c-compose-keywords-list csharp-font-lock-keywords-3))
+(defun csharp-font-lock-keywords ()
+  (c-compose-keywords-list csharp-font-lock-keywords))
+
 
 ;;; Java.
 
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 13e70a3251..e6c314b445 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -378,7 +378,8 @@ c-make-mode-syntax-table
        (let ((table (make-syntax-table)))
 	 (c-populate-syntax-table table)
 	 ;; Mode specific syntaxes.
-	 ,(cond ((or (c-major-mode-is 'objc-mode) (c-major-mode-is 'java-mode))
+	 ,(cond ((or (c-major-mode-is 'objc-mode) (c-major-mode-is 'java-mode)
+		     (c-major-mode-is 'csharp-mode))
 		 ;; Let '@' be part of symbols in ObjC to cope with
 		 ;; its compiler directives as single keyword tokens.
 		 ;; This is then necessary since it's assumed that
@@ -430,7 +431,7 @@ c-identifier-syntax-modifications
   ;; it as an identifier character since it's often used in various
   ;; machine generated identifiers.
   t    '((?_ . "w") (?$ . "w"))
-  (objc java) (append '((?@ . "w"))
+  (objc java csharp) (append '((?@ . "w"))
 	       (c-lang-const c-identifier-syntax-modifications))
   awk  '((?_ . "w")))
 (c-lang-defvar c-identifier-syntax-modifications
@@ -467,6 +468,9 @@ c-get-state-before-change-functions
 	     c-truncate-bs-cache
 	     c-before-change-check-unbalanced-strings
 	     c-parse-quotes-before-change)
+  csharp '(c-parse-quotes-before-change
+	   c-before-change-check-unbalanced-strings
+	   c-before-change-check-<>-operators)
   java '(c-parse-quotes-before-change
 	 c-before-change-check-unbalanced-strings
 	 c-before-change-check-<>-operators)
@@ -516,6 +520,12 @@ c-before-font-lock-functions
 	c-neutralize-syntax-in-CPP
 	c-restore-<>-properties
 	c-change-expand-fl-region)
+  csharp '(c-depropertize-new-text
+	   c-after-change-escape-NL-in-string
+	   c-parse-quotes-after-change
+	   c-after-change-mark-abnormal-strings
+	   c-restore-<>-properties
+	   c-change-expand-fl-region)
   java '(c-depropertize-new-text
 	 c-after-change-escape-NL-in-string
 	 c-parse-quotes-after-change
@@ -648,10 +658,11 @@ c-symbol-start
   "Regexp that matches the start of a symbol, i.e. any identifier or
 keyword.  It's unspecified how far it matches.  Does not contain a \\|
 operator at the top level."
-  t    (concat "[" c-alpha "_]")
-  java (concat "[" c-alpha "_@]")
-  objc (concat "[" c-alpha "_@]")
-  pike (concat "[" c-alpha "_`]"))
+  t      (concat "[" c-alpha "_]")
+  csharp (concat "[" c-alpha "_@]")
+  java   (concat "[" c-alpha "_@]")
+  objc   (concat "[" c-alpha "_@]")
+  pike   (concat "[" c-alpha "_`]"))
 (c-lang-defvar c-symbol-start (c-lang-const c-symbol-start))
 
 (c-lang-defconst c-symbol-chars
@@ -718,6 +729,7 @@ c-identifier-ops
   ;; naming conventions.  We still define "." here to make
   ;; `c-forward-name' move over as long names as possible which is
   ;; necessary to e.g. handle throws clauses correctly.
+  csharp '((left-assoc "."))
   java '((left-assoc "."))
   idl  '((left-assoc "::")
 	 (prefix "::"))
@@ -1247,6 +1259,8 @@ c-overloadable-operators
 	 "<<" ">>" ">>=" "<<=" "==" "!=" "not_eq" "<=" ">="
 	 "&&" "and" "||" "??!??!" "or" "++" "--" "," "->*" "->"
 	 "()" "[]" "<::>" "??(??)")
+  csharp '("+" "-" "*" "/" "%" "&" "|" "^" "<<" ">>" "=="
+	   "!=" ">" "<" ">=" "<=")
   ;; These work like identifiers in Pike.
   pike '("`+" "`-" "`&" "`|" "`^" "`<<" "`>>" "`*" "`/" "`%" "`~"
 	 "`==" "`<" "`>" "`!" "`[]" "`[]=" "`->" "`->=" "`()" "``+"
@@ -2023,6 +2037,8 @@ c-primitive-type-kwds
   objc (append
 	'("id" "Class" "SEL" "IMP" "BOOL")
 	(c-lang-const c-primitive-type-kwds))
+  csharp '("bool" "byte" "sbyte" "char" "decimal" "double" "float" "int" "uint"
+	   "long" "ulong" "short" "ushort" "void" "object" "string" "var")
   java '("boolean" "byte" "char" "double" "float" "int" "long" "short" "void")
   idl  '("Object" "ValueBase" "any" "boolean" "char" "double" "fixed" "float"
 	 "long" "octet" "sequence" "short" "string" "void" "wchar" "wstring"
@@ -2137,7 +2153,8 @@ c-type-modifier-kwds
 on `c-primitive-type-kwds', they are fontified with the keyword face and not
 the type face."
   t (c-lang-const c-type-modifier-prefix-kwds)
-  c++ (append (c-lang-const c-type-modifier-prefix-kwds) '("throw")))
+  c++ (append (c-lang-const c-type-modifier-prefix-kwds) '("throw"))
+  csharp '("readonly" "const" "volatile" "new"))
 
 (c-lang-defconst c-opt-type-modifier-key
   ;; Adorned regexp matching `c-type-modifier-kwds', or nil in
@@ -2229,8 +2246,9 @@ c-brace-list-decl-kwds
 `c-colon-type-list-kwds', `c-paren-nontype-kwds', `c-paren-type-kwds',
 `c-<>-type-kwds', or `c-<>-arglist-kwds' then the associated clauses
 will be handled."
-  t    '("enum")
-  (awk) nil)
+  t      '("enum")
+  csharp '("enum" "new")
+  (awk)  nil)
 
 (c-lang-defconst c-brace-list-key
   ;; Regexp matching the start of declarations where the following
@@ -2281,6 +2299,7 @@ c-other-block-decl-kwds
   t   nil
   (c objc) '("extern")
   c++ '("namespace" "extern")
+  csharp '("namespace")
   idl '("module"
 	;; In CORBA CIDL:
 	"composition"))
@@ -2341,7 +2360,8 @@ c-typedef-decl-key
 (c-lang-defconst c-using-kwds
   "Keywords which behave like `using' in C++"
   t nil
-  c++ '("using"))
+  c++ '("using")
+  csharp '("using"))
 
 (c-lang-defconst c-using-key
   ;; Regexp matching C++'s `using'.
@@ -2410,6 +2430,10 @@ c-modifier-kwds
 	 "primary" "state"
 	 ;; In CORBA CIDL:
 	 "bindsTo" "delegatesTo" "implements" "proxy" "storedOn")
+  csharp '("abstract" "const" "default" "final" "native" "private" "protected"
+	   "public" "partial" "internal" "readonly" "static" "event" "transient"
+	   "volatile" "sealed" "ref" "out" "virtual" "implicit" "explicit"
+	   "fixed" "override" "params" "async" "extern" "unsafe")
   ;; Note: "const" is not used in Java, but it's still a reserved keyword.
   java '("abstract" "const" "default" "final" "native" "private" "protected"
 	 "public" "static" "strictfp" "synchronized" "transient" "volatile")
@@ -2634,14 +2658,16 @@ c-type-list-kwds
 
 Note: Use `c-typeless-decl-kwds' for keywords followed by a function
 or variable identifier (that's being defined)."
-  t    nil
-  c++  '("operator")
-  objc '("@class")
-  java '("import" "new" "extends" "super" "implements" "throws")
-  idl  '("manages" "native" "primarykey" "supports"
-	 ;; In CORBA PSDL:
-	 "as" "implements" "of" "scope")
-  pike '("inherit"))
+  t      nil
+  c++    '("operator")
+  objc   '("@class")
+  csharp '("struct" "class" "interface" "delegate" "event" "get" "set" "add"
+	   "remove" "is" "as" "operator")
+  java   '("import" "new" "extends" "super" "implements" "throws")
+  idl    '("manages" "native" "primarykey" "supports"
+	   ;; In CORBA PSDL:
+	   "as" "implements" "of" "scope")
+  pike   '("inherit"))
 
 (c-lang-defconst c-ref-list-kwds
   "Keywords that may be followed by a comma separated list of
@@ -2652,24 +2678,25 @@ c-ref-list-kwds
 
 Note: Use `c-typeless-decl-kwds' for keywords followed by a function
 or variable identifier (that's being defined)."
-  t    nil
-  c++  '("namespace")
-  java '("package")
-  idl  '("import" "module"
-	 ;; In CORBA CIDL:
-	 "composition")
-  pike '("import"))
+  t      nil
+  c++    '("namespace")
+  java   '("package")
+  idl    '("import" "module"
+	   ;; In CORBA CIDL:
+	   "composition")
+  pike   '("import"))
 
 (c-lang-defconst c-colon-type-list-kwds
   "Keywords that may be followed (not necessarily directly) by a colon
 and then a comma separated list of type identifiers, where each
 optionally can be prefixed by keywords.  (Can also be used for the
 special case when the list can contain only one element.)"
-  t    nil
-  c++  '("class" "struct")
-  idl  '("component" "eventtype" "home" "interface" "valuetype"
-	 ;; In CORBA PSDL:
-	 "storagehome" "storagetype"))
+  t      nil
+  c++    '("class" "struct")
+  csharp '("class" "struct" "interface")
+  idl    '("component" "eventtype" "home" "interface" "valuetype"
+	   ;; In CORBA PSDL:
+	   "storagehome" "storagetype"))
 
 (c-lang-defconst c-colon-type-list-re
   "Regexp matched after the keywords in `c-colon-type-list-kwds' to skip
@@ -2765,11 +2792,12 @@ c-brace-id-list-kwds
 
 (c-lang-defconst c-block-stmt-1-kwds
   "Statement keywords followed directly by a substatement."
-  t    '("do" "else")
-  c++  '("do" "else" "try")
-  objc '("do" "else" "@finally" "@try" "@autoreleasepool")
-  java '("do" "else" "finally" "try")
-  idl  nil)
+  t      '("do" "else")
+  c++    '("do" "else" "try")
+  objc   '("do" "else" "@finally" "@try" "@autoreleasepool")
+  csharp '("do" "else" "finally" "try")
+  java   '("do" "else" "finally" "try")
+  idl    nil)
 
 (c-lang-defconst c-block-stmt-1-key
   ;; Regexp matching the start of any statement followed directly by a
@@ -2781,7 +2809,8 @@ c-block-stmt-1-2-kwds
   "Statement keywords optionally followed by a paren sexp.
 Keywords here should also be in `c-block-stmt-1-kwds'."
   t nil
-  java '("try"))
+  csharp '("try")
+  java   '("try"))
 
 (c-lang-defconst c-block-stmt-1-2-key
   ;; Regexp matching the start of a statement which may be followed by a
@@ -2791,13 +2820,15 @@ c-block-stmt-1-2-key
 
 (c-lang-defconst c-block-stmt-2-kwds
   "Statement keywords followed by a paren sexp and then by a substatement."
-  t    '("for" "if" "switch" "while")
-  c++  '("for" "if" "switch" "while" "catch")
-  objc '("for" "if" "switch" "while" "@catch" "@synchronized")
-  java '("for" "if" "switch" "while" "catch" "synchronized")
-  idl  nil
-  pike '("for" "if" "switch" "while" "foreach")
-  awk  '("for" "if" "switch" "while"))
+  t      '("for" "if" "switch" "while")
+  c++    '("for" "if" "switch" "while" "catch")
+  objc   '("for" "if" "switch" "while" "@catch" "@synchronized")
+  csharp '("for" "if" "switch" "while" "catch" "foreach" "fixed" "checked"
+	   "unchecked" "using" "lock")
+  java   '("for" "if" "switch" "while" "catch" "synchronized")
+  idl    nil
+  pike   '("for" "if" "switch" "while" "foreach")
+  awk    '("for" "if" "switch" "while"))
 
 (c-lang-defconst c-block-stmt-2-key
   ;; Regexp matching the start of any statement followed by a paren sexp
@@ -2838,6 +2869,7 @@ c-simple-stmt-kwds
   t    '("break" "continue" "goto" "return")
   c++    '("break" "continue" "goto" "return" "co_return")
   objc '("break" "continue" "goto" "return" "@throw")
+  csharp '("break" "continue" "goto" "return" "throw")
   ;; Note: `goto' is not valid in Java, but the keyword is still reserved.
   java '("break" "continue" "goto" "return" "throw")
   idl  nil
@@ -2912,16 +2944,18 @@ c-constant-kwds
   objc    '("nil" "Nil" "YES" "NO" "IBAction" "IBOutlet"
 	    "NS_DURING" "NS_HANDLER" "NS_ENDHANDLER")
   idl     '("TRUE" "FALSE")
+  csharp  '("true" "false" "null" "value")
   java    '("true" "false" "null") ; technically "literals", not keywords
   pike    '("UNDEFINED")) ;; Not a keyword, but practically works as one.
 
 (c-lang-defconst c-primary-expr-kwds
   "Keywords besides constants and operators that start primary expressions."
-  t    nil
-  c++  '("operator" "this")
-  objc '("super" "self")
-  java '("this")
-  pike '("this")) ;; Not really a keyword, but practically works as one.
+  t      nil
+  c++    '("operator" "this")
+  objc   '("super" "self")
+  csharp '("this" "base" "operator")
+  java   '("this")
+  pike   '("this")) ;; Not really a keyword, but practically works as one.
 
 (c-lang-defconst c-expr-kwds
   ;; Keywords that can occur anywhere in expressions.  Built from
@@ -2948,16 +2982,18 @@ c-inexpr-block-kwds
 
 (c-lang-defconst c-inexpr-class-kwds
   "Keywords that can start classes inside expressions."
-  t    nil
-  java '("new")
-  pike '("class"))
+  t      nil
+  csharp '("new")
+  java   '("new")
+  pike   '("class"))
 
 (c-lang-defconst c-inexpr-brace-list-kwds
   "Keywords that can start brace list blocks inside expressions.
 Note that Java specific rules are currently applied to tell this from
 `c-inexpr-class-kwds'."
-  t    nil
-  java '("new"))
+  t      nil
+  csharp '("new")
+  java   '("new"))
 
 (c-lang-defconst c-opt-inexpr-brace-list-key
   ;; Regexp matching the start of a brace list in an expression, or
@@ -3049,6 +3085,7 @@ c-std-abbrev-keywords
   "List of keywords which may need to cause electric indentation."
   t '("else" "while")
   c++ (append (c-lang-const c-std-abbrev-keywords) '("catch"))
+  csharp (append (c-lang-const c-std-abbrev-keywords) '("catch" "finally"))
   java (append (c-lang-const c-std-abbrev-keywords) '("catch" "finally"))
   idl nil)
 (c-lang-defvar c-std-abbrev-keywords (c-lang-const c-std-abbrev-keywords))
@@ -3274,6 +3311,7 @@ c-decl-prefix-re
   ;; in all languages except Java for when a cpp macro definition
   ;; begins with a declaration.
   t "\\([{}();,]+\\)"
+  csharp "\\([{}(;,<]+\\)"
   java "\\([{}(;,<]+\\)"
   ;; Match "<" in C++ to get the first argument in a template arglist.
   ;; In that case there's an additional check in `c-find-decl-spots'
@@ -3585,6 +3623,7 @@ c-opt-type-suffix-key
 is in effect or not."
   t nil
   (c c++ objc pike) "\\(\\.\\.\\.\\)"
+  csharp (concat "\\(\\[" (c-lang-const c-simple-ws) "*\\]\\|\\.\\.\\.\\)")
   java (concat "\\(\\[" (c-lang-const c-simple-ws) "*\\]\\|\\.\\.\\.\\)"))
 (c-lang-defvar c-opt-type-suffix-key (c-lang-const c-opt-type-suffix-key))
 
@@ -3644,7 +3683,7 @@ c-recognize-typeless-decls
 that are preceded by a declaration starting keyword, so
 e.g. `c-typeless-decl-kwds' may still be used when it's set to nil."
   t nil
-  (c c++ objc java) t)
+  (c c++ objc csharp java) t)
 (c-lang-defvar c-recognize-typeless-decls
   (c-lang-const c-recognize-typeless-decls))
 
@@ -3657,6 +3696,7 @@ c-recognize-<>-arglists
 expression is considered to be a type."
   t (or (consp (c-lang-const c-<>-type-kwds))
 	(consp (c-lang-const c-<>-arglist-kwds)))
+  csharp t
   java t)	    ; 2008-10-19.  This is crude.  The syntax for java
 		    ; generics is not yet coded in CC Mode.
 (c-lang-defvar c-recognize-<>-arglists (c-lang-const c-recognize-<>-arglists))
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index c6dd671051..56cc476fad 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -36,12 +36,12 @@
 ;; Note: The version string is in cc-defs.
 
 ;; This package provides GNU Emacs major modes for editing C, C++,
-;; Objective-C, Java, CORBA's IDL, Pike and AWK code.  As of the
+;; Objective-C, C#, Java, CORBA's IDL, Pike and AWK code.  As of the
 ;; latest Emacs and XEmacs releases, it is the default package for
 ;; editing these languages.  This package is called "CC Mode", and
 ;; should be spelled exactly this way.
 
-;; CC Mode supports K&R and ANSI C, ANSI C++, Objective-C, Java,
+;; CC Mode supports K&R and ANSI C, ANSI C++, Objective-C, C#, Java,
 ;; CORBA's IDL, Pike and AWK with a consistent indentation model
 ;; across all modes.  This indentation model is intuitive and very
 ;; flexible, so that almost any desired style of indentation can be
@@ -75,7 +75,6 @@
 
 ;; Externally maintained major modes which use CC-mode's engine include:
 ;; - cuda-mode
-;; - csharp-mode (https://github.com/josteink/csharp-mode)
 ;; - haxe-mode
 ;; - d-mode
 ;; - dart-mode
@@ -195,13 +194,14 @@ c-init-language-vars-for
 `c-init-language-vars' macro if the language you want to use is one of
 those, rather than a derived language defined through the language
 variable system (see \"cc-langs.el\")."
-  (cond ((eq mode 'c-mode)    (c-init-language-vars c-mode))
-	((eq mode 'c++-mode)  (c-init-language-vars c++-mode))
-	((eq mode 'objc-mode) (c-init-language-vars objc-mode))
-	((eq mode 'java-mode) (c-init-language-vars java-mode))
-	((eq mode 'idl-mode)  (c-init-language-vars idl-mode))
-	((eq mode 'pike-mode) (c-init-language-vars pike-mode))
-	((eq mode 'awk-mode)  (c-init-language-vars awk-mode))
+  (cond ((eq mode 'c-mode)      (c-init-language-vars c-mode))
+	((eq mode 'c++-mode)    (c-init-language-vars c++-mode))
+	((eq mode 'objc-mode)   (c-init-language-vars objc-mode))
+	((eq mode 'csharp-mode) (c-init-language-vars csharp-mode))
+	((eq mode 'java-mode)   (c-init-language-vars java-mode))
+	((eq mode 'idl-mode)    (c-init-language-vars idl-mode))
+	((eq mode 'pike-mode)   (c-init-language-vars pike-mode))
+	((eq mode 'awk-mode)    (c-init-language-vars awk-mode))
 	(t (error "Unsupported mode %s" mode))))
 
 ;;;###autoload
@@ -649,7 +649,8 @@ c-basic-common-init
 
   (when (or c-recognize-<>-arglists
 	    (c-major-mode-is 'awk-mode)
-	    (c-major-mode-is '(java-mode c-mode c++-mode objc-mode pike-mode)))
+	    (c-major-mode-is
+	     '(java-mode c-mode c++-mode objc-mode pike-mode csharp-mode)))
     ;; We'll use the syntax-table text property to change the syntax
     ;; of some chars for this language, so do the necessary setup for
     ;; that.
@@ -2739,6 +2740,48 @@ objc-mode
   (cc-imenu-init nil 'cc-imenu-objc-function)
   (c-run-mode-hooks 'c-mode-common-hook))
 
+
+;; Support for C#
+
+(defvar csharp-mode-syntax-table
+  (funcall (c-lang-const c-make-mode-syntax-table csharp))
+  "Syntax table used in csharp-mode buffers.")
+
+(defvar csharp-mode-map
+  (let ((map (c-make-inherited-keymap)))
+    map)
+  "Keymap used in csharp-mode buffers.")
+;; Add bindings which are only useful for C#.
+
+(easy-menu-define c-csharp-menu csharp-mode-map "C# Mode Commands"
+		  (cons "C#" (c-lang-const c-mode-menu csharp)))
+
+;;;###autoload (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode))
+
+;;;###autoload
+(define-derived-mode csharp-mode prog-mode "C#"
+  "Major mode for editing Csharp code.
+To submit a problem report, enter `\\[c-submit-bug-report]' from a
+csharp-mode buffer.  This automatically sets up a mail buffer with
+version information already added.  You just need to add a description
+of the problem, including a reproducible test case, and send the
+message.
+
+To see what version of CC Mode you are running, enter `\\[c-version]'.
+
+The hook `c-mode-common-hook' is run with no args at mode
+initialization, then `csharp-mode-hook'.
+
+Key bindings:
+\\{csharp-mode-map}"
+  :after-hook (c-update-modeline)
+  (c-initialize-cc-mode t)
+  (setq abbrev-mode t)
+  (c-init-language-vars-for 'csharp-mode)
+  (c-common-init 'csharp-mode)
+  (easy-menu-add c-csharp-menu)
+  (c-run-mode-hooks 'c-mode-common-hook))
+
 
 ;; Support for Java
 
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index 36be9f6c74..be025810a9 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -215,6 +215,42 @@ c-style-alist
 				(arglist-cont-nonempty)))
      (c-block-comment-prefix . ""))
 
+    ("csharp"
+     (c-basic-offset . 4)
+     (c-comment-only-line-offset . (0 . 0))
+     (c-offsets-alist . ((inline-open . 0)
+			 (topmost-intro         . 0)
+			 (topmost-intro-cont    . 0)
+			 (statement-block-intro . +)
+			 (statement-case-intro  . +)
+			 (statement-case-open   . +)
+			 (substatement          . 0)
+			 (substatement-open     . 0)
+			 (substatement-label    . +)
+			 (label                 . 0)
+			 (statement-case-open   . +)
+			 (statement-cont        . 0)
+			 (arglist-cont-nonempty . 0)
+			 (inexpr-class          . -)
+			 (arglist-intro  . c-lineup-arglist-intro-after-paren)
+			 (arglist-close  . c-lineup-arglist)
+			 (string         . c-lineup-dont-change)
+			 (arglist-cont          . 0)
+			 (block-open            . 0)
+			 (block-close           . 0)
+			 (case-label            . +)
+			 (class-open            . 0)
+			 (class-close           . 0)
+			 (defun-open            . 0)
+			 (defun-close           . 0)
+			 (else-clause           . 0)
+			 (brace-list-intro . (first
+					      c-lineup-class-decl-init-+ +
+					      c-lineup-2nd-brace-entry-in-arglist))
+			 (brace-list-close      . 0)
+			 (access-label   . -)
+			 (inher-cont     . c-lineup-java-inher)
+			 (func-decl-cont . c-lineup-java-throws))))
     ("java"
      (c-basic-offset . 4)
      (c-comment-only-line-offset . (0 . 0))
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index 9e6f9527ca..559531fafe 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -549,6 +549,8 @@ c-comment-prefix-regexp
 		  (const :format "C++   " c++-mode) (regexp :format "%v"))
 	    (cons :format "%v"
 		  (const :format "ObjC  " objc-mode) (regexp :format "%v"))
+	    (cons :format "%v"
+		  (const :format "C#  " csharp-mode) (regexp :format "%v"))
 	    (cons :format "%v"
 		  (const :format "Java  " java-mode) (regexp :format "%v"))
 	    (cons :format "%v"
@@ -919,6 +921,9 @@ c-require-final-newline
 	      (cons :format "%v"
 		    (const :format "ObjC  " objc-mode)
 		    (symbol :format "%v" :value ,require-final-newline))
+	      (cons :format "%v"
+		    (const :format "C#  " csharp-mode)
+		    (symbol :format "%v" :value ,require-final-newline))
 	      (cons :format "%v"
 		    (const :format "Java  " java-mode)
 		    (symbol :format "%v" :value ,require-final-newline))
@@ -1003,6 +1008,7 @@ c-objc-method-parameter-offset
   :group 'c)
 
 (defcustom c-default-style '((java-mode . "java") (awk-mode . "awk")
+			     (csharp-mode . "csharp")
 			     (other . "gnu"))
   "Style which gets installed by default when a file is visited.
 
@@ -1031,6 +1037,8 @@ c-default-style
 		  (const :format "C++   " c++-mode) (string :format "%v"))
 	    (cons :format "%v"
 		  (const :format "ObjC  " objc-mode) (string :format "%v"))
+	    (cons :format "%v"
+		  (const :format "C#  " csharp-mode) (string :format "%v"))
 	    (cons :format "%v"
 		  (const :format "Java  " java-mode) (string :format "%v"))
 	    (cons :format "%v"
@@ -1459,6 +1467,11 @@ objc-mode-hook
   :type 'hook
   :group 'c)
 
+(defcustom csharp-mode-hook nil
+  "Hook called by `csharp-mode'."
+  :type 'hook
+  :group 'c)
+
 (defcustom java-mode-hook nil
   "Hook called by `java-mode'."
   :type 'hook
@@ -1613,6 +1626,15 @@ objc-font-lock-extra-types
   :type 'c-extra-types-widget
   :group 'c)
 
+(defcustom csharp-font-lock-extra-types
+  (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw"))
+  (c-make-font-lock-extra-types-blurb "C#" "csharp-mode" (concat
+"For example, a value of (\"[" c-upper "]\\\\sw*[" c-lower "]\\\\sw*\") means
+capitalized words are treated as type names (the requirement for a
+lower case char is to avoid recognizing all-caps constant names)."))
+  :type 'c-extra-types-widget
+  :group 'c)
+
 (defcustom java-font-lock-extra-types
   (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw"))
   (c-make-font-lock-extra-types-blurb "Java" "java-mode" (concat
-- 
2.28.0


--=-=-=--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 14:26:50 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 22 10:26:50 2020
Received: from localhost ([127.0.0.1]:32788 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kKjFq-0008HS-Hc
	for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 10:26:50 -0400
Received: from lists.gnu.org ([209.51.188.17]:55948)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <jostein@HIDDEN>) id 1kKjFp-0008HK-4L
 for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 10:26:49 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:48826)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jostein@HIDDEN>)
 id 1kKjFo-0004PE-PI
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 10:26:48 -0400
Received: from out3-smtp.messagingengine.com ([66.111.4.27]:48115)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jostein@HIDDEN>)
 id 1kKjFl-0007KX-Jg
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 10:26:48 -0400
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailout.nyi.internal (Postfix) with ESMTP id C38415C01A3;
 Tue, 22 Sep 2020 10:26:44 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute2.internal (MEProxy); Tue, 22 Sep 2020 10:26:44 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 secure.kjonigsen.net; h=subject:to:cc:references:from:message-id
 :date:mime-version:in-reply-to:content-type; s=fm1; bh=cH+Zg5WHO
 9Biez4NnZSqjUOFnVBYsbA/EVaBW+rV5ww=; b=MUYGkoBjJ6C6q62PZw0BkQlDb
 dte+fNItJVaiFn/TKKFflFanWbcAj4JhYY7mp1DHhfm/k9xGZMyFK7n1YOjOu6cT
 FRVa1KAqJ09AJj05ChDY8qTep5ech9pqmb0+6NlpsNwUQ95le4bBMX3k5pXg2uJe
 7GI7MMAdTTyL4fHEiPenkg+yRhtcnOPhs4TGDhMN2rlM/mG5bePXHeGKuxr7ObBR
 4xsC8ZEGKzvBnkWGn5/X/gjE49NFV2LYU+0+al2C/LxKREzHo0dU2Doe1hdHtZYb
 zcs+/Oej/IOOBpHyGSwrkv4u1Y8fblggsTVPWWiAQVyZyDVqju6JfPrYvSPuQ==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:content-type:date:from:in-reply-to
 :message-id:mime-version:references:subject:to:x-me-proxy
 :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=cH+Zg5
 WHO9Biez4NnZSqjUOFnVBYsbA/EVaBW+rV5ww=; b=sn6HPv6e1BgORuEWlUttow
 TMuT+UEiHhyqKlobt2Z/2Sw5uxiLa7T3w/iRik0I3stFRvQyhoA7989EM5o0zIeb
 IZaZ58xBUI8+4uoXYB6Ama6vAerF68UVTt8LgR0RYg4YxCejZ54nvOKWKVH6hHSq
 lKTG65rYWDLabTnWzqtRxbUQNHcSzWOF9QQz9yDpdUJu/CJxuZ6F/pA0mVHZCoOR
 e0oraeS43TrZ1eL6rcx07RC5aOdO2NofAkX34uNKTYL5w8kec4mM1i4RJy+prA7U
 FMkMm8Bxlnx9RlPL4rFVynnorLtvZbGGIGpZL/Sxr9Hp+EFQsiK0VDRATNZk1OYQ
 ==
X-ME-Sender: <xms:pAlqX6vyB1_jPFU_bh12MKJoQPIq3E3p6TZ9UUDASHuAQ3iU-v4bZg>
 <xme:pAlqX_cQAuKkHc2TbFq95YnTWH3CYB0Gdh7Se5UqscvtIX0niQ18BADphrcoaC0JV
 IxvDFW2qxtoQH83sg>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeggdejjecutefuodetggdotefrodftvf
 curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
 uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
 fjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomheplfhoshhtvghi
 nhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnihhgsh
 gvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepfefhlefhvdevleefudelvdelveekteeu
 jeegudevgfefgeefieektdelteeuveelnecuffhomhgrihhnpegrshhprdhnvghtpdhnih
 hgshgvnhdrnhhonecukfhppeekgedrvdduuddrfedvrddufeejnecuvehluhhsthgvrhfu
 ihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepjhhoshhtvghinhesshgvtghurh
 gvrdhkjhhonhhighhsvghnrdhnvght
X-ME-Proxy: <xmx:pAlqX1x7M-NsfvgPpAsSVEg8NxvH7YSTo8z8N-Dfqow-E8gbkUjCKg>
 <xmx:pAlqX1Oac8PSn4ZSjX5skfY4lapLtMWePk8FphGSqTBoyB5So_esUQ>
 <xmx:pAlqX68Lp496wL4H3hvfxtkNW5lS8KtvhHt7AyZ0Z7HMN_PMpRw2Tw>
 <xmx:pAlqX_En2mOqaDt7AH3Al78hnXesk4A357KoX0oSxbhyZsjifiPTeg>
Received: from [192.168.1.132] (cm-84.211.32.137.getinternet.no
 [84.211.32.137])
 by mail.messagingengine.com (Postfix) with ESMTPA id 8AC19328005D;
 Tue, 22 Sep 2020 10:26:43 -0400 (EDT)
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
To: Theodor Thornhill <theo@HIDDEN>, bug-gnu-emacs@HIDDEN
References: <87zh5iyu4d.fsf@HIDDEN>
 <ab7fd8f4-77f3-dbb2-f1a3-d0ac71fc7b44@HIDDEN>
 <87wo0myn2l.fsf@HIDDEN>
From: =?UTF-8?Q?Jostein_Kj=c3=b8nigsen?= <jostein@HIDDEN>
Message-ID: <8081dcbd-1e89-c9e6-d691-1270df8f9f19@HIDDEN>
Date: Tue, 22 Sep 2020 16:26:41 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.12.0
MIME-Version: 1.0
In-Reply-To: <87wo0myn2l.fsf@HIDDEN>
Content-Type: multipart/alternative;
 boundary="------------B15B73055A3E6BA9F2756D5E"
Content-Language: en-GB
Received-SPF: pass client-ip=66.111.4.27;
 envelope-from=jostein@HIDDEN; helo=out3-smtp.messagingengine.com
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/22 10:26:44
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x [generic] [fuzzy]
X-Spam_score_int: -26
X-Spam_score: -2.7
X-Spam_bar: --
X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, NICE_REPLY_A=-0.001,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Debbugs-Envelope-To: submit
Cc: acm@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>

This is a multi-part message in MIME format.
--------------B15B73055A3E6BA9F2756D5E
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

On 22.09.2020 15:10, Theodor Thornhill wrote:
> Jostein KjĂžnigsen <jostein@HIDDEN> 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@HIDDEN đŸ” jostein@HIDDEN
https://jostein.kjĂžnigsen.no

--------------B15B73055A3E6BA9F2756D5E
Content-Type: multipart/related;
 boundary="------------DBD2136C4585F665CD2A9856"


--------------DBD2136C4585F665CD2A9856
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <div class="moz-cite-prefix">On 22.09.2020 15:10, Theodor Thornhill
      wrote:<br>
    </div>
    <blockquote type="cite" cite="mid:87wo0myn2l.fsf@HIDDEN">
      <pre class="moz-quote-pre" wrap="">Jostein KjĂžnigsen <a class="moz-txt-link-rfc2396E" href="mailto:jostein@HIDDEN">&lt;jostein@HIDDEN&gt;</a> writes:

</pre>
      <blockquote type="cite">
        <pre class="moz-quote-pre" wrap="">Hey Theo.

Thanks for your work on trying to get something new, and possibly better 
C#-support mainlined in Emacs!
</pre>
      </blockquote>
      <pre class="moz-quote-pre" wrap="">My pleasure - hopefully we'll get there :)

[...]

</pre>
    </blockquote>
    <p>Hey Theo.<br>
    </p>
    <p>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.</p>
    <p>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 <i>very good</i> start. <br>
    </p>
    <p>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.</p>
    <p>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.<br>
    </p>
    <p>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 :)<br>
    </p>
    <p>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.</p>
    <p>Roughly it boils down to this list:<br>
    </p>
    <p>1. Attributes</p>
    <p>2. Object initializers</p>
    <p>3. Lambda indentation<br>
    </p>
    <p>4. Misc variables/field fontification issues<br>
    </p>
    <p><br>
    </p>
    <p><b>First off: </b><b>Attributes are not handled properly. </b><b><br>
      </b></p>
    In java-mode annotations gets fontified and indented properly:<br>
    <p><img src="cid:part1.8C8ED712.4CD5CDC0@HIDDEN"
        alt=""></p>
    <p>In your current csharp-mode draft, we get no fontification, and
      we also get a trailing indentation bug for the equivalent C# code:</p>
    <p><img src="cid:part2.9EC49499.21B3E15D@HIDDEN"
        alt=""></p>
    <p>For annotation-heavy frameworks like ASP.Net Core this might get
      annoying. It would be great if this could get fixed.<br>
    </p>
    <p><br>
    </p>
    <p><b>Second: Object initializers are not indented properly.</b></p>
    <p>Consider the following fairly simple case. Using the provided
      patch we get the following indentation:<br>
    </p>
    <p><img src="cid:part3.05A697A7.EF9F39EF@HIDDEN"
        alt=""></p>
    <p>According to C# convention, one would expect something more like
      this:</p>
    <p><img src="cid:part4.6CAF04F3.E3A84561@HIDDEN"
        alt=""></p>
    <p>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.)</p>
    <p>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?<br>
    </p>
    <p>One the bright side <i>collection-</i>initializers seems to work
      just fine :)<br>
    </p>
    <p><img src="cid:part5.AA1FF9DD.4146FEFE@HIDDEN"
        alt=""></p>
    <p><br>
    </p>
    <p><b>Third: Lamda-function indentation when used with higher order
        functions<br>
      </b></p>
    <p>Lambdas also suffer from some unexpected indentation issues:</p>
    <p><img src="cid:part6.D881D709.A9E8D4B0@HIDDEN"
        alt=""></p>
    <p>Here I would expect the following indentation instead:</p>
    <p><img src="cid:part7.054507AE.DED82DA5@HIDDEN"
        alt=""></p>
    <p><br>
    </p>
    <p><b>Fourth: variable-fontification</b></p>
    <p>Here I have no absolute C# convention to quote for absolute
      correctness, but it kinda "feels wrong" to me at places.<br>
    </p>
    <p>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.<br>
    </p>
    <p>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. <br>
    </p>
    Right now though, all implicitly typed variables (vars), local
    variables with method-access and local fields with property-access
    are shown using <i>font-lock-constant-face</i> and that seems a bit
    off:
    <p><img src="cid:part8.87AC3086.43D344F6@HIDDEN"
        alt=""></p>
    <p>For var-heavy functions, this inconsistency is somewhat
      distracting, and I would much prefer a font-lock-variable-face
      fallback in these cases.</p>
    <p>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.<br>
    </p>
    <p>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).</p>
    <p>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).</p>
    <p>I'm sure just<i> discussing</i> the<i> </i><i>soft-rules</i> for
      these aspects could take months alone, not speaking for the effort
      required to actually making it happen in code.</p>
    <p>Consider it something to aim for, but I wouldn't expect anyone to
      get this right in a version 1 of anything.</p>
    <p><br>
    </p>
    <p>Otherwise, great work, and thank you for putting in this effort!<br>
    </p>
    -- <br>
    <div class="moz-signature">Kind regards<br>
      <b>Jostein KjĂžnigsen</b><br>
      <br>
      <a class="moz-txt-link-abbreviated" href="mailto:jostein@HIDDEN">jostein@HIDDEN</a> đŸ” <a class="moz-txt-link-abbreviated" href="mailto:jostein@HIDDEN">jostein@HIDDEN</a><br>
      <a href="https://jostein.kjĂžnigsen.no">https://jostein.kjĂžnigsen.no</a></div>
  </body>
</html>

--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="nhebmpbbonkfichd.png"
Content-Transfer-Encoding: base64
Content-ID: <part1.8C8ED712.4CD5CDC0@HIDDEN>
Content-Disposition: inline;
 filename="nhebmpbbonkfichd.png"

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
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="epihfhegglofbbha.png"
Content-Transfer-Encoding: base64
Content-ID: <part2.9EC49499.21B3E15D@HIDDEN>
Content-Disposition: inline;
 filename="epihfhegglofbbha.png"

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
F0JkwXQhRBZMF0JkwXQhRBZMF0JkwXQhRBZMF0JkwXQhRBZMF0JkwXQhRBZMF0JkwXQhRBZM
F0JkwXQhRBZMF0JkwXQhRBZMF0JkwXQhRBZMF0JkwXQhRBZMF0JkoeweKP7+/j8c+f6556YN
sLVNSUnR6fD2k6i3ofIOQ0d/PFpeVrZsWVRWZlZhId5hCPU2VPYMVSrVuXPntVqdo5Mjhc1A
iCQUX3dptVqNRs1iUnmDWYRIQv2oBl5xod6K+nTJ5XI+n091KxAyPurTlZaWFjgu0MXFBe8w
hHoZ6u+B0t+y/+c7dzo4OlRXV8+cMYvaxiBkRNQPJ6xauRIAXl60uKCggOq2IGRM1PcMfXx9
Lly4kJ+fj8MbqJehPl0cDqe+vp7qViBkfNSnCwczUG9FcbrodDqDwVSp1dQ2AyEyUDmqwWQx
A8eOpdNphQX4JUPUC1GWLn9//63bttbUVMfFxScnJ1PVDITIQ/3nXQj1VtSPaiDUW2G6ECIL
pgshsjDGBgbiDHyEyMAQS2pxBj5CZKADzsBHiBwN1104Ax8ho2sc1cArLoSMqzFdOAMfIeNq
TBfOwEfIuBq/CYUz8BEyrsZhDJyBj5BxNfYMcQY+QsbVmC6cgY+QcTWmCwczEDKuhnThDHyE
jI4JOAMfIXIwcQY+QiTBmf8IkQVnTyJEFkwXQmTBdCFEFkwXQmTBdCFEFkwXQmTBdCFEFkwX
QmTBdCFEFkwXQmTBdCFEFkwXQmTBdCFElv8HPBcE9QuEgqIAAAAASUVORK5CYII=
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="hfhhbebmljemcgca.png"
Content-Transfer-Encoding: base64
Content-ID: <part3.05A697A7.EF9F39EF@HIDDEN>
Content-Disposition: inline;
 filename="hfhhbebmljemcgca.png"

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
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="fiaafecacbkbgbkh.png"
Content-Transfer-Encoding: base64
Content-ID: <part4.6CAF04F3.E3A84561@HIDDEN>
Content-Disposition: inline;
 filename="fiaafecacbkbgbkh.png"

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
P6AWRV64ZlHjAAAAAElFTkSuQmCC
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="aceilhdglgpjgcad.png"
Content-Transfer-Encoding: base64
Content-ID: <part5.AA1FF9DD.4146FEFE@HIDDEN>
Content-Disposition: inline;
 filename="aceilhdglgpjgcad.png"

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
ZggEgsX/A1LkfRUsVzjTAAAAAElFTkSuQmCC
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="mehgknkpcccjilmm.png"
Content-Transfer-Encoding: base64
Content-ID: <part6.D881D709.A9E8D4B0@HIDDEN>
Content-Disposition: inline;
 filename="mehgknkpcccjilmm.png"

iVBORw0KGgoAAAANSUhEUgAAATYAAABWCAIAAADKXS0QAAAABmJLR0QA/wD/AP+gvaeTAAAZ
kUlEQVR4nO2dd1xTVxvHz82ABDJA2RhZDbhYgq9SBzgBq/iKWAUXDpx9VdzbaocDq3VhrXVW
KxWwFrSAWqioFVDZMpWN7DBDErLePy6NEJKQABltz/fDH/fec55zHpI895x7xu8iZD19AAAA
gKCtDSAQiIaBUbcDEAhEFjBEIRCNBqduB7rhRqasMDQx09LCIcihitI/W1vU7ZHa8PLy2rlr
BwCAyWTO+mR21yQ3N7evj3yFHk+bOp3P5ytauKWl5ebgTXQ6ncVi+c2bL6fViBEjvL29pkyZ
oqOr478woLq6Wk5DY2PjBQsXjBnjamhgWFVdFR19/94v9wQCgTy2ZArZx8dnypTJ5mbmdXV1
j3//PSwsjMPmyGPr4uJyPORYY2NjYuLTc2fPyVmjpqFBIYpFkJ1mtN+aGFeKq3lCobrd0Qhm
z/Jpa2sTu/jixYvJHlPmzv3vxk0b+1bsqqCVRkZGq1YGyR9mFArls/9tiImJrW9oCAxcplB1
W7dt0dPTCzkeUlBQ6OzsfODgfksLi5MnT8lj6+vry+PxDh/6orqmepjdsM8/P0inf7Rv7355
bF+/fu3l6T1p0sR9+/elJKckJSUp5LaGoEEdXQMcnojBZDKZMD6VDY1Ge5P9pqqqSij3R93S
0rJ+3YboqGhmj1tGr7x+9fp/n23MzMxis9kvXrx4cP/BJ7NmUSgUeWyvX7t+6+at0tJSDpuT
kZHx66+/jh8/Xk9PT86quVxuQsIfAoGQNpSmqNsawodWVIeM23/DLeZ6ceK9CtHF4DMujBr2
9a/eAACwOMR1qsl/PE1MhupyOwRFWU0xN4rrKlmizCYWulvOuVw9nG05gjpmmjEA4Fn0+/g7
Zb06sWCw4QojE/T4EM2i86BLR9dZl7Tc0NiKQOQIBC/bWi/WVjXxeCJz2alKYrIfbXqAxY9H
cmYGWg82IdRWtEeeLywvaBVlMKbpeC+zsrbXw2KRd1lN9y6+ZVSzAQB7r45NTaiNuVEsVqC0
68oAh8N1dHSooCKUn3++0/W0rq4Og0EMDAxaWhR+kOnDzVsgEPD5PDxOgzqMCvGhFW1v5RWk
NTpMMBRdMTAjmlrppifWoqd0R31zG1L46YIDC5+f3pyKxWNWf+mAw4u3w1MXWAAATgennQ5O
I+riemboyc8NdZ65Wcvf5QMADpSXeOZmeeZmieKTTiB+RbPMY7EWF+ZtKy36iED8kmaJ/GUr
O1WpYHGYCT7mVw5lH1mV0sERBGwbhvxVsaE5cUOIE48rOLnh1dGgFHY7P+iwPRaLAABK8lqG
0EliRZH1tagG2iW5zSpxHAAAhH35tQ8MDo6OXC63qqpKISstLS1XVxdf37kPHz5qampSyFZG
Z8HKyirhj/iL33+nUIGqpNutJT2x1n/rMH0jQmMtGwDgONGwg83PSWlAU/NeM/JeM9Djxlp2
fHjZhuNO5jak0rxu90I2kxdzvbMpeHC1qP8uzh1k0MLnX6yt4guFzXzexdqqr2iWzrqkVGZb
r6kymDBhwhdfHu55nc1me3vNlMcxBAH3rxShn9XzqMpFO4frGXZ+dJ6LLTlsftipfF6HAABw
N7Rw/41xzh5Gr36vKc1tmR5ggSCg68+GRicDAErzWiXXNNCQyWQWi62ausRwcLB3cxv3671f
WSxW77n/4u4vkfr6+gCAx48eHz92XNFK2Ww2mUxW1EpD6Baib5IauB0Ch/EGT36pAAA4TjTM
SWngcjrHwRAEjJ9lPmaGyWATghYBi17UJmLFSsxOqh9YF+2IxFxWO/+vX3R2OxMAMIyogwah
7FQZPHv2bLLHlP44JhSCmrJ29LilsQMAQKLi0RClO+u/eVGPxicAgM3k1VeyzG1IaIgSdXGD
TYmMavaBm26pCTVRl94NoZPrKlntrdz++CMP2tra06dPI5PJ6Wnpyq6rJ1Qqdc/ePZWVlZcu
/aCQoe/cedoEbSdHx+07tu8/sO/zg4cUMk9PT3f3cI+Le1haWirWohYXF/fzZ6BsuoVoB5uf
m9LgMNHwyS8VRkN0TCx0Y2+UiFKnLhg6ef7QO9/mF6Q2spg8c2vSptOjEYx4p7KlYYAfcnQx
2NYu8wpsgYAnFJKwWHlSlQqfJxDwO79v9HtHPw0MBiHq4lynmbhOM+mav6GKBQCoLGrjcgQ0
OlmXiueweMNcB0Vdekejk0pylN7LdXFxOfFNCADg11+jnj9/ruzqxMDhcYe/OEwkErdt297e
3q6oOYfNSU5OCT1/Yf+BfY6OjhkZGfLbnjlz9ttTp65eu9LY2Og7d56iVasX8Wfo9Kd1S3eP
0DciOE40ZDF5+akMUZKTu9Hr32syntahp1QDyQsG+fwBfshhCvjkLiFHwGBwCNL2V1jKTpVB
/zu60hAIhGwmLym26rdrEsZ+BHxheWHrEDrZiKaTFFPlOs3EwIw4hE6OkZR5YEEnIdw93Hfv
3pWSnPznny+UXWNXduzYbmdnu3XL1oryit5zS6GoqAgAYGExVKEQ3bRxIwBg2dLA8vLyPlet
LsRDNO8Vg93Od5xo6DDRMOt5PZ/3Id60CNgO9oef/ii3wapxsYDFctYlYREE7c2O0tEFAOSz
2uVJlUH/O7oyeJvRZOOgJ/bAKaI0t8V6FBWLx/x8Kk+HjP94lpkuBV+Sp4p1GhwO52Hcw3Vr
1zqPHq3KEF2+PHDq1Kn79+1/8yanP+VYW1sDAOrqFHuYcnRyjI6KLivrfXJBAxEfbuV1CN4k
1U/wMTem6YgaTJT8VwxnDyNzGxJRF/fxJ2YjxqooRH9prKfisGuMTKlYnKU2YY2R6Vs2K43J
lCdVXcTdLDGm6fhuoA8yIWgRsDQ62XcD3X68AZpaktts/hFJh4SrKWvPSWkY52na3sqrq1C4
79dn2lntRCJhwIulUqkJf8SHR9wRu+7l5bVk6ZITISdk3BSk2R47ftRjsoehoSGRSBw79j/r
1q8telf08uVLhRwjEAjSutbS6tUcJEwWpSfWuUwxbmvqeJfZbWj7wdUiLB4T9IU9Do8pym6+
821B4P6RKnCxgMXaX1a6zND4Fn0YRyB4yWy9WFMl+GvOQHaquqgpbz+7Nc1zkeXGk6PxWpjq
MuarxzW5KZ1PDaV5LVgcJvdlAwCgNLeFw+aXF7SqeL0GAhSemQqPuGNg0HmXuR32EwDgzs93
Llz4MF2BPor3XJDoN38egiA7du7YsXOH6OLOHbtSUlJ6tf3h0uX5n/qtXh00aNCgutq6x49/
v3XzFk/BeW8EkfrPSqtXc5AQovmvGTtmJ/a8zm7n3/k2v+sVsWzVpUyJhnLyvqPDMzdLYtIr
ZusrptQJCdmpSiIhojwh4sODTUlOs9j/XlPWfuOI5E5deytvp09nZoFAeGiRSp8JAQA8Hg+v
hVfUar7fp7IzWFlZAQAS4hPErq9aGdRr4dJsCwsLv/7qiAJe9gCDwWCxOK6UqJZWr+bwd11y
8S8h+n6U7GX0faOivGLUyFHGxsa1tbXyrwHsFXt7ey6XGx4eoWJbGeDwOPdJkzAYRNoYlZLq
HUBgiGoosbGxsbGxEpPQZfT9Kfzy5SubgzddvXaFxWLN8/XrT1Fdsbe3j42JZTAYvWcdUFtp
uLi4HA853tTUGBUVnZycrLJ6BxYEqi5AIJqMBu10gUAgPYEhCoFoNDBEIRCNRvJwkeoFSlxc
XJYuXWJtY83hcDIzMm+HhRUWFMpj+O3pU46OjuixutZD79i5g0ggHDokYTnht6dPtbW1yakS
oDL6JowCUQsSWlFUoOQls3VO/puu+zaVx6RJk0JOHE9KTl4UsHh10Jrm5uajR+WdCtu8KXiy
x5Tz584rybe9e/fI3kxIt6V7es64evWakhxQBiJhlF6nOiFqR0IrqnqBkgULP01NTb390230
9PTpM6V/n+WUAf7+GRmZ0tZ/bt4UrGJ/5EEkjKJuRyC90y1E1SVQoq+v/77yfdcr93651/XU
wtJidVCQk5MTFotNT08/feZM1Xt5f1692s72mT1njg+NRmtoaIiPT7hx/QYqGvLwURwe37kE
J+GP+M7M3fW+qFTqhIkTvj11ume9IpPnz58PVEd37Lix3t5e0VH3U1NT+7PkQMXCKJD+0K2j
qy6BkoKCgrHjxtrY2EhMHUIbcv78uQ4ud/nyFQEBi5jtzBMnQnDySdH0art23dr169dFRkT6
+c3fvDmYwWCMHNW58HjGdM/JHlMeP3pcUFAw2WMK+iemx+c82hmHw2VkStgYheZXaM9Ur1RX
VQ8ePPjENyE3fry+YMGnVCq1z0WpURgFohAKrC5SkkAJACA09MKXX35x6Yfvc97kZGVnJz5J
zM3NFaWuXLmSxWId+foIeuM/+c2pyLsR06ZNk7b4piuybY2NjefPn3/l8uWYmFgAQGtL693I
u/J/IAAAOzu7jo6O/myAFEP2LtbS0tL/fbaRRqPN/GTmgoULVq5amfgkMSo6OjMjU6Fa1CiM
AlEUBUJUSQIlAIDamto1q9c6ODiM+c+Y0aOdFy5c8OjRoyNfH0X7cq6uLk+fPhN1zJhMZkVF
Bd2WLk+IyrZ1dnbGYJBn/dAfGKSv39oykCv45dnFWl5efvG7iz9c+sHNzc17pvepUyffvXu3
OmiNPOWrVxgF0gcUCFGlCpQIhcKMjAy0W4gKsT9/9ueTJ08wGAyJRPL29vL29uqaX+zZVSK9
2lKoFABAI6NRTiclgCDq6jEKhUIuj8vldgj48oqsq1cYBdI3FAhRJQmU9CQuLi54y2Y7O9sn
T54IBAImkxkdFX3x4veKltOrbUtzCwBg0KBBfRB0RWEwGFQqFUGQgdovIo9cy9ChQ728PGd4
zqBQKImJT7dt2y7nE696hVEgfUOBEFWSQAkAwD/APzw8nMftHP4lkUh4PJ751zb51NepTs7O
ssOgta0NAKCjoyO2uV62bXp6ukAgnDhxQklJibSSWSyWtpbUDQb5+fl4PH7IkCEDJYoju6Nr
YWmxffv2kSNHVFZWRoRHxMTENjcrJkqmLmEUSJ9RYAFg/wVKpMkKf/yx29mzZ+3t7bW0tGg0
2t69e9hsdvzvnZMWl69csbAYumXrFlMzUwKBMGyY3ZYtwe7u7l1LyM7K5vP5PnN8sN271rJt
q6urIyMjFy1a5D3Tm0whGxoazpnj4zzauWsJ74qKhtCGODg6YDASPqu01DQej+fg4CD/x9gf
TE1MGxrqt2/bvmTx0rCwnxWNTxFKEkaBKAMJm9HMtLSu2tgdKC9JbhMfCHHVJS8zNLYiEEQS
JI1dZj5lpwIArKysrly9XFBQsGb12q7XTU1N/fzmuY5xNTExaWpqysnJvXH9RnHxB0U8S0vL
FSuWOzk5aWlpFZeUxMbE/PZbDJfbTXV2hueMwMBlJiYmCIL8d85c0c9Xti2CID5zfHx8ZqPz
onGxcbdu/dS1ZDweHxy8eZzbOD09PQRBer4H6cCB/Xr6+luCt3S9uH37tpmfiMsI3v7p9vff
X+rxFaiBWz/dTE9LDwk5oW5HIL0D94v2F7ot/bvvLqxYvrK0tFTdvsjL9RvX8vPz+yk4AlEN
cKdLfyksKIyLexi4PFDdjiiASBhFhu4WREOArei/EWtr683Bmz766KOBFUaBKAMYohCIRgM7
uhCIRgNDFALRaGCIQiAaDdTR/WcSYmHN5PM/r5B3HmjXrp2eXp4Sk7Zt3f769eteS+iztI2c
KFViRqK0DYVCuX37p3379qWpdcsBbEX7hf/WYRtPjVa3FwPA0aPHRHtiuVxuXGyc6FSe+JRH
2qZXiRl1IU3apqWlJSIi4rPPPlPv1BRsRf+ZbC8tUmV1KpC2UZ7EjAxpm+jo+4uXLBk3btyL
F2pbz/xvD1ETC90t51yuHs62HEEdM80YAPAs+n38nc5vy5im473MytpeD4tF3mU13bv4llHd
uRP667sTcPjOPsjx6EnowcGFf7KYPADAZD/a9ACLPb7P0OuWI6jrjzme25Zelt/Sa72o7Y9H
cmYGWg82IdRWtEeeLywvkHdXatxwe/TgRWuL/B1deXBxcVm1aqW1jTWHzUlOTj4fGtrU2Pnu
PNnSNr1KzKArQ/fs3jvKfhS6czAy8u6tm7fETHpKzAQE+AcuDzx44PPVa4LMzMzKysq++eZk
Xm6eKMOMGdMDAwMNDA0KCwufP3setDpo8aIllZWVogwypG0AAPX19VlZmbNmz1JjiMKOLgAA
TF1gAQA4HZx2OjiNqItDY8/QnLghxInHFZzc8OpoUAq7nR902B6L7ezz7PF9tmN2YtoftRVv
23bMTkT/0PjsZ70AACwOM8HH/Mqh7COrUjo4goBtw+TvaqFyNpntA/yGVVtb22PHj+bk5n46
f8GmTZvpdPqxY0dFPUDZ0jbySMwAAJYsXQwAWLN67ZrVa9HdTuh12RIzWCxunp/v7l17/BcG
sNnsffv2irxycHTYtXtXVHT0PF+/WzdvLV6yuKe5DGkblKzMrNGjnbGSdj5L2xYysMAQBQAA
NpMXc724uZ7TXM95cLWIxxUAADwXW3LY/LBT+U31nNbGjruhhZTB2s4eRsquFwCAIOD+laLG
WnZrY8fzqMrBpkQ9QzVvTPGbP6+5uTn0fGhzc3NxcXFo6AVbW1sXl87n8NDQC9XV1Zd++P7c
ubNr1q4ZPnx4H6poa2u79P2lurq6urq6i99dFNsmIQ0MBrkQ+l11dTWDwYiMvGtubm5k1Pkd
Bfj7vy18G3Y7rLW19c8/X8THx/c071Xa5t27dwQCwcLCog//0YAAQxQAALKTJLyYne6sX5jW
yOvoDBs2k1dfyTK3ISm7XgCAUAhqyjo3vrY0dgAASFSFXwc6sAwfNjwnJ0f0qtzMzEwAgCgU
UWmb4M1b0jMyHB0dQi+c37N3t6KjLM+ePuuDYwKBULTdl9HQAADQ19dDT+3s7LKys0U537yR
8LrXXqVt0C1Tgwbp90wqLi6e7DFFbNvWgPNvfxZFaWkQV6zEYBCiLs51monrNJOu1xuqWEqt
F4XPEwj4nXvQ0b3o6Muk1YguSbfrT5nNZvN4PBLpww1LmrSN/FXU10u+YcmGz+eJbhzoZ4XB
YAEACIJQ9ahtrR987nr8gV6lbRBEVLJagCEKAAB8vvg3IBAI2UxeUmzVb9eKJZrIRijs9vJ2
LW3JvZWe9WoszDYmmUIWnRIIBBwO1/N5EqWrtI38VfB4A/k2e6FQ2NzUTKZQRFe6HovoVdqG
SqEAABob+yFw1T9gR1cqbzOabBz0ZHfWOGw+XlL4tTV1YHEIkdR5BzS10lWGh6okLy9vxIgR
olETVGgiN69z7NQ/wB+H/3C7F5O2QZEtMaMM8vPzR40cKTodOWKExDyotI20QmxsbNhstho3
A8MQlUrczRJjmo7vBvogE4IWAUujk3030O3HG3TNU1XMNDQjWo+iYrp3RIveNAsEwimfDtUm
Yi2GU9xmmqnWd1n0bRwyMjJST09v/Yb1VCrVyspq/fp1hYWFqa9T0VTZ0jYosiVmlEFY2M90
W/pC/4UkEsnNzW2S+6SeeXqVtnFwdExNTeNLEsqjUqkJf8SHR9wZSKd7ADu6Uqkpbz+7Nc1z
keXGk6PxWpjqMuarxzW5Kd3euP7yUfWQj0iLdw7XpWohyId5UUY1+5fQt1MXDB3/iVlJbsvj
sLJPN9mqwOdg0yFeeh8GNtA50jsNdZdrq/tZcl5e/q6du1esXBEecYfD4SQnJZ8/HyoQdI6l
ff3VET+/edu2bxVJ22xY/5nYO2N+e/Cbna3t558flCYxIxExiRl0jlROiZn09PRjR48vC1y6
YsXygvyCmz/eXLtuLZfXbaC4ubn5aeLTqdOmPnjwoGcJRkZGo0aN2rd3n8Ty0QECidE7gMD9
opB/C3Pn/nfd+nVent6iOwuKDGmbFStXjB//8aqVQRKfVJ1HO588+U3Y7bA+KMjKD+zoQv6x
6OrqHjx4YNjwYdoEbTs7u/nz58fExIrFJ5AubUOhUObN8z139py0kSR7e3sulxseHqEM50XA
VhTyT8bd3d0/YKGlhWUDoyEhPuHHH29yOJyBKjzkREjV+/cnT54aqAIlAkMUAtFoYEcXAtFo
YIhCIBoNDFEIRKPRiBB1cXH5Pf5xRGT4xk0bJc5rUyiUBw/uOzs7qd43CES9YLUJRPRIzlfT
K4OqqqrbP92uq61ds2Z1Xm5eRYX4ziAOh6OtreXn5xcdHa0WDyEQdaERrSgAgMvlJiT8IRAI
aUNpEjNER9+3tLIaN26cih2DQNSLpoQoAEAgEPD5PLyUxlwkUaFiryAQ9aJBIQoAkP2ua7VL
VEAgqkezQpTNZpPJZGmpapeogEBUj2btdElPT3f3cI+Le1haWtqzRRVJVBT1EKBEJSpU4yQE
oko0qxU9c+Ysn8e/eu1K5F1JS5PVLVEBgagezWpFN23cCABYtjSwvLy8Z6raJSogENWjWa2o
o5PjkydPysrKJI4bqV2iAgJRPZoVogQCob274E1X1C5RAYGoHs0KURnKq6hExf3o+5INVSJR
AYGoHg0KUQwGg8XiuDzJ71yYNXtWSUlxUlKSxFQrKysAQEJ8ghL9g0DUgaaEKA6PmzzZA4NB
JEr3a4hEBQSiejRiRNfFxeV4yPGmpsaoqOjk5OSeGVpaWj6ZKWvpn729fWxMLIPBkJEHAvk7
AoVRIBCNRlM6uhAIRCIwRCEQjQaGKASi0cAQhUA0GhiiEIhGA0MUAtFoYIhCIBoNDFEIRKOB
IQqBaDQwRCEQjeb/q1kgHwUtS5IAAAAASUVORK5CYII=
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="jognflfdjkamkonl.png"
Content-Transfer-Encoding: base64
Content-ID: <part7.054507AE.DED82DA5@HIDDEN>
Content-Disposition: inline;
 filename="jognflfdjkamkonl.png"

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
--------------DBD2136C4585F665CD2A9856
Content-Type: image/png;
 name="igcegelpjofikpgg.png"
Content-Transfer-Encoding: base64
Content-ID: <part8.87AC3086.43D344F6@HIDDEN>
Content-Disposition: inline;
 filename="igcegelpjofikpgg.png"

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
hMfnrV+/TtWpunnzJnYwOSlJKBLt2L6jobHBi+u1+dVXdu3a+eSap0ymB5JIrn36qfz8guef
ewEAsGLlChKJZD8hMSkRRdHCogF2qCYSiX7+fo19NmNyWrNIJNq+Y9uPP555++13uFzu3//+
t+3bt73w/It2FzqdTl+wYP6rm18zGAxvvf3W9u3b1q59utdGE8VFxY//6XEikdh3AwqsM1FZ
WYldFxLMNCfxDDvyOEOQ9geKopER4VczMs1m85TJk2bNmvnjmbPYsNjXx4fL5WTn5HSqVDQa
bWJy8pzZs348e67XoDkmOrqlpRVzgYaLRAQCoe+o2ofPs1qtvd7a/VFSWlZSWsZkMh5dsuRa
VpZE0uQo5XK5s2fOrKyqyryeRaNS01JTZ82YfumnK/ZfHYIgEaLwzOtZVotlWlpaakrK2fPn
MenR4ycArs/2yNFjAIB5zjIDDacsi8lcMG+eVNp87sJFm9WanJQ0Z9bMs+cvdLWzr8+UyZPu
5uXXisU+PvzUlBRXWgkD/xmRyeRZM2bUisXXb9xEEMTPzzcsLKz4nksJxfF1vnUre9HCRxIT
4u/czSOTyVNTUurv38fMOQaJRAoVhPx89arFbJkyZfKsGTPOnOt6Cvg1AwCSEhOE48ffuXu3
oVFCQtHAwEBed3pA/KfgvnZ2N8697of2zLx1Yfmpf82nUdGTZ2ouXu0aD+kM5iOnqtJfvTZn
5dmlay9W1SoRBMxM7Z1Lh8kgfbavcPGaCymLfnB9gA4QpGbvCW1Di6FNUbXrCIXH4c/vcqLK
s4srP/uPplZiNZn1ze33/3OBwucwwnsnazGrtLX7TxtaFYZWRc2+k33NOTte5DU1Tno2y6Ib
uIOflpaWeS2j77+Lly64ekf9s5zr3WmxHGiVKi3mOoP+QKtUSKUlejBckQ4IlqklI/Pq8ePH
RELRlq1b22VdY4ucnNu7d+0Wi8Vmk7mlpeXIke95PJ5IJOxVg1qtPvjNwba2tra2tgP7Dzja
+/DwcKPR2NdUO8LhcDZvfoXL5f744xlXan78TyuVSuW+vfuUSqVYLN6372uRSJScnGQvhSDI
3r37JBKJTCb7Ys8Xfv5+06dP71VzTU0NlUoNHky+qT8sy8PUjWr0Tovzbje+FIe8/IJOlUqr
092+c5dOowlCup5Fk1R6O/dOh1KJZbsvKS2l0+lcLrdXcZPRWFBYqNVqtVptfkFBX3PO5/EC
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
SV/6ewrua2d3gxcZd/HY4gWzggAAWdlSi8VWd18ladYAAF57Pi7j9NLdH07V6Ucgq50jYS89
QQv0oXh7jn91taFV3vpz16C8PbvYZ/4UpigYZdADVsz2SktwvU7fRakh65ZWbP/f9l9GZvpt
RPhBIWOjxOf5fmwiGkKhPs/3q9br8run6PClGAKBIPNaxoFv9uNcxZPjuW7dM0FBQWfOnsWO
3M65PXfeXKFIyGAwli1flpo6dbCa5+flm81mzOiOFKdPn/b09Nz00iY2my0QCDZterGqqirv
bp79BJvN9tJLmwICAry9vV955S/Nzc3Xr/fejS4uPj4vL99ppkU2m515LePkqRMjqPPvEQ+S
dd447fk6D6PFifcYX+oKSYkJTCaTRqNNTE7SarX2ucamJmlISAiXwyGTySKhMDDAiWOvP0IF
gtiY6JzbtyWSEV4jVF5RQaVQkpMSKRSKJ5udlJioUChcjJzC6OhQslhMPp/XdwbBTWULi4vY
bNbkSROx2W4vLnfSxAn2SLGysnIvL69wkYhEIgUFBYYMJkoU/xkFBARMmjiBy+WiRCKbxQoJ
CW5uaXHRS4evc2BgQLhImHM7V6fTVVVXSyRNqVNTeo16kxMTmUwGnUabkJyk0Wjud48l8GvW
aDQVlZXR0VFhoaFkMplOpwuF4x0jH0H/T8F97exu8DqJRqOluVV3I1v6r6PlAACT2frGP25t
fi4uJoKrN5iP/VA9LoC5dMGI3YxFb5Ceu5Hw5RskT2ZnSW3RX3fbg9Vr954koGjc7tcJZFJH
QUX5x4dit7/iYrWBT8wDCBLxzvqId9bbDxb9dbc8x9VYTXdQqdNtvV//DM/niDDCYLXmalQH
WqTW7vkKfOmAYLHuAAC9Xi8Wiz/+6JMrV65goq/370dJ6GeffUoikYoKi7Zv2/7Rxx8NSnOl
Unkj68acuXPOnz8/qII4lJdXvP3WO+kb0k+eOmEwGHKyc/bu3ec4eabVaq/8dGXPns9ZbFZJ
Sclbb77dK9qZz+fHxMRseW+L0/qx6c8RSav8u2ZhsNZmA5frnTu98aUDYjabq2tq586ZTaVQ
ZLL2jGvX7U8wr6CAQCDMnjWTSCS2trbeyrltXx0+IBER4QCAKZMnT5k82X4w89r1Jql0aHra
aZfLM69nxcfGrlj2mNlsbpJK7+blD2ouqbqmhsvlTEtNxWZ27auZp0yaFBbWEyqFLXcuLS3L
d4jpG1pZpbLz0k9X4mNjFy6YTyASlR3KGnFtY3dfp7mlJTsnJyY6JikxQaHoKCktjYuNdfFe
8J+RVCql02iTJ05gsdlGg0HS1FRYVOxizTg60+n0lMmTa2rFdiOdffv24oWPTJk0Kat7wa3J
ZBLX1c+bM4dCobTJZI6/K/zWAADczctXqdQR4aJJEyfodLpasbim5oG42f6egvva2d3AbKqQ
QSMUCffv/zp9/YbRcXFjO8wsWbwU55z0DempqVM3bnC+C2xiUuKuXTuPHT124MA3blPztw6F
aPt6VtvVBtqRit7BrQNKIZCHArbDzIlTLq1OggCYew0yBKoqqy5f/mnd+nUPW5EuWCzWypUr
vvryq/4GWLGxsSaT6aQb8oj8jjBYkPSf+f0ZbHwpBAL5XTDEsA7IH5wd23c8bBV66OzsXLxo
Cc4JsbGxly5ekvdZGAOBQCBjCeh1h0AgEAhkLAC97hAIBAKBjAWgRYdAIBAIZCwALToEAoFA
IGOBByLjiETk5tll2GebDSiUhmqx8vDRioJ7I7lVk1OCn1kybu2iG3M3jXjNJJaH/7KZ/DmT
qAF8Q5ui9Up2w/eXHDeQdzcpTFY6z9efTEYRxDE/upv4ZNvHU6ZMAVieiY6O8vLyw4f/XVVZ
NbJXefOtN2lU6vvvO9klFx/81vg0OFRjsfyjcRCL4j4NDo2je2CfF5QNsEZ2MoP5QVDI+pqK
Jhe2Yl616okXXuzKvqrqVN1vaDhx/ERWVu+dbdwBi8U6evT7LVu25OcXuO8qiTzDuxMUb/3q
VaskDVY6NAIDAxLi45kMBoFAcMxTjjFvzmyj0dQ3IzgO8+bM5vP52GcsCSkOAQH+M6dPP3Pu
nErlUsYjV3R2H/itMeIt2YuhtdWYYVC/q98U/ca6IwjgelImJfITY7zXb86sqXOvHXIfAY/P
sZktJX/fb2huZ0YIoj58gSEcd++dr0bn6kQEecs/6EKH/JC42TxaWUQcc69t2vTirl0709dv
aGsbsZTwQpFwwYL569elD7agO1rjjfpaAMByrvcLPn4jUmEvsNwzXC533bpn3v/gHzu277h4
8ZI7LuRIZ2fnqVOnXn755Y0bna+wHxGWh2mKZOT+DDa+dAggCJKaklJVXVNQWNg3U+rQuHI1
AwAQER6enJQ4IhX2wh06Y+DkR3+IWrmP4dzv6OPu35X7cO51T998beriH1Y9d0XWrieRCLOn
BYyyWiNI3aEz9d+e19ZJLXpjR0FF0w/XvKclkjxHad2tN0qiEQhFGs2omXM7WO61b7/9D4PB
mDhp4gjWvGb16sLCovvdSR1cZ8DWeKO+dlAD9FFDLpfv2fOFXC5/bNljo3PFs2fPhQgEmLvF
HURwjJEc4w+1jCFIhwadTkdRtKW1tT8jdOVqxnCGle5gQJ3dB05r/B5bEjI69DtGt9nA/Ub1
vXL5zFR/LrtrVRuNSly1bPzMqf7jAhgIARHXdx45XXX1Rs+ue59/OHVyss+JH2s6lIYVi0O9
vagAgJRFP7iojc+ClNDnV5A4LFVpbeXO7zS1XTUTSKjPwqn+S6fTBQFWo6kjv0K8/5RjFjWP
0ICJ335Q/OYX7LjxvovSAACSUz/Xf+t0m9JRsqyrvHjpfF/s8/tBXXvlOvqZEz0Y63k+AirN
YLXmqlUHWqUdDjub4ktdh0QmAQBIpK6RFkpCH1mwYPGSJYKQEKPRWFBQ8M3Bg40NPS47gUBw
6PC/3n3nvZjYmIULHwEAnD793yPfHbGfwGaz06alfb57z6DUGLA1Lkd2baN4S9XZ16iPo1DS
eb7xHgwiAIVazb7mJqnJ1XmTBZ6c1d58Hkqq1euz1UN3NVksFmmTlO/Dtx/Bb6vk5OSNGzeE
hoUa9IacnJy9+/bZ88Vhu+AdOnR49eo/s1iskpLS3bt298p8I5PJiouLlixdcuvWrSHrjMPy
ME1VB+leu/O0UfjSwRIdFZkQH499tu8t6ugrxvY6BQA0Nkr6miI2m5UQH+/D5yMEQmtLS+7d
PMe8fPiEhYbGREfR6XSFokPSNIid4QfU2dfXJyEuztPT02KxNDVJ7+bn67tzzUVHRcbFxmbd
vJkYH89gMDo7O3Ny79hzwKxe9QSBQOh14/b9R/Fbw60tOeS2AgDweN4JcXEcDsdssUil0sLC
Intu3AHv15PNXrxo4bWsLJ43D0tgWlFZiWVgIxAIoQLB+LAwtifbarG0tLQWFBba8+/htzMA
QBASEhcbQ6fT5XJFo6QxIT7ecR5haL8rFEVXLFtWWVVZUFhkPzhz+nQPD/p593vvBgRvh5kA
P4+ocA4AoLSqK4fSvBlBzz8dZT8hUsT58O1JTc3XyqoeSGE5b0Ygx3PQS9uJFHLQqvmFmz+z
6I3hb6+L2/lazhNvY1u7eyZHMkXB5Z8c1jW0kL3YwtefjN/zRs6qt60PZkoOXrekI6/87sYP
AACBj88lkFDHEwhkEjteGLByTsvlW6aOEcvJ2B/H29uOt7f5k8mHw8L/1lCXo37gikIq7aOg
kHMK+daGeg6Kvhcw7p9BIX8RV9tckLoIgiA8Pm/9+nWqTtXN7k2Sk5OShCLRju07GhobvLhe
m199ZdeunU+uecpkeiCJ5Nqnn8rPL3j+uRcAACtWriCRSPYTEpMSURQtLBpc2hv81gDdU+Cf
Bof2LRtIpnweEnZXrX6uttJss73g4/fJOMHG2kpX3B6JHozX/QL3t0ivKBXxdI+3AoIGpbYj
RCLRz9/PsfeD4bStRCLR9h3bfvzxzNtvv8Plcv/+979t377thedftLvQ6XT6ggXzX938msFg
eOvtt7Zv37Z27dO9dp4vLip+/E+P21PSOYJ1JiorK7HrDpZgpjmJZ9iR5zwrMb50CJSUlpWU
ljGZjEeXLLmWlSWRNPU6AZuqnDfHSapDFpO5YN48qbT53IWLNqs1OSlpzqyZZ89fcGXQ7Ovr
M2XypLt5+bVisY8PPzUlZaR05nK5s2fOrKyqyryeRaNS01JTZ82YfumnK/bniyBIhCg883qW
1WKZlpaWmpJy9vx5THr0+AmA64XGaQ33teRw2opMJs+aMaNWLL5+4yaCIH5+vmFhYcX3uhJn
DHi/GDHR0S0trdgJ4SIRlkHV18eHy+Vk5+R0qlQ0Gm1icvKc2bN+PHvO/vRx2pnP501NmZJf
UFhdU8Pj8dKmPnBHQ/5dmc3m+vv1gpCQwqJi7EIUCsXPzze/wI0hL66Dl3vt1L/m06joyTM1
F692jR50BvORU1Xpr16bs/Ls0rUXq2qVCAJm9kmRzmSQPttXuHjNhZRFP7g+QAcIUrP3hLah
xdCmqNp1hMLj8Od3uRzl2cWVn/1HUyuxmsz65vb7/7lA4XMY4b2TxJhV2tr9pw2tCkOrombf
SUdzPvXM7ukZ++N3/1Wec6/840OuqJOWlpZ5LaPvv4uXLrh6R/2znOvdabEcaJUqLeY6g/5A
q1RIpSV6MFyRDgiWqSUj8+rx48dEQtGWrVvbZV391pyc27t37RaLxWaTuaWl5ciR73k8nkgk
7FWDWq0++M3Btra2tra2A/sPONr78PBwo9HY17C5j2d4Pjqr9dOmhjaTSWE2fyFt4pLQ2SxP
V8o+4cWr1Ol+kMvUFssvqs5r/edVxIfD4Wze/AqXy/3xxzO9RE7b6vE/rVQqlfv27lMqlWKx
eN++r0UiUXJyTxZgBEH27t0nkUhkMtkXe77w8/ebPn16r5pramqoVGqwGzI7LQ9TN6rROy3O
u9340lEmPi7OZDb/mp2t1Wp1en1Obi6NRnMx21VUZGR7u7y8osJoNDY0NNaNXBqCiHCR3mC4
m5dvMBg6lMq8/Hwul+uY1wtBkLz8fI1Go9PrKyormUxGf1nhRw38lhxOW3E8PUkkklhcZzQa
DQZDXV293Zy7jsloLCgs1Gq1Wq02v6AAs6xNUunt3DsdSqXVatVoNCWlpXQ6ncvl2kvhtHN0
ZKRcoSgtKzMajRKJpNcdDed3VVNTS6fTfbpD50KCxwEAxHW/ienCAXaBpVKIgf4Mby61uVUL
ACguladN8t2xdQqXQyEQutLP8bypvUpl3ZKePlfbuy4X6Czpyl+uk7SalGrG+O4RFQEJXDnH
d8k0mj+PSOt60aD03teV3cjvr+ZfH32NSCWzE8Ij3lkf9Y/nS7Z+PaAybs2PHk6jlem0lu4e
/T2tBgAQQaPnadQDSgfEMTJu9ZrV27Z98tqrr1dUVAAAEARZvmL54kWL/Pz9aLSuNNi0Pu+a
mzdu9lc5l8NRdbrdw+FIkgfjV1Wnsbs1NFaLxGAcT6X9pFTgFwQAhFGpjla8VKdZ4Dm4oefR
Y98DANRqdUNDw4cf/DMjI6PXCU7bKjIisrS01D62LioqAgBERkbeuXO3R5nSUuxDQ0ODWq0W
CsdnZmY6VoLldeZyObV9/pjEYvGQf5w+dEuKr35vMdupiwNfOvr4+vo0NErsLWkymTpVKi6X
UysWD1iWy+E4vsfbZLKwUCdOoCHg5eUlk8nsI/LWtjbsoLS5GTtis9k6un94Op0OAEClUDQP
JkQeZfBbcjhtpVKrrVZrYmJCaVl5W1tbL4efizQ0OvHzIwgiEgrHh4ViWU2xgyS0x2zhtDOX
y613iPWRydrHh4XZvw7ndyVrb+9QKgUCAZZ7NyQkpLFRYjAYBnnHbsG5RU/ffK2sSuHNpf7P
pvgZU/23vp780ts3iERk94dTQ4J6x5SR0N4DfZlcPwRVrCaz46Iys0pD5rCwz8FPLwleu6j8
48PynHtmtZYhGjfh0N9Bn7zChja8V7xFb5RnF1d/eSzqH897JoR3O1JWtQAACiVJREFUFFQM
QcmRwoNAVDm4UvVWq9lmYxCJrkhdBIuM++rLr9JSU9c+/dSW97YCANaufWrNk2u2b9uRm5ur
VquFQuE3Bw8QkD5PUNb/ekUEsY1WLAIAgAAQBpE435Mz/0FL7Mo8OgIAi4iqrT0tqRp8QlUs
1h3nBKdt5cHwcOz36PV6s9nMYPR4WQx6g9nBh6RSqTjcPl0NBAEAjHhI5bJQTbue+EsTbQjS
UQZBEDKZHBYqwKZX7ahdWFKFIAiFQjEae6yL0YUliy5CJpEcazObzVarlUzuWRdgs9ns9h77
DyEMMev8iIDfksNsK61Wm3XzZkx09Mzp0xAEkcnab9+5o1AM3OF+oJLueXdHYqKjoqOibmXn
SJubjUYjh8NZ9MgCx1zm/bUzgiBUKrW/OxrO7wqjpqY2Pi429w5Ko1G9vbwyih9mbm5H8Mbo
Mrn+UmbDjKn+8dFeRCISHMjEzPnB78pOna1VqY0fvTt5Vh+XOxhq7BmBhBKpZLtRR5keRkVX
HJPPvMnNF39tvXob+0rhOR9m2cwDv681NY0AAHqI34AWPS0t7cN/OllvrdfrFz6yaMALDaCG
1cJ0sNBUAgFFEHW3vcGXDgqbzSaRSOye2zlz51y+/JN9LMjjeTstZe6/JeVyOZvNRhDEfauq
HLECm8ZqOa+Q/6sVz6w6xQaA0mxmEHpakjnIXpErOG0rjVrDZPX0falUKoqijnE3FCoFJaF2
o85kMu1xc3bYLBYAYLBvRnw4FOuMAN235UyLs6eHLx19bDabyWSqqq7OLxhc3AZWVq/XO1pZ
MnlkAv0AAEaTybE2FEUJBIKj/fitgd+Sw28riaRJImlCUdTPz3dCUtL0tNQfz54bnIbOJrBD
goNrxWL7UNv1mYvuO+q5CzKF7Cgd8u8KQ1xXl5gQPy4okMFgarVa/E7/aIJn0T1Z5JlTeww2
kdjVM1JrTCazdXKST+pEn36KDhFWdJjibhkAgBbAJ7EZ6souLxCRRrHoe3wavOlJzsu7gEdY
IADA0DrwW9KtXvdKnS7Rg0FEEMy1HkP3AABU6LSuSAeLN8/b3vekUql6h75w2rRpg62toqKC
RCIFBgb2is12HwUaTQKdgeD2FLHuDo1A0D34XqjW6yJoPcPNKJqHu7R8kPLy8qTkJHtQW1xc
HACgrLzc8ZyoqKiiwiIAQGBQIIPBqK6u7lVJWFiYXq8f2ST0SwUarRnJaHQ+BMeXPhSam1t8
+AO8Z7DhF4mEmh4MlZUrFN5eXvavPG/n/dchIG+X+/j62Pu1fB4PAOAYZT0gJrOJSBzV1Jf4
LTkibWU2mxsaGpkMZnxcbK9O/9DuF0VRs8Man6DAQNfLyuVyxxELz+uBOxrO7woAYDAYGhob
BQIBw8OjplY8OsMbV8CLjLt4bPGCWUEAgKxsqcViq7uvkjRrAACvPR+XcXrp7g+n6vRDGTXi
EPbSE7RAH4q35/hXVxta5a0/dw3K27OLfeZPYYqCUQY9YMVsr7QE1+uM2/kaf/ZECp9DpFG4
U2LDXnpCXdMov/2QnSQ/KGRslPg8349NREMo1Of5ftV6XX73NBu+FEMgEGReyzjwzX6cq3hy
PNeteyYoKOjM2bPYkds5t+fOmysUCRkMxrLly1JTpw5W8/y8fLPZjJmo0eHfbc1BFMpmvwA/
EplKIIhotFd8A6Yx2Y7nlOg0FpttKceL+OBczEm5LJxGX8b18iAQU5msmWw26IMrLTlYTp8+
7enpuemlTWw2WyAQbNr0YlVVVd7dPPsJNpvtpZc2BQQEeHt7v/LKX5qbm69f770bXVx8fF5e
ft9AdwAAm83OvJZx8tSJQWnlQbLOG6c9X+dhtDjxAONLHxaFxUVsNmvypInYTKoXlztp4oRx
QQ+sWWiTtdlsNuF4IfLg0y8rK/fy8goXiUgkUlBQoItxT65QXlFBpVCSkxIpFIonm52UmKhQ
KLBZVRfp6FCyWEw+n4f0mT10E/gtOZy2CggImDRxApfLRYlENosVEhLc3NLSy8gN7X6bmqQh
ISFcDodMJouEwsAAJy7h/igtK+dyOFGRkWQyOSDAPyjogd7AcH5XGNU1Nb4+PgwGo6ZvnMvD
A6/TZDRamlt1N7Kl/zpaDgAwma1v/OPW5ufiYiK4eoP52A/V4wKYSxeM2B+JRW+QnruR8OUb
JE9mZ0lt0V9324PVa/eeJKBo3O7XCWRSR0FF+ceHYre/4mK1tQdOB62aH/ri42QuS9+qaL2S
U//teVf8826lUqfber/+GZ7PEWGEwWrN1agOtEit3aNQfOmAYLHuAAC9Xi8Wiz/+6JMrV65g
oq/370dJ6GeffUoikYoKi7Zv2/7Rxx8NSnOlUnkj68acuXPOn3e63H8ovOYX+IjDNDm2Nv1E
exvmab9vMGyuq3mG5/OlYDwZQeoNhstKRa+V5U1G4y6pZC2Pn873RQB4orJMaTEDAAo06p3S
xie9+c/y/Wr1+uOytqd5I+xYckp5ecXbb72TviH95KkTBoMhJztn7959jgtjtFrtlZ+u7Nnz
OYvNKikpeevNt80P7jfA5/NjYmK2vLfFaf3YZKFTY4/DwmCtzQYu1zt3XeJL3ceUSZPCwnqC
sLAly6WlZfmFhQAApbLz0k9X4mNjFy6YTyASlR3KGnFto+SBKCqVSp2dkxMbE5uYEA8AOPXf
H7AwpeaWluycnJjomKTEBIWio6S0NC42dkR0bpfLM69nxcfGrlj2mNlsbpJK7+blD2qgVl1T
w+VypqWmUqlU4LA+G7818BlOSw6nraRSKZ1GmzxxAovNNhoMkqamwqLe+zH3d7/45BUUEAiE
2bNmEonE1tbWWzm37avwB6SltfVWdk5cbEx8XGy7XH6vpDQpMcFq6fobHM7vCqO5uUWn1ys7
lA834LEXMD86ZNAIRcL9+79OX79hZB3CfxywHWaWLF6Kc076hvTU1KkbNzjfBTYxKXHXrp3H
jh47cOAbFy9KIdq+ntV2tYF2pMLJhon4Ugjk9064SJiUmHjsxMmR8pDT6fRljy69+euv9++P
0vyjK8Dca5BBU1VZdfnyT+vWr3vYioxZWCzWypUrvvryq/7ePrGxsSaT6eTJU67XabAg6T/z
+zPY+FII5HcHiURKS53q5eWFEoleXG5EeHhNbe1ImXMURZMSErRabcMo7szhCqMamgEZM+zY
vuNhqzCW6ezsXLxoCc4JsbGxly5eksvlo6YSBPL7wmQy3b/fMHFCMpvN1ut0dfX375WUjEjN
yUlJ4SKhUqnMuvnLbycmDgN63SEjgH1X9r5kKDu2N/2GvFKQEce+WXdf6urqf3HPvvQQCKQv
0KJDIBAIBDIWgPPoEAgEAoGMBaBFh0AgEAhkLAAtOgQCgUAgYwFo0SEQCAQCGQtAiw6BQCAQ
yFgAWnQIBAKBQMYC0KJDIBAIBDIWgBYdAoFAIJCxALToEAgEAoGMBaBFh0AgEAhkLPD/AaJA
h/yS6MK+AAAAAElFTkSuQmCC
--------------DBD2136C4585F665CD2A9856--

--------------B15B73055A3E6BA9F2756D5E--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 13:10:20 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 22 09:10:20 2020
Received: from localhost ([127.0.0.1]:57675 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kKi3n-0003SQ-Oo
	for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 09:10:19 -0400
Received: from lists.gnu.org ([209.51.188.17]:50050)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1kKi3l-0003SG-JK
 for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 09:10:18 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55372)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1kKi3k-0004SB-JM
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 09:10:17 -0400
Received: from out0.migadu.com ([94.23.1.103]:62338)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1kKi3h-0005On-7S
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 09:10:16 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1600780209;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type:
 content-transfer-encoding:content-transfer-encoding:
 in-reply-to:in-reply-to:references:references;
 bh=6VMJK8Oh+Q3H18vbFGC5XrMjHunzYfzE0oAybufyweg=;
 b=OUJTMuT2IAdH8kO3fFnqXVgN8QUmD7Itm7WAmKb7NL/khGh+hELbglG0bfses8No/UA/kD
 Z8HQh0Agego40zSNj/rXz6WcaAVISg5fc0UB8pDI/hPuFlpe3LNgABo+MTQSLrnsv8nijH
 gQ/JbYV+sTO2vvjWbC36jhQ2BrEo01GXxu+8VqeeDfQs5LBgSnHHl/nSPZD2ESSoEcPblh
 MjVMVf1uri9Gm6DSSs1r5KlVZxxHdHUoDdd76ZaBP9ViFmcUK42KthhZ5VPUq6bxNf3mb8
 aO2l943Nwfk9xZ9lECa04ghHBjbPMhydZ5nok7XKuZEKfMfXVLWgIGnPqhiXrQ==
From: Theodor Thornhill <theo@HIDDEN>
To: Jostein =?utf-8?Q?Kj=C3=B8nigsen?= <jostein@HIDDEN>,
 bug-gnu-emacs@HIDDEN
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
In-Reply-To: <ab7fd8f4-77f3-dbb2-f1a3-d0ac71fc7b44@HIDDEN>
References: <87zh5iyu4d.fsf@HIDDEN>
 <ab7fd8f4-77f3-dbb2-f1a3-d0ac71fc7b44@HIDDEN>
Date: Tue, 22 Sep 2020 15:10:10 +0200
Message-ID: <87wo0myn2l.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-Spam-Score: -0.10
Received-SPF: pass client-ip=94.23.1.103; envelope-from=theo@HIDDEN;
 helo=out0.migadu.com
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/22 09:10:10
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x [generic]
X-Spam_score_int: -20
X-Spam_score: -2.1
X-Spam_bar: --
X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,
 RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.4 (-)
X-Debbugs-Envelope-To: submit
Cc: acm@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.4 (--)

Jostein Kj=C3=B8nigsen <jostein@HIDDEN> writes:

> Hey Theo.
>
> Thanks for your work on trying to get something new, and possibly better=
=20
> C#-support mainlined in Emacs!
My pleasure - hopefully we'll get there :)

[...]

> On 22.09.2020 12:37, Theodor Thornhill wrote:
>> Also, it is using a lot of internal c-mode functions:
>>    - https://github.com/josteink/csharp-mode/issues/162
>
> This link should be: https://github.com/josteink/csharp-mode/issues/128
>
>>
>> I've had some discussions with with the current maintainer, Jostein
>> Kj=C3=B8nigsen (cc'd) about the future of this mode in
>> https://github.com/josteink/csharp-mode/issues/162.
>
> This link should be: https://github.com/josteink/csharp-mode/issues/153
>

When you think you can copy paste... Thanks for correcting here.  Don't
know how I managed that :)

Theo




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 12:51:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 22 08:51:49 2020
Received: from localhost ([127.0.0.1]:57642 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kKhls-00030E-U7
	for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 08:51:49 -0400
Received: from lists.gnu.org ([209.51.188.17]:52646)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <jostein@HIDDEN>) id 1kKhln-000303-HQ
 for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 08:51:46 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50170)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jostein@HIDDEN>)
 id 1kKhli-0000tp-Vl
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 08:51:39 -0400
Received: from out2-smtp.messagingengine.com ([66.111.4.26]:58319)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <jostein@HIDDEN>)
 id 1kKhlg-00037n-UO
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 08:51:38 -0400
Received: from compute2.internal (compute2.nyi.internal [10.202.2.42])
 by mailout.nyi.internal (Postfix) with ESMTP id 4200C5C0067;
 Tue, 22 Sep 2020 08:51:35 -0400 (EDT)
Received: from mailfrontend1 ([10.202.2.162])
 by compute2.internal (MEProxy); Tue, 22 Sep 2020 08:51:35 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 secure.kjonigsen.net; h=subject:to:cc:references:from:message-id
 :date:mime-version:in-reply-to:content-type; s=fm1; bh=e1q/mjaT1
 uwLW28huLhTkuDD2VmfvtPR/dnyD6sJJpw=; b=NrYJdx48PoNCX1lkraOY5mZHz
 n7j4fFGzZXU3culeD7Uq85ocdac990jpQJq4tQoREouJYbRhevFkQO/38BLLPyCn
 1loeAIMJZoN2bxF/A2gEegvUJn5kh5mJtqcwl2UakmhVBJK9T+1b+PoSV7bPhf6w
 Mme4ubrYTLNYtevMxtnCcJEL1nuSqKXAwhbjvOlVL0X7FiA35oTFKx/liroDcKk1
 ESUDaKagUMvwl8NwTzQHeT4zZcMNuatWF0Ogs1In0mucwYICtT/j6MXhhPQoNDkA
 uk1Qvjt2muUam4DxheocEygou/zJn6qNp4iLEwhK1iyMp+N6JtJmAd5a7OypA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=
 messagingengine.com; h=cc:content-type:date:from:in-reply-to
 :message-id:mime-version:references:subject:to:x-me-proxy
 :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=e1q/mj
 aT1uwLW28huLhTkuDD2VmfvtPR/dnyD6sJJpw=; b=fxwB4KYnuOVhiou6eEwoKN
 UlUC7yW6Z+H+wo62S78kaiwdpXnpgmvIpYjeD06QNuAnb/QzCe9JI418GjC4PdQp
 MHc7lxKQVW6lDRkea8ajDyaB8vSGFxr00mVcS/z0r9mvHJf0UGkakzn4VpTPpVsI
 lEtHBV1K0NDEsbbBJTKYVMsls+zjiWJ/ys6/8x1LXXu3g4/CxuEpQzDh7X0eTWWr
 9sp0XdlgZ8NzLb7o3wAa+eSrTFEtwYrlsDV5vpP+ewtAEo2uS278fK2cblkSSvA2
 Tuays2kGijONvhOjCFf9h0yo+zcQ6J19bJ18UFYMEF4rslyWykLr5BmA1ATcI7HQ
 ==
X-ME-Sender: <xms:VvNpX8AK9GLN4Q_yuY8bBYFG3iv8ZzGxXa7A-lLOwo1WH7V-Hf88iQ>
 <xme:VvNpX-gvhxRRiRhY4oKncap921HW1aNN8C_JbAb-QJl-J2ou2vl9Q_CUR6iCSMK2C
 _hX3vc80gMwIj2oyw>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeggdehkecutefuodetggdotefrodftvf
 curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu
 uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc
 fjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomheplfhoshhtvghi
 nhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnihhgsh
 gvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepieefgeefheeuudfhteehtdejteffudet
 vdfhteevffelhfffuedukeeitdektdeinecuffhomhgrihhnpehgihhthhhusgdrtghomh
 dpnhhighhsvghnrdhnohenucfkphepkeegrddvuddurdefvddrudefjeenucevlhhushht
 vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehjohhsthgvihhnsehsvg
 gtuhhrvgdrkhhjohhnihhgshgvnhdrnhgvth
X-ME-Proxy: <xmx:VvNpX_kt2oMzaR5lXFti1Bh-bBxb6rFi05zhphEFaNknNJaX8iV80Q>
 <xmx:VvNpXyy1or2zB_p4vf4p_wAgh5Y_5fBaL3IdUGd4y33_eM2aSZC7XQ>
 <xmx:VvNpXxRw4FU5sDITunFV22katqHfnkAuzvy6ko9aKxfxuRz8nmUETg>
 <xmx:V_NpXwK6Mh-26ZhQgwWmp8CD6-be0t0JtF-RumoWVxp4TaphY1JVXg>
Received: from [192.168.1.132] (cm-84.211.32.137.getinternet.no
 [84.211.32.137])
 by mail.messagingengine.com (Postfix) with ESMTPA id 3525E3280060;
 Tue, 22 Sep 2020 08:51:34 -0400 (EDT)
Subject: Re: 28.0.50; [PATCH] Add csharp support to cc-mode
To: Theodor Thornhill <theo@HIDDEN>, bug-gnu-emacs@HIDDEN
References: <87zh5iyu4d.fsf@HIDDEN>
From: =?UTF-8?Q?Jostein_Kj=c3=b8nigsen?= <jostein@HIDDEN>
Message-ID: <ab7fd8f4-77f3-dbb2-f1a3-d0ac71fc7b44@HIDDEN>
Date: Tue, 22 Sep 2020 14:51:30 +0200
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
 Thunderbird/68.12.0
MIME-Version: 1.0
In-Reply-To: <87zh5iyu4d.fsf@HIDDEN>
Content-Type: multipart/alternative;
 boundary="------------910D72FC0831E8C938430626"
Content-Language: nb-NO
Received-SPF: pass client-ip=66.111.4.26;
 envelope-from=jostein@HIDDEN; helo=out2-smtp.messagingengine.com
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/22 08:16:23
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x [generic] [fuzzy]
X-Spam_score_int: -26
X-Spam_score: -2.7
X-Spam_bar: --
X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,
 DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, NICE_REPLY_A=-0.001,
 RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001,
 SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.6 (-)
X-Debbugs-Envelope-To: submit
Cc: acm@HIDDEN, jostein@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.6 (--)

This is a multi-part message in MIME format.
--------------910D72FC0831E8C938430626
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit

Hey Theo.

Thanks for your work on trying to get something new, and possibly better 
C#-support mainlined in Emacs!

Not commenting on the patch itself, but in your email you had some links 
to Github issues which were not correct.

To assist the further conversation, I'll just provide pointers to the 
actual issues below.


On 22.09.2020 12:37, Theodor Thornhill wrote:
> Also, it is using a lot of internal c-mode functions:
>    - https://github.com/josteink/csharp-mode/issues/162

This link should be: https://github.com/josteink/csharp-mode/issues/128

>
> I've had some discussions with with the current maintainer, Jostein
> KjĂžnigsen (cc'd) about the future of this mode in
> https://github.com/josteink/csharp-mode/issues/162.

This link should be: https://github.com/josteink/csharp-mode/issues/153

Hope this helps.

-- 

Kind regards
*Jostein KjĂžnigsen*

jostein@HIDDEN đŸ” jostein@HIDDEN
https://jostein.kjĂžnigsen.no

--------------910D72FC0831E8C938430626
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: 8bit

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <p>Hey Theo.</p>
    <p>Thanks for your work on trying to get something new, and possibly
      better C#-support mainlined in Emacs!<br>
    </p>
    <p>Not commenting on the patch itself, but in your email you had
      some links to Github issues which were not correct.<br>
    </p>
    <p>To assist the further conversation, I'll just provide pointers to
      the actual issues below.<br>
    </p>
    <p><br>
    </p>
    On 22.09.2020 12:37, Theodor Thornhill wrote:<br>
    <blockquote type="cite" cite="mid:87zh5iyu4d.fsf@HIDDEN">
      <pre class="moz-quote-pre" wrap="">Also, it is using a lot of internal c-mode functions:
  - <a class="moz-txt-link-freetext" href="https://github.com/josteink/csharp-mode/issues/162">https://github.com/josteink/csharp-mode/issues/162</a></pre>
    </blockquote>
    <p>This link should be:
      <a class="moz-txt-link-freetext" href="https://github.com/josteink/csharp-mode/issues/128">https://github.com/josteink/csharp-mode/issues/128</a><br>
    </p>
    <blockquote type="cite" cite="mid:87zh5iyu4d.fsf@HIDDEN">
      <pre class="moz-quote-pre" wrap="">

I've had some discussions with with the current maintainer, Jostein
KjĂžnigsen (cc'd) about the future of this mode in
<a class="moz-txt-link-freetext" href="https://github.com/josteink/csharp-mode/issues/162">https://github.com/josteink/csharp-mode/issues/162</a>.</pre>
    </blockquote>
    <p>This link should be:
      <a class="moz-txt-link-freetext" href="https://github.com/josteink/csharp-mode/issues/153">https://github.com/josteink/csharp-mode/issues/153</a></p>
    <p>Hope this helps.</p>
    <p>-- </p>
    <div class="moz-signature">Kind regards<br>
      <b>Jostein KjĂžnigsen</b><br>
      <br>
      <a class="moz-txt-link-abbreviated" href="mailto:jostein@HIDDEN">jostein@HIDDEN</a> đŸ” <a class="moz-txt-link-abbreviated" href="mailto:jostein@HIDDEN">jostein@HIDDEN</a><br>
      <a href="https://jostein.kjĂžnigsen.no">https://jostein.kjĂžnigsen.no</a></div>
  </body>
</html>

--------------910D72FC0831E8C938430626--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 10:38:10 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Tue Sep 22 06:38:10 2020
Received: from localhost ([127.0.0.1]:57303 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1kKfgX-0005sa-HL
	for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 06:38:10 -0400
Received: from lists.gnu.org ([209.51.188.17]:60232)
 by debbugs.gnu.org with esmtp (Exim 4.84_2)
 (envelope-from <theo@HIDDEN>) id 1kKfgU-0005sS-Ju
 for submit <at> debbugs.gnu.org; Tue, 22 Sep 2020 06:38:07 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:56206)
 by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1kKfgT-0003he-BL
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 06:38:06 -0400
Received: from out1.migadu.com ([91.121.223.63]:25556)
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.90_1) (envelope-from <theo@HIDDEN>) id 1kKfgM-00078f-Gh
 for bug-gnu-emacs@HIDDEN; Tue, 22 Sep 2020 06:38:03 -0400
X-Report-Abuse: Please report any abuse attempt to abuse@HIDDEN and
 include these headers.
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thornhill.no;
 s=key1; t=1600771072;
 h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
 to:to:cc:cc:mime-version:mime-version:content-type:content-type;
 bh=fIFGzmNLWawhGSvzOIKH6qcy+LgLXJMGI168Mb7aEdI=;
 b=PamFjSAcsC5anZWZUQzjhJYTC8F3HoxuGkJTcrzCLoFpbyfEomWzxDs3+oAxvwp1FMKmb6
 Hsju5CtQxWrWgxnTxtQJJJR1vbrGxUuHXgclnTLM7HpRd+PNKelF8X+Kk5xXpwOoJXJDDi
 ZGfXuFzi5+7gx6+Oe/HXV940GZyFqP44+nFknilvky32rynL0oJKlkY9UR1P2Ir0Ff1zsN
 cwT9nJNpINQ6CNnXKe+foyOF4cCvtEZYcyjnhpeydCPiTlMjfhzch24Y2qkljO+PqUU1G5
 a96IvjZRatXx0vO7w3ZwTmHj6DQ1rvR2GzSxVgM3GWJlatraST8OY94TiYJxOw==
From: Theodor Thornhill <theo@HIDDEN>
To: bug-gnu-emacs@HIDDEN
Subject: 28.0.50; [PATCH] Add csharp support to cc-mode
Date: Tue, 22 Sep 2020 12:37:54 +0200
Message-ID: <87zh5iyu4d.fsf@HIDDEN>
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="=-=-="
X-Spam-Score: -0.10
Received-SPF: pass client-ip=91.121.223.63; envelope-from=theo@HIDDEN;
 helo=out1.migadu.com
X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/22 06:37:53
X-ACL-Warn: Detected OS   = Linux 2.2.x-3.x [generic]
X-Spam_score_int: -16
X-Spam_score: -1.7
X-Spam_bar: -
X-Spam_report: (-1.7 / 5.0 requ) BAYES_00=-1.9, DKIM_INVALID=0.1,
 DKIM_SIGNED=0.1, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001,
 SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no
X-Spam_action: no action
X-Spam-Score: -1.4 (-)
X-Debbugs-Envelope-To: submit
Cc: acm@HIDDEN, jostein@HIDDEN
X-BeenThere: debbugs-submit <at> debbugs.gnu.org
X-Mailman-Version: 2.1.18
Precedence: list
List-Id: <debbugs-submit.debbugs.gnu.org>
List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe>
List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/>
List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org>
List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help>
List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, 
 <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe>
Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org
Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org>
X-Spam-Score: -2.4 (--)

--=-=-=
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable



Hello!

For some time, I've been a little dissatisfied with the support for C#
in emacs.  Recently, there has been some breakage in handling of strings
and fontification, more precisely:

  - https://github.com/josteink/csharp-mode/issues/162

Also, it is using a lot of internal c-mode functions:
  - https://github.com/josteink/csharp-mode/issues/162

I've had some discussions with with the current maintainer, Jostein
Kj=C3=B8nigsen (cc'd) about the future of this mode in
https://github.com/josteink/csharp-mode/issues/162.

Some points of note:
  - It cannot easily be donated to emacs due to paperwork
  - Jostein does not have time to do it himself
  - I took upon myself to rewrite it in a separate branch, as an end
  goal for it to be included in emacs

While working on this, I realized the easiest way to get something good
here is to overall reduce the complexity.  As such I created this patch.

It seems to work nicely, removing the need for the external mode
completely.

However, I see that including csharp here is most likely a bigger effort
than just sending this patch, but I wanted to send what I have, and
hopefully get some pointers.  Or in worst case stop before I go too
far..

This patch is written without consulting the current mode, so paperwork
should not be an issue.

In addition, the current mode has an implementation of imenu rewritten
from scratch by Jostein, and as such I think this can be included as
well.

I tried not to do too much, since I believe most of the advanced
functionality should be provided by an lsp mode such as eglot or lsp-mode.

Have a nice day!
Theodor Thornhill


--=-=-=
Content-Type: text/x-patch
Content-Disposition: attachment;
 filename=0001-Add-csharp-support-to-cc-mode.patch

From bb5bd8390ac969bad593b1c9383ce6e2bd0e7cf7 Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@HIDDEN>
Date: Tue, 22 Sep 2020 12:09:38 +0200
Subject: [PATCH] Add csharp support to cc-mode

---
 lisp/progmodes/cc-defs.el   |  27 +++----
 lisp/progmodes/cc-fonts.el  |  33 ++++++++
 lisp/progmodes/cc-langs.el  | 149 +++++++++++++++++++++++-------------
 lisp/progmodes/cc-mode.el   |  65 +++++++++++++---
 lisp/progmodes/cc-styles.el |  37 +++++++++
 lisp/progmodes/cc-vars.el   |  22 ++++++
 6 files changed, 255 insertions(+), 78 deletions(-)

diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 77e263f1aa..ac1c421e37 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -95,12 +95,12 @@ c-version-sym
 
 (defvar c-buffer-is-cc-mode nil
   "Non-nil for all buffers with a major mode derived from CC Mode.
-Otherwise, this variable is nil.  I.e. this variable is non-nil for
-`c-mode', `c++-mode', `objc-mode', `java-mode', `idl-mode',
-`pike-mode', `awk-mode', and any other non-CC Mode mode that calls
-`c-initialize-cc-mode'.  The value is the mode symbol itself
-\(i.e. `c-mode' etc) of the original CC Mode mode, or just t if it's
-not known.")
+Otherwise, this variable is nil.  I.e. this variable is non-nil
+for `c-mode', `c++-mode', `objc-mode', `csharp-mode',
+`java-mode', `idl-mode', `pike-mode', `awk-mode', and any other
+non-CC Mode mode that calls `c-initialize-cc-mode'.  The value is
+the mode symbol itself \(i.e. `c-mode' etc) of the original CC
+Mode mode, or just t if it's not known.")
 (make-variable-buffer-local 'c-buffer-is-cc-mode)
 
 ;; Have to make `c-buffer-is-cc-mode' permanently local so that it
@@ -1874,13 +1874,14 @@ c-keep-region-active
   (and (boundp 'zmacs-region-stays)
        (setq zmacs-region-stays t)))
 
-(put 'c-mode    'c-mode-prefix "c-")
-(put 'c++-mode  'c-mode-prefix "c++-")
-(put 'objc-mode 'c-mode-prefix "objc-")
-(put 'java-mode 'c-mode-prefix "java-")
-(put 'idl-mode  'c-mode-prefix "idl-")
-(put 'pike-mode 'c-mode-prefix "pike-")
-(put 'awk-mode  'c-mode-prefix "awk-")
+(put 'c-mode      'c-mode-prefix "c-")
+(put 'c++-mode    'c-mode-prefix "c++-")
+(put 'objc-mode   'c-mode-prefix "objc-")
+(put 'csharp-mode 'c-mode-prefix "csharp-")
+(put 'java-mode   'c-mode-prefix "java-")
+(put 'idl-mode    'c-mode-prefix "idl-")
+(put 'pike-mode   'c-mode-prefix "pike-")
+(put 'awk-mode    'c-mode-prefix "awk-")
 
 (defsubst c-mode-symbol (suffix)
   "Prefix the current mode prefix (e.g. \"c-\") to SUFFIX and return
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index bb7e5bea6e..c361609e0f 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -2579,6 +2579,39 @@ objc-font-lock-keywords
   (setq objc-font-lock-extra-types
 	(cc-eval-when-compile (list (concat "[" c-upper "]\\sw*")))))
 
+
+;;; Csharp.
+
+(c-override-default-keywords 'csharp-font-lock-keywords)
+
+(defconst csharp-font-lock-keywords-1 (c-lang-const c-matchers-1 csharp)
+  "Minimal font locking for C# mode.
+Fontifies nothing except the syntactic fontification of strings and
+comments.")
+
+(defconst csharp-font-lock-keywords-2 (c-lang-const c-matchers-2 csharp)
+  "Fast normal font locking for C# mode.
+In addition to `csharp-font-lock-keywords-1', this adds fontification of
+keywords, simple types, declarations that are easy to recognize, the
+user defined types on `csharp-font-lock-extra-types', and the doc
+comment styles specified by `c-doc-comment-style'.")
+
+(defconst csharp-font-lock-keywords-3 (c-lang-const c-matchers-3 csharp)
+  "Accurate normal font locking for C# mode.
+Like variable `csharp-font-lock-keywords-2' but detects declarations in a more
+accurate way that works in most cases for arbitrary types without the
+need for `csharp-font-lock-extra-types'.")
+
+(defvar csharp-font-lock-keywords csharp-font-lock-keywords-3
+  "Default expressions to highlight in C# mode.")
+
+(defun csharp-font-lock-keywords-2 ()
+  (c-compose-keywords-list csharp-font-lock-keywords-2))
+(defun csharp-font-lock-keywords-3 ()
+  (c-compose-keywords-list csharp-font-lock-keywords-3))
+(defun csharp-font-lock-keywords ()
+  (c-compose-keywords-list csharp-font-lock-keywords))
+
 
 ;;; Java.
 
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 13e70a3251..65b1419bb1 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -378,7 +378,8 @@ c-make-mode-syntax-table
        (let ((table (make-syntax-table)))
 	 (c-populate-syntax-table table)
 	 ;; Mode specific syntaxes.
-	 ,(cond ((or (c-major-mode-is 'objc-mode) (c-major-mode-is 'java-mode))
+	 ,(cond ((or (c-major-mode-is 'objc-mode) (c-major-mode-is 'java-mode)
+		     (c-major-mode-is 'csharp-mode))
 		 ;; Let '@' be part of symbols in ObjC to cope with
 		 ;; its compiler directives as single keyword tokens.
 		 ;; This is then necessary since it's assumed that
@@ -430,7 +431,7 @@ c-identifier-syntax-modifications
   ;; it as an identifier character since it's often used in various
   ;; machine generated identifiers.
   t    '((?_ . "w") (?$ . "w"))
-  (objc java) (append '((?@ . "w"))
+  (objc java csharp) (append '((?@ . "w"))
 	       (c-lang-const c-identifier-syntax-modifications))
   awk  '((?_ . "w")))
 (c-lang-defvar c-identifier-syntax-modifications
@@ -467,6 +468,9 @@ c-get-state-before-change-functions
 	     c-truncate-bs-cache
 	     c-before-change-check-unbalanced-strings
 	     c-parse-quotes-before-change)
+  csharp '(c-parse-quotes-before-change
+	   c-before-change-check-unbalanced-strings
+	   c-before-change-check-<>-operators)
   java '(c-parse-quotes-before-change
 	 c-before-change-check-unbalanced-strings
 	 c-before-change-check-<>-operators)
@@ -516,6 +520,12 @@ c-before-font-lock-functions
 	c-neutralize-syntax-in-CPP
 	c-restore-<>-properties
 	c-change-expand-fl-region)
+  csharp '(c-depropertize-new-text
+	   c-after-change-escape-NL-in-string
+	   c-parse-quotes-after-change
+	   c-after-change-mark-abnormal-strings
+	   c-restore-<>-properties
+	   c-change-expand-fl-region)
   java '(c-depropertize-new-text
 	 c-after-change-escape-NL-in-string
 	 c-parse-quotes-after-change
@@ -648,10 +658,11 @@ c-symbol-start
   "Regexp that matches the start of a symbol, i.e. any identifier or
 keyword.  It's unspecified how far it matches.  Does not contain a \\|
 operator at the top level."
-  t    (concat "[" c-alpha "_]")
-  java (concat "[" c-alpha "_@]")
-  objc (concat "[" c-alpha "_@]")
-  pike (concat "[" c-alpha "_`]"))
+  t      (concat "[" c-alpha "_]")
+  csharp (concat "[" c-alpha "_@]")
+  java   (concat "[" c-alpha "_@]")
+  objc   (concat "[" c-alpha "_@]")
+  pike   (concat "[" c-alpha "_`]"))
 (c-lang-defvar c-symbol-start (c-lang-const c-symbol-start))
 
 (c-lang-defconst c-symbol-chars
@@ -718,6 +729,7 @@ c-identifier-ops
   ;; naming conventions.  We still define "." here to make
   ;; `c-forward-name' move over as long names as possible which is
   ;; necessary to e.g. handle throws clauses correctly.
+  csharp '((left-assoc "."))
   java '((left-assoc "."))
   idl  '((left-assoc "::")
 	 (prefix "::"))
@@ -1247,6 +1259,8 @@ c-overloadable-operators
 	 "<<" ">>" ">>=" "<<=" "==" "!=" "not_eq" "<=" ">="
 	 "&&" "and" "||" "??!??!" "or" "++" "--" "," "->*" "->"
 	 "()" "[]" "<::>" "??(??)")
+  csharp '("+" "-" "*" "/" "%" "&" "|" "^" "<<" ">>" "=="
+	   "!=" ">" "<" ">=" "<=")
   ;; These work like identifiers in Pike.
   pike '("`+" "`-" "`&" "`|" "`^" "`<<" "`>>" "`*" "`/" "`%" "`~"
 	 "`==" "`<" "`>" "`!" "`[]" "`[]=" "`->" "`->=" "`()" "``+"
@@ -2023,6 +2037,8 @@ c-primitive-type-kwds
   objc (append
 	'("id" "Class" "SEL" "IMP" "BOOL")
 	(c-lang-const c-primitive-type-kwds))
+  csharp '("bool" "byte" "sbyte" "char" "decimal" "double" "float" "int" "uint"
+	   "long" "ulong" "short" "ushort" "void" "object" "string")
   java '("boolean" "byte" "char" "double" "float" "int" "long" "short" "void")
   idl  '("Object" "ValueBase" "any" "boolean" "char" "double" "fixed" "float"
 	 "long" "octet" "sequence" "short" "string" "void" "wchar" "wstring"
@@ -2137,7 +2153,8 @@ c-type-modifier-kwds
 on `c-primitive-type-kwds', they are fontified with the keyword face and not
 the type face."
   t (c-lang-const c-type-modifier-prefix-kwds)
-  c++ (append (c-lang-const c-type-modifier-prefix-kwds) '("throw")))
+  c++ (append (c-lang-const c-type-modifier-prefix-kwds) '("throw"))
+  csharp '("readonly" "const" "volatile" "new"))
 
 (c-lang-defconst c-opt-type-modifier-key
   ;; Adorned regexp matching `c-type-modifier-kwds', or nil in
@@ -2229,8 +2246,9 @@ c-brace-list-decl-kwds
 `c-colon-type-list-kwds', `c-paren-nontype-kwds', `c-paren-type-kwds',
 `c-<>-type-kwds', or `c-<>-arglist-kwds' then the associated clauses
 will be handled."
-  t    '("enum")
-  (awk) nil)
+  t      '("enum")
+  csharp '("enum" "new")
+  (awk)  nil)
 
 (c-lang-defconst c-brace-list-key
   ;; Regexp matching the start of declarations where the following
@@ -2281,6 +2299,7 @@ c-other-block-decl-kwds
   t   nil
   (c objc) '("extern")
   c++ '("namespace" "extern")
+  csharp '("namespace")
   idl '("module"
 	;; In CORBA CIDL:
 	"composition"))
@@ -2341,7 +2360,8 @@ c-typedef-decl-key
 (c-lang-defconst c-using-kwds
   "Keywords which behave like `using' in C++"
   t nil
-  c++ '("using"))
+  c++ '("using")
+  csharp '("using"))
 
 (c-lang-defconst c-using-key
   ;; Regexp matching C++'s `using'.
@@ -2410,6 +2430,10 @@ c-modifier-kwds
 	 "primary" "state"
 	 ;; In CORBA CIDL:
 	 "bindsTo" "delegatesTo" "implements" "proxy" "storedOn")
+  csharp '("abstract" "const" "default" "final" "native" "private" "protected"
+	   "public" "partial" "internal" "readonly" "static" "event" "transient"
+	   "volatile" "sealed" "ref" "out" "virtual" "implicit" "explicit"
+	   "fixed" "override" "params" "async" "extern" "unsafe")
   ;; Note: "const" is not used in Java, but it's still a reserved keyword.
   java '("abstract" "const" "default" "final" "native" "private" "protected"
 	 "public" "static" "strictfp" "synchronized" "transient" "volatile")
@@ -2634,14 +2658,16 @@ c-type-list-kwds
 
 Note: Use `c-typeless-decl-kwds' for keywords followed by a function
 or variable identifier (that's being defined)."
-  t    nil
-  c++  '("operator")
-  objc '("@class")
-  java '("import" "new" "extends" "super" "implements" "throws")
-  idl  '("manages" "native" "primarykey" "supports"
-	 ;; In CORBA PSDL:
-	 "as" "implements" "of" "scope")
-  pike '("inherit"))
+  t      nil
+  c++    '("operator")
+  objc   '("@class")
+  csharp '("struct" "class" "interface" "delegate" "event" "get" "set" "add"
+	   "remove" "is" "as" "operator")
+  java   '("import" "new" "extends" "super" "implements" "throws")
+  idl    '("manages" "native" "primarykey" "supports"
+	   ;; In CORBA PSDL:
+	   "as" "implements" "of" "scope")
+  pike   '("inherit"))
 
 (c-lang-defconst c-ref-list-kwds
   "Keywords that may be followed by a comma separated list of
@@ -2652,24 +2678,26 @@ c-ref-list-kwds
 
 Note: Use `c-typeless-decl-kwds' for keywords followed by a function
 or variable identifier (that's being defined)."
-  t    nil
-  c++  '("namespace")
-  java '("package")
-  idl  '("import" "module"
-	 ;; In CORBA CIDL:
-	 "composition")
-  pike '("import"))
+  t      nil
+  c++    '("namespace")
+  csharp '("var")
+  java   '("package")
+  idl    '("import" "module"
+	   ;; In CORBA CIDL:
+	   "composition")
+  pike   '("import"))
 
 (c-lang-defconst c-colon-type-list-kwds
   "Keywords that may be followed (not necessarily directly) by a colon
 and then a comma separated list of type identifiers, where each
 optionally can be prefixed by keywords.  (Can also be used for the
 special case when the list can contain only one element.)"
-  t    nil
-  c++  '("class" "struct")
-  idl  '("component" "eventtype" "home" "interface" "valuetype"
-	 ;; In CORBA PSDL:
-	 "storagehome" "storagetype"))
+  t      nil
+  c++    '("class" "struct")
+  csharp '("class" "struct" "interface")
+  idl    '("component" "eventtype" "home" "interface" "valuetype"
+	   ;; In CORBA PSDL:
+	   "storagehome" "storagetype"))
 
 (c-lang-defconst c-colon-type-list-re
   "Regexp matched after the keywords in `c-colon-type-list-kwds' to skip
@@ -2765,11 +2793,12 @@ c-brace-id-list-kwds
 
 (c-lang-defconst c-block-stmt-1-kwds
   "Statement keywords followed directly by a substatement."
-  t    '("do" "else")
-  c++  '("do" "else" "try")
-  objc '("do" "else" "@finally" "@try" "@autoreleasepool")
-  java '("do" "else" "finally" "try")
-  idl  nil)
+  t      '("do" "else")
+  c++    '("do" "else" "try")
+  objc   '("do" "else" "@finally" "@try" "@autoreleasepool")
+  csharp '("do" "else" "finally" "try")
+  java   '("do" "else" "finally" "try")
+  idl    nil)
 
 (c-lang-defconst c-block-stmt-1-key
   ;; Regexp matching the start of any statement followed directly by a
@@ -2781,7 +2810,8 @@ c-block-stmt-1-2-kwds
   "Statement keywords optionally followed by a paren sexp.
 Keywords here should also be in `c-block-stmt-1-kwds'."
   t nil
-  java '("try"))
+  csharp '("try")
+  java   '("try"))
 
 (c-lang-defconst c-block-stmt-1-2-key
   ;; Regexp matching the start of a statement which may be followed by a
@@ -2791,13 +2821,15 @@ c-block-stmt-1-2-key
 
 (c-lang-defconst c-block-stmt-2-kwds
   "Statement keywords followed by a paren sexp and then by a substatement."
-  t    '("for" "if" "switch" "while")
-  c++  '("for" "if" "switch" "while" "catch")
-  objc '("for" "if" "switch" "while" "@catch" "@synchronized")
-  java '("for" "if" "switch" "while" "catch" "synchronized")
-  idl  nil
-  pike '("for" "if" "switch" "while" "foreach")
-  awk  '("for" "if" "switch" "while"))
+  t      '("for" "if" "switch" "while")
+  c++    '("for" "if" "switch" "while" "catch")
+  objc   '("for" "if" "switch" "while" "@catch" "@synchronized")
+  csharp '("for" "if" "switch" "while" "catch" "foreach" "fixed" "checked"
+	   "unchecked" "using" "lock")
+  java   '("for" "if" "switch" "while" "catch" "synchronized")
+  idl    nil
+  pike   '("for" "if" "switch" "while" "foreach")
+  awk    '("for" "if" "switch" "while"))
 
 (c-lang-defconst c-block-stmt-2-key
   ;; Regexp matching the start of any statement followed by a paren sexp
@@ -2838,6 +2870,7 @@ c-simple-stmt-kwds
   t    '("break" "continue" "goto" "return")
   c++    '("break" "continue" "goto" "return" "co_return")
   objc '("break" "continue" "goto" "return" "@throw")
+  csharp '("break" "continue" "goto" "return" "throw")
   ;; Note: `goto' is not valid in Java, but the keyword is still reserved.
   java '("break" "continue" "goto" "return" "throw")
   idl  nil
@@ -2912,16 +2945,18 @@ c-constant-kwds
   objc    '("nil" "Nil" "YES" "NO" "IBAction" "IBOutlet"
 	    "NS_DURING" "NS_HANDLER" "NS_ENDHANDLER")
   idl     '("TRUE" "FALSE")
+  csharp  '("true" "false" "null" "value")
   java    '("true" "false" "null") ; technically "literals", not keywords
   pike    '("UNDEFINED")) ;; Not a keyword, but practically works as one.
 
 (c-lang-defconst c-primary-expr-kwds
   "Keywords besides constants and operators that start primary expressions."
-  t    nil
-  c++  '("operator" "this")
-  objc '("super" "self")
-  java '("this")
-  pike '("this")) ;; Not really a keyword, but practically works as one.
+  t      nil
+  c++    '("operator" "this")
+  objc   '("super" "self")
+  csharp '("this" "base" "operator")
+  java   '("this")
+  pike   '("this")) ;; Not really a keyword, but practically works as one.
 
 (c-lang-defconst c-expr-kwds
   ;; Keywords that can occur anywhere in expressions.  Built from
@@ -2948,16 +2983,18 @@ c-inexpr-block-kwds
 
 (c-lang-defconst c-inexpr-class-kwds
   "Keywords that can start classes inside expressions."
-  t    nil
-  java '("new")
-  pike '("class"))
+  t      nil
+  csharp '("new")
+  java   '("new")
+  pike   '("class"))
 
 (c-lang-defconst c-inexpr-brace-list-kwds
   "Keywords that can start brace list blocks inside expressions.
 Note that Java specific rules are currently applied to tell this from
 `c-inexpr-class-kwds'."
-  t    nil
-  java '("new"))
+  t      nil
+  csharp '("new")
+  java   '("new"))
 
 (c-lang-defconst c-opt-inexpr-brace-list-key
   ;; Regexp matching the start of a brace list in an expression, or
@@ -3049,6 +3086,7 @@ c-std-abbrev-keywords
   "List of keywords which may need to cause electric indentation."
   t '("else" "while")
   c++ (append (c-lang-const c-std-abbrev-keywords) '("catch"))
+  csharp (append (c-lang-const c-std-abbrev-keywords) '("catch" "finally"))
   java (append (c-lang-const c-std-abbrev-keywords) '("catch" "finally"))
   idl nil)
 (c-lang-defvar c-std-abbrev-keywords (c-lang-const c-std-abbrev-keywords))
@@ -3274,6 +3312,7 @@ c-decl-prefix-re
   ;; in all languages except Java for when a cpp macro definition
   ;; begins with a declaration.
   t "\\([{}();,]+\\)"
+  csharp "\\([{}(;,<]+\\)"
   java "\\([{}(;,<]+\\)"
   ;; Match "<" in C++ to get the first argument in a template arglist.
   ;; In that case there's an additional check in `c-find-decl-spots'
@@ -3585,6 +3624,7 @@ c-opt-type-suffix-key
 is in effect or not."
   t nil
   (c c++ objc pike) "\\(\\.\\.\\.\\)"
+  csharp (concat "\\(\\[" (c-lang-const c-simple-ws) "*\\]\\|\\.\\.\\.\\)")
   java (concat "\\(\\[" (c-lang-const c-simple-ws) "*\\]\\|\\.\\.\\.\\)"))
 (c-lang-defvar c-opt-type-suffix-key (c-lang-const c-opt-type-suffix-key))
 
@@ -3644,7 +3684,7 @@ c-recognize-typeless-decls
 that are preceded by a declaration starting keyword, so
 e.g. `c-typeless-decl-kwds' may still be used when it's set to nil."
   t nil
-  (c c++ objc java) t)
+  (c c++ objc csharp java) t)
 (c-lang-defvar c-recognize-typeless-decls
   (c-lang-const c-recognize-typeless-decls))
 
@@ -3657,6 +3697,7 @@ c-recognize-<>-arglists
 expression is considered to be a type."
   t (or (consp (c-lang-const c-<>-type-kwds))
 	(consp (c-lang-const c-<>-arglist-kwds)))
+  csharp t
   java t)	    ; 2008-10-19.  This is crude.  The syntax for java
 		    ; generics is not yet coded in CC Mode.
 (c-lang-defvar c-recognize-<>-arglists (c-lang-const c-recognize-<>-arglists))
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index c6dd671051..56cc476fad 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -36,12 +36,12 @@
 ;; Note: The version string is in cc-defs.
 
 ;; This package provides GNU Emacs major modes for editing C, C++,
-;; Objective-C, Java, CORBA's IDL, Pike and AWK code.  As of the
+;; Objective-C, C#, Java, CORBA's IDL, Pike and AWK code.  As of the
 ;; latest Emacs and XEmacs releases, it is the default package for
 ;; editing these languages.  This package is called "CC Mode", and
 ;; should be spelled exactly this way.
 
-;; CC Mode supports K&R and ANSI C, ANSI C++, Objective-C, Java,
+;; CC Mode supports K&R and ANSI C, ANSI C++, Objective-C, C#, Java,
 ;; CORBA's IDL, Pike and AWK with a consistent indentation model
 ;; across all modes.  This indentation model is intuitive and very
 ;; flexible, so that almost any desired style of indentation can be
@@ -75,7 +75,6 @@
 
 ;; Externally maintained major modes which use CC-mode's engine include:
 ;; - cuda-mode
-;; - csharp-mode (https://github.com/josteink/csharp-mode)
 ;; - haxe-mode
 ;; - d-mode
 ;; - dart-mode
@@ -195,13 +194,14 @@ c-init-language-vars-for
 `c-init-language-vars' macro if the language you want to use is one of
 those, rather than a derived language defined through the language
 variable system (see \"cc-langs.el\")."
-  (cond ((eq mode 'c-mode)    (c-init-language-vars c-mode))
-	((eq mode 'c++-mode)  (c-init-language-vars c++-mode))
-	((eq mode 'objc-mode) (c-init-language-vars objc-mode))
-	((eq mode 'java-mode) (c-init-language-vars java-mode))
-	((eq mode 'idl-mode)  (c-init-language-vars idl-mode))
-	((eq mode 'pike-mode) (c-init-language-vars pike-mode))
-	((eq mode 'awk-mode)  (c-init-language-vars awk-mode))
+  (cond ((eq mode 'c-mode)      (c-init-language-vars c-mode))
+	((eq mode 'c++-mode)    (c-init-language-vars c++-mode))
+	((eq mode 'objc-mode)   (c-init-language-vars objc-mode))
+	((eq mode 'csharp-mode) (c-init-language-vars csharp-mode))
+	((eq mode 'java-mode)   (c-init-language-vars java-mode))
+	((eq mode 'idl-mode)    (c-init-language-vars idl-mode))
+	((eq mode 'pike-mode)   (c-init-language-vars pike-mode))
+	((eq mode 'awk-mode)    (c-init-language-vars awk-mode))
 	(t (error "Unsupported mode %s" mode))))
 
 ;;;###autoload
@@ -649,7 +649,8 @@ c-basic-common-init
 
   (when (or c-recognize-<>-arglists
 	    (c-major-mode-is 'awk-mode)
-	    (c-major-mode-is '(java-mode c-mode c++-mode objc-mode pike-mode)))
+	    (c-major-mode-is
+	     '(java-mode c-mode c++-mode objc-mode pike-mode csharp-mode)))
     ;; We'll use the syntax-table text property to change the syntax
     ;; of some chars for this language, so do the necessary setup for
     ;; that.
@@ -2739,6 +2740,48 @@ objc-mode
   (cc-imenu-init nil 'cc-imenu-objc-function)
   (c-run-mode-hooks 'c-mode-common-hook))
 
+
+;; Support for C#
+
+(defvar csharp-mode-syntax-table
+  (funcall (c-lang-const c-make-mode-syntax-table csharp))
+  "Syntax table used in csharp-mode buffers.")
+
+(defvar csharp-mode-map
+  (let ((map (c-make-inherited-keymap)))
+    map)
+  "Keymap used in csharp-mode buffers.")
+;; Add bindings which are only useful for C#.
+
+(easy-menu-define c-csharp-menu csharp-mode-map "C# Mode Commands"
+		  (cons "C#" (c-lang-const c-mode-menu csharp)))
+
+;;;###autoload (add-to-list 'auto-mode-alist '("\\.cs\\'" . csharp-mode))
+
+;;;###autoload
+(define-derived-mode csharp-mode prog-mode "C#"
+  "Major mode for editing Csharp code.
+To submit a problem report, enter `\\[c-submit-bug-report]' from a
+csharp-mode buffer.  This automatically sets up a mail buffer with
+version information already added.  You just need to add a description
+of the problem, including a reproducible test case, and send the
+message.
+
+To see what version of CC Mode you are running, enter `\\[c-version]'.
+
+The hook `c-mode-common-hook' is run with no args at mode
+initialization, then `csharp-mode-hook'.
+
+Key bindings:
+\\{csharp-mode-map}"
+  :after-hook (c-update-modeline)
+  (c-initialize-cc-mode t)
+  (setq abbrev-mode t)
+  (c-init-language-vars-for 'csharp-mode)
+  (c-common-init 'csharp-mode)
+  (easy-menu-add c-csharp-menu)
+  (c-run-mode-hooks 'c-mode-common-hook))
+
 
 ;; Support for Java
 
diff --git a/lisp/progmodes/cc-styles.el b/lisp/progmodes/cc-styles.el
index 36be9f6c74..4b84bd7dff 100644
--- a/lisp/progmodes/cc-styles.el
+++ b/lisp/progmodes/cc-styles.el
@@ -215,6 +215,43 @@ c-style-alist
 				(arglist-cont-nonempty)))
      (c-block-comment-prefix . ""))
 
+    ("csharp"
+     (c-basic-offset . 4)
+     (c-comment-only-line-offset . (0 . 0))
+     (c-offsets-alist . ((inline-open . 0)
+			 (topmost-intro         . 0)
+			 (topmost-intro-cont    . +)
+			 (statement-block-intro . +)
+			 (statement-case-intro  . +)
+			 (statement-case-open   . +)
+			 (substatement          . +)
+			 (substatement-open     . 0)
+			 (substatement-label    . +)
+			 (label                 . +)
+			 (statement-case-open   . +)
+			 (statement-cont        . +)
+			 (arglist-intro  . c-lineup-arglist-intro-after-paren)
+			 (arglist-close  . c-lineup-arglist)
+			 (string         . c-lineup-dont-change)
+			 (arglist-cont          . 0)
+			 (block-open            . 0)
+			 (block-close           . 0)
+			 (block-list-entry      . 0)
+			 (block-list-open       . 0)
+			 (block-list-close      . 0)
+			 (case-label            . +)
+			 (catch-label           . 0)
+			 (class-open            . 0)
+			 (class-close           . 0)
+			 (defun-open            . 0)
+			 (defun-close           . 0)
+			 (else-clause           . 0)
+			 (brace-list-intro . (first
+					      c-lineup-2nd-brace-entry-in-arglist
+					      c-lineup-class-decl-init-+ +))
+			 (access-label   . -)
+			 (inher-cont     . c-lineup-java-inher)
+			 (func-decl-cont . c-lineup-java-throws))))
     ("java"
      (c-basic-offset . 4)
      (c-comment-only-line-offset . (0 . 0))
diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el
index 9e6f9527ca..559531fafe 100644
--- a/lisp/progmodes/cc-vars.el
+++ b/lisp/progmodes/cc-vars.el
@@ -549,6 +549,8 @@ c-comment-prefix-regexp
 		  (const :format "C++   " c++-mode) (regexp :format "%v"))
 	    (cons :format "%v"
 		  (const :format "ObjC  " objc-mode) (regexp :format "%v"))
+	    (cons :format "%v"
+		  (const :format "C#  " csharp-mode) (regexp :format "%v"))
 	    (cons :format "%v"
 		  (const :format "Java  " java-mode) (regexp :format "%v"))
 	    (cons :format "%v"
@@ -919,6 +921,9 @@ c-require-final-newline
 	      (cons :format "%v"
 		    (const :format "ObjC  " objc-mode)
 		    (symbol :format "%v" :value ,require-final-newline))
+	      (cons :format "%v"
+		    (const :format "C#  " csharp-mode)
+		    (symbol :format "%v" :value ,require-final-newline))
 	      (cons :format "%v"
 		    (const :format "Java  " java-mode)
 		    (symbol :format "%v" :value ,require-final-newline))
@@ -1003,6 +1008,7 @@ c-objc-method-parameter-offset
   :group 'c)
 
 (defcustom c-default-style '((java-mode . "java") (awk-mode . "awk")
+			     (csharp-mode . "csharp")
 			     (other . "gnu"))
   "Style which gets installed by default when a file is visited.
 
@@ -1031,6 +1037,8 @@ c-default-style
 		  (const :format "C++   " c++-mode) (string :format "%v"))
 	    (cons :format "%v"
 		  (const :format "ObjC  " objc-mode) (string :format "%v"))
+	    (cons :format "%v"
+		  (const :format "C#  " csharp-mode) (string :format "%v"))
 	    (cons :format "%v"
 		  (const :format "Java  " java-mode) (string :format "%v"))
 	    (cons :format "%v"
@@ -1459,6 +1467,11 @@ objc-mode-hook
   :type 'hook
   :group 'c)
 
+(defcustom csharp-mode-hook nil
+  "Hook called by `csharp-mode'."
+  :type 'hook
+  :group 'c)
+
 (defcustom java-mode-hook nil
   "Hook called by `java-mode'."
   :type 'hook
@@ -1613,6 +1626,15 @@ objc-font-lock-extra-types
   :type 'c-extra-types-widget
   :group 'c)
 
+(defcustom csharp-font-lock-extra-types
+  (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw"))
+  (c-make-font-lock-extra-types-blurb "C#" "csharp-mode" (concat
+"For example, a value of (\"[" c-upper "]\\\\sw*[" c-lower "]\\\\sw*\") means
+capitalized words are treated as type names (the requirement for a
+lower case char is to avoid recognizing all-caps constant names)."))
+  :type 'c-extra-types-widget
+  :group 'c)
+
 (defcustom java-font-lock-extra-types
   (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw"))
   (c-make-font-lock-extra-types-blurb "Java" "java-mode" (concat
-- 
2.28.0


--=-=-=--




Acknowledgement sent to Theodor Thornhill <theo@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#43559; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Wed, 21 Jul 2021 14:15:01 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.