From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Sep 2020 10:39:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: 43559@debbugs.gnu.org Cc: acm@muc.de, jostein@kjonigsen.net X-Debbugs-Original-To: bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.160077109022610 (code B ref -1); Tue, 22 Sep 2020 10:39:02 +0000 Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 10:38:10 +0000 Received: from localhost ([127.0.0.1]:57303 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kKfgX-0005sa-HL for submit@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 ) id 1kKfgU-0005sS-Ju for submit@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 ) id 1kKfgT-0003he-BL for bug-gnu-emacs@gnu.org; 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 ) id 1kKfgM-00078f-Gh for bug-gnu-emacs@gnu.org; Tue, 22 Sep 2020 06:38:03 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com 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 Date: Tue, 22 Sep 2020 12:37:54 +0200 Message-ID: <87zh5iyu4d.fsf@thornhill.no> 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@thornhill.no; 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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 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 --=-=-=-- From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Sep 2020 12:52:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: theo@thornhill.no, 43559@debbugs.gnu.org Cc: acm@muc.de, jostein@kjonigsen.net X-Debbugs-Original-To: Theodor Thornhill , bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.160077910911550 (code B ref -1); Tue, 22 Sep 2020 12:52:01 +0000 Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 12:51:49 +0000 Received: from localhost ([127.0.0.1]:57642 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kKhls-00030E-U7 for submit@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 ) id 1kKhln-000303-HQ for submit@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 ) id 1kKhli-0000tp-Vl for bug-gnu-emacs@gnu.org; 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 ) id 1kKhlg-00037n-UO for bug-gnu-emacs@gnu.org; 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: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeggdehkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomheplfhoshhtvghi nhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnihhgsh gvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepieefgeefheeuudfhteehtdejteffudet vdfhteevffelhfffuedukeeitdektdeinecuffhomhgrihhnpehgihhthhhusgdrtghomh dpnhhighhsvghnrdhnohenucfkphepkeegrddvuddurdefvddrudefjeenucevlhhushht vghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehjohhsthgvihhnsehsvg gtuhhrvgdrkhhjohhnihhgshgvnhdrnhgvth X-ME-Proxy: 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) References: <87zh5iyu4d.fsf@thornhill.no> From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Message-ID: 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@thornhill.no> Content-Type: multipart/alternative; boundary="------------910D72FC0831E8C938430626" Content-Language: nb-NO Received-SPF: pass client-ip=66.111.4.26; envelope-from=jostein@secure.kjonigsen.net; 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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@kjonigsen.net 🍵 jostein@gmail.com https://jostein.kjønigsen.no --------------910D72FC0831E8C938430626 Content-Type: text/html; charset=utf-8 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.

--

--------------910D72FC0831E8C938430626-- From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Sep 2020 13:11:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: jostein@secure.kjonigsen.net, 43559@debbugs.gnu.org Cc: acm@muc.de X-Debbugs-Original-To: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= , bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.160078022013298 (code B ref -1); Tue, 22 Sep 2020 13:11:02 +0000 Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 13:10:20 +0000 Received: from localhost ([127.0.0.1]:57675 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kKi3n-0003SQ-Oo for submit@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 ) id 1kKi3l-0003SG-JK for submit@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 ) id 1kKi3k-0004SB-JM for bug-gnu-emacs@gnu.org; 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 ) id 1kKi3h-0005On-7S for bug-gnu-emacs@gnu.org; Tue, 22 Sep 2020 09:10:16 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com 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 In-Reply-To: References: <87zh5iyu4d.fsf@thornhill.no> Date: Tue, 22 Sep 2020 15:10:10 +0200 Message-ID: <87wo0myn2l.fsf@thornhill.no> 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@thornhill.no; 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) Jostein Kj=C3=B8nigsen 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 From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Sep 2020 14:27:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: theo@thornhill.no, 43559@debbugs.gnu.org Cc: acm@muc.de X-Debbugs-Original-To: Theodor Thornhill , bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.160078481031838 (code B ref -1); Tue, 22 Sep 2020 14:27:01 +0000 Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 14:26:50 +0000 Received: from localhost ([127.0.0.1]:32788 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kKjFq-0008HS-Hc for submit@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 ) id 1kKjFp-0008HK-4L for submit@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 ) id 1kKjFo-0004PE-PI for bug-gnu-emacs@gnu.org; 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 ) id 1kKjFl-0007KX-Jg for bug-gnu-emacs@gnu.org; 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: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeggdejjecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomheplfhoshhtvghi nhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnihhgsh gvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepfefhlefhvdevleefudelvdelveekteeu jeegudevgfefgeefieektdelteeuveelnecuffhomhgrihhnpegrshhprdhnvghtpdhnih hgshgvnhdrnhhonecukfhppeekgedrvdduuddrfedvrddufeejnecuvehluhhsthgvrhfu ihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepjhhoshhtvghinhesshgvtghurh gvrdhkjhhonhhighhsvghnrdhnvght X-ME-Proxy: 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) References: <87zh5iyu4d.fsf@thornhill.no> <87wo0myn2l.fsf@thornhill.no> From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Message-ID: <8081dcbd-1e89-c9e6-d691-1270df8f9f19@secure.kjonigsen.net> 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@thornhill.no> Content-Type: multipart/alternative; boundary="------------B15B73055A3E6BA9F2756D5E" Content-Language: en-GB Received-SPF: pass client-ip=66.111.4.27; envelope-from=jostein@secure.kjonigsen.net; 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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 writes: > >> Hey Theo. >> >> Thanks for your work on trying to get something new, and possibly better >> C#-support mainlined in Emacs! > My pleasure - hopefully we'll get there :) > > [...] > Hey Theo. I still haven't looked at the code in your patch, but I've applied it to latest Emacs Git master, and given it a test-run. When going over existing code, everything looks and feels nice. And it's much faster than my "old", non-transferable code. So I definitely think this is a /very good/ start. While I hold no "position" in GNU or Emacs as a whole, I would consider myself a C# veteran (since 2004), and as the old maintainer of old csharp-mode, I think I have some experience which may be useful. So for the time being, I'll just promote myself to being the "critical Emacs C#-user", and provide some feedback based on my expectations for how editing C# should feel or behave. Please don't consider the following comments as negative towards your work, or me in any way trying to dissuade you from getting this mainlined. I'm just here to try to help you ensure that what you land is going to be "good enough" so that it will be easier to argue for inclusion in core-Emacs later on :) So with all that said, so far I've noticed a few things which I think arguably goes against C# convention, and would be nice to get fixed, if possible. There's also a some things where I just feel it would "better" to do things differently. Roughly it boils down to this list: 1. Attributes 2. Object initializers 3. Lambda indentation 4. Misc variables/field fontification issues *First off: **Attributes are not handled properly. ** * In java-mode annotations gets fontified and indented properly: In your current csharp-mode draft, we get no fontification, and we also get a trailing indentation bug for the equivalent C# code: For annotation-heavy frameworks like ASP.Net Core this might get annoying. It would be great if this could get fixed. *Second: Object initializers are not indented properly.* Consider the following fairly simple case. Using the provided patch we get the following indentation: According to C# convention, one would expect something more like this: This one is arguably very hard to get right, because it's a conceptually infinitely recursive problem. (You may initialize a property with another object-initializer.) While solving this perfectly for all cases is clearly out the window, do you think it would be possible at least to make 1-level object-initilizers work? One the bright side /collection-/initializers seems to work just fine :) *Third: Lamda-function indentation when used with higher order functions * Lambdas also suffer from some unexpected indentation issues: Here I would expect the following indentation instead: *Fourth: variable-fontification* Here I have no absolute C# convention to quote for absolute correctness, but it kinda "feels wrong" to me at places. Without a proper language-engine to guide us, it will be literally impossible to know what is a class, a namespace, an enum, a local field or an actual variable at any point in the code, and fontify the code 100% correctly based on that. So we'll have to make due with imperfections, make some pragmatical decisions on what we think will be good default/fallback values, and that's OK. Right now though, all implicitly typed variables (vars), local variables with method-access and local fields with property-access are shown using /font-lock-constant-face/ and that seems a bit off: For var-heavy functions, this inconsistency is somewhat distracting, and I would much prefer a font-lock-variable-face fallback in these cases. As for "_field" and "foo.", I'm not sure what the best fallback would be. Without a language-engine to guide us, this is genuinely hard stuff to get right. By C# convention pascalCased or _underCased identifiers typically represent local variables and object-local fields (and thus might use font-lock-variable-face as a fallback). Conversely CamelCased identifiers typically represent either Classes or public properties/methods on those, depending on identifier in question being dot-accessed or not (and for these another face might make more sense). I'm sure just/discussing/ the///soft-rules/ for these aspects could take months alone, not speaking for the effort required to actually making it happen in code. Consider it something to aim for, but I wouldn't expect anyone to get this right in a version 1 of anything. Otherwise, great work, and thank you for putting in this effort! -- Kind regards *Jostein Kjønigsen* jostein@kjonigsen.net 🍵 jostein@gmail.com https://jostein.kjønigsen.no --------------B15B73055A3E6BA9F2756D5E Content-Type: multipart/related; boundary="------------DBD2136C4585F665CD2A9856" --------------DBD2136C4585F665CD2A9856 Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: 8bit
On 22.09.2020 15:10, Theodor Thornhill wrote:
Jostein Kjønigsen <jostein@secure.kjonigsen.net> writes:

Hey Theo.

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

[...]

Hey Theo.

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

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

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

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

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

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

Roughly it boils down to this list:

1. Attributes

2. Object initializers

3. Lambda indentation

4. Misc variables/field fontification issues


First off: Attributes are not handled properly.

In java-mode annotations gets fontified and indented properly:

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

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


Second: Object initializers are not indented properly.

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

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

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

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

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


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

Lambdas also suffer from some unexpected indentation issues:

Here I would expect the following indentation instead:


Fourth: variable-fontification

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

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

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

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

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

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

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

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

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

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


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

--
--------------DBD2136C4585F665CD2A9856 Content-Type: image/png; name="nhebmpbbonkfichd.png" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="nhebmpbbonkfichd.png" iVBORw0KGgoAAAANSUhEUgAAAQ4AAADMCAIAAAANhNr5AAAABmJLR0QA/wD/AP+gvaeTAAAc g0lEQVR4nO3deXwTdd4H8O8kk2PSHE2PpE3vi3IUCgV5OESu5QZBDkXXlaOAt8Djte7yrOJ6 LKgvFQHhhYCy7gMv9FlcLhcQF0GEWoRylKO0hd53c2cyySR5/kjoEdJ2Sksn6Pf98vWyzS8z +aXkk/n9ZuY7QyhC1VKJBNr2ki52gkodsOmPpTfOWS3tLIvQrwbRFBWZQPBohOZ+hSpCJKp3 Oo8a9bsa6liPp+Wz9/fOOGYyvF9Z3r2deFUXFyeRPHejsHtXi1A3Ir3/CyXJ9xOSi+z0m+Ul FQ4mXiJdER0TSpLrqyv57R9CQcIXlRVRMQU0vbayzPtroZ1+p6J0W0r6ltpqxu3ucC3xEsni yKjMELkQ4LzNurG6ssrpaGrtR8kWaqJSpFKH23PGav68tqaedXqb9vfOEBGE9+dDffp7f5hT cNnicnXXO0SoW5AAkCSRZsnlj1+/CgCjlaplmmiRgPjOaLC73TqR+AZjb38VsWLJR4kpv1gs y4oLWI/nKW30u/FJS4oLvIM3hVD41/jEIwbDm+UlAiAGy+WTQ9Vf1td6l51+9RLgAAzdCwQA MFKhPGOxmFyuGLHkJV3cxprKpUXXdSIxJRA0feW3Y0Gklna736ssq3M69Sy7rqoyTESOU4Z6 W5Mk0hCB8KhRb3a5jC72e6OhKScI3UMEAJAspa7baQCYrg7LtZhPmk1GF7u5porjKrJC5Gct FsetHQBWt6uCcaRKKe+vlQ4H6/Es1UYPlStCBMK78BYQ6gkkACiFQiPLAkC8WHKZtnkbqpwO G4dZigAIuVA4MVQ9MbTVDuWmuUo963yzvOSxCM2bcYkAcJW2ra+uLLTT3fouELrrSADwAPjG WQS03Dfc8dgLwA0eq9t1QN+4tba6refkWMw5FrNUIBgcIn9aq1sVE7+w6FrXuo1QTxMAgJ5l w0kRAJQyTNPAKUokpgQCLqvIs1oHyuQd5srudp80m/bqGyJFIkHrGNJut4Tg9FoI8UUAANdo W19KBgD79Y1D5PIRCqVKSD6pjea4is/rquMkkuXRMdEisVQg6EVRL0TFjFKovK3D5MoXomLS pJREIIiXSMYqQ89ZLe5WWy+4wdhjxOL+shABpy0ZQjwgAeC42bhYExUjllQ4mA8qy5/V6sQC wVGjnuPBjVKGWX6zaEGk9pOkVDFBlDDMIaP+tMXkbT1jNYeLyOXRMfFiidnlyrGYP6/zH6r9 29CYJqX+HBMfSpIEHldBQcl3YssybXRfSvZq6Q0uBxwR+g0SSqQUSZLnbdYhcsW8sMh61mlg Xc7Wp34hhJpPlyQAxihDJ4eqU6WUVCAoYZiVN4sYD25kEAJoGRWEUDtwFy1CnGBUEOIEo4IQ J2TXVzH+kfixc+NWzTsZsPWpdzOTM3yHI1+ZcbytlTz1biZtZb94K7/r/eGCY6962IvPZM6d nuz34PHTVa++eZqX/qCWuiEq7dv02nkAGDUzZsaSlLv9WtwFZ69QMLvrUeHI+9lFAHAmr+75 P/3Idy+QP19UJv0hceQ03eF/lIyeExuiEJVcNf1z4/W6Ct+p8mPnxk14LOFPs33/fol9Vc+s yVz/Ul7pNVPTirLGaic/kShXicoKzHs+LawusXLswdp9D3h/yM9pCDgAGzY5evhUXWQMZdI7 zh+vO7KrhHVwPdpzZ8sKSWLI+Kihk6Ki4kOcDnfxRcO3O240/TUAILGPcvITSbqkEKfDXXBW /++/3zQ2MBxbu2LUsOhF89NTEpV2xpXzS+2G7Zdq6miOraiLmrcqEhmZNU676bULrMP98Ipe 2W/0X/tUrtvF6bC9SCIcNStmy6oLDrt73gu9sldnrFmayzo5faC9U4Wn3s0M2DptcfLwKdHf bC66nFMvlgozhkUk9lYWXjBwWfMdL5uWqY5JkX/1cUFdhU0ZJpn1VOqytwasWeZ7RzIFufj1 jDPf1+x4J58QEL0GqYdOjDqys8S7bPutXTF+VMxf/zjUWy4hFgsnjIkd0C98wfPfG02ODltR 1zXvASMI2L+1qKGKNjYw32wqDIuS9h8RwXEtBAEHthbXVdDGBmbPpkJVuGTgaE3XO6fWSB+Y FXt0d+mZ76ptZtZQx/y4r4JjTrqy7NVfGv+58Xp1idXFevS19u+/KlVFSGJS5N7W6ES5NIQ8 +32tzcxajc5zx2pbJqH9Vi6GDIw8dfChpv+yBkQAAEHA80syCAJyfqmZ8ujBpS/+YLE6tZHU /FmpHbaibtFqZ3HJVd+Aqq6Cpq1sTLKc+4pKbg3GGqpoq8mpSw7peudS+qsIAi6fbujhZQkC 7p8Rs/KTwW99NXLtvgeeXTsQACSUr9q5vop2sZ5pi5N6DwmThvhP9tpvvWOx0XJtpAwANv/9 isHIXLrS+O3RUgAYMjCyw1bULZr/LZ2M28U2D7doCytXizmuxcV6nEzzcIu2sHIV12XbIVOK AMBscPbwsuMfiR87L373R9cKzuq9XxnLP84iBL5aGmM9s+Od/PGPJCz6SwYAlBWY9mwsrCi2 cGnlIuC0XqX0/T1ran0V3dW1NACEKiUdtqJu0RwVkUQgJImmtFBy0mLwDXM9HiBaXLpFLPE/ cCkkCZFE0JSWlst2hc3kBACFWmQzd/oT35VlB47W/HK05vyJOu+vqgj/D9yV3MYruY1iqbBX lvrBpSmP/7HPmmW5HFvvTNOUQ6uRNRoYANBGUgBgNDs6bEXdotWHPqG30vtDZAxFhZCVxb69 WBaDQ0gSlNyXq+ikAIOrhHTfsuHRVIhS5Pc9arOw0GIMw1HRRaPHAxnDuU6ZOrtsW70SS4UO e3NtWcbw8ICLO+yuSz/V/7S/MjRSKhD412+239pZ5VUW7+6spY/3CVWK+6Wrp4yPB4AzebUd tqJu0RwVjwemZ6eER1OqcMnMZan6WvvFk76v1eJ8o9vtGfdwvIQSJvRRDp+qu31F07KTI3SU Mkw8c1mKoZ7J+6HVP9LNyya3yzN8qk4g7MSHRl9r/3Fvxbh58fdNiJIpSFWEZPhUXeqA0O5a tq1eXTvTOGiMJiZFToWQI6bp+v5Xq6j0HRo++5m02FS5SCLQxMkGjdZcP693uz1cWu+YxwMb tl8CgOFDtN/umvbZh2MUclFdA71rT2GHrahbNA/AGBt77ljN03/LlCnIkqumra9fct3aU9xY bd+zsXD8I/Ejp+luXjF9t6v04eW9Wq7FYXflHq5+8p0BIUpR6TXz1tcvtpz2AEBDFf3VuoIJ jyVMWZBEELD696esJicAzH2+19CJUU1P8x5jOfZ12cEvbngf2b+1qL6SHvVgzENPp5r1jjNH a3KPmICbDpdtq1cHthcLRYKlf+1PigTFl4y7PypY+D/9mpa6drZRGS6e/WwvbZzMZnZeOdP4 7x03ObZ2xZFj5QzjWjg/PTVRZWdcOWdrNmzLN9waerXfirrOV6/iPQT5l/k/8d0fhIIUnlmM ECcYFYQ4wYJhhDjBrQpCnGBUEOIEo4IQJ/7n8yUmJq5YuTwtLY2m6blz5vHSJ4SCkH9UlizN 1mg0S7KXVle3eRMIhH6D/KMSFxeXfym/qorrLbsQ+o3wn6uQJOlw4NkQCPkLMK33AF7bGyF/ /lFRKBQ03cHdtxH6DWpxGQqJZMKE3ykUirxzeTx2CKHg5IvK4MGD3//gPQD417/2njwZ+DqR CP2W+W5FVFVVtWvnrrLy8iVLsq8XFJSVlfPdMYSCS/NchWGYw4cOG/SGQVlZPHYIoeDkP623 0TaKkvLSFYSCWYCdxQTeERuh2/hHhWVZkVjES1cQCmb+USkvK8/ol6HValte+Ash5F8FmZyc vGLl8tTUVJqm58yey2PPEAoqWDCMECdY2oUQJxgVhDjBqCDESbDcCzKgldGxk0PVfg86PZ7p Vy/x0h/0W8b/tF4mEDwaoblfoYoQieqdzqNG/a6GOtYToGYmQSLdmJR6k7E/ewOvWo16Gs9b lVCSfD8huchOv1leUuFg4iXSFdExoSS5vrry9ic/H6UTEsS6QE0I3W08R2VFVEwBTa+tLPP+ Wmin36ko3ZaSvqW2mnG3uuvqBJW6vyxkr77hGm1renBQiHxRpDZJSjFud67FvLm2ysCyHFsR 6hQ+p/VJEmmWXL6pphIARitV/0jtvbtXn+nqcLvbrRO1uj+eXChcqo1qYJ3ba5uvI5Mmpd6O S7xK049fv/pSSXGqlHorLpHg1opQZ/EZlZEK5RmLxeRyxYglL+niNtZULi26rhOJKYFA1Pq0 msWRUSohuaG60tZiU/NQWITJ5dpcW2V0sTcZ++baqjQpNShEzqUVoc7iMyrJUuq6nQaA6eqw XIv5pNlkdLGba/yvq5ROyaaqw05bTCfNptaPU1dom+vWDoBLNisA9KZkXFoR6iw+o6IUCo0s CwDxYkmRnfY+WOV0tNx0CIB4IUpnd7s33DabDxEIza7mOzba3W7W45ELhVxaEeosPqPiAfCN s4hW11NqOfaaERaWKqV21NXUOv1vFGx1uxQtPvpSgYAkCMuteLTfilBn8RkVPcuGkyIAKGWY VCnlfTBKJKYEvl6pSXJBpLbQTn/T2HD74gU03YeSCW/NajJkIQDQtH+s/VaEOovPqFyjbX0p GQDs1zcOkctHKJQqIfmkNrrpCYs1UZRA8FFVhTvQVfz26OtVpPBJTbRKSCZKpE9qogvt9Dmr lUsrQp3F59H6SJHo85T0ZcXXKxzMaKVqmSZaLBAcNeonqNSvld4osNMfJ6YEnIgvKrpW6XAA wJAQxYJIbZJUyrjduVbz5poqfYsjJ+23ItQpPJ/Yskwb3ZeSvVp6w++AI0LBxncdML5e/rzN OkSumBcWWc86DazLGejUL4SCAf+nSxIAY5Shk0PVqVJKKhCUMMzKm0WMBzcyKLjwHxWE7glY 2oUQJxgVhDjBqCDESVAXDAMAJRA8HqEdpVSqSVGlgzmgb9yvbwx4RBKhu4r/qLRTMCwmiPcS kkmCeKu89CZj7ycLeSk6tpixe08TRqgn8XxcJZQkP0xMcXjcG6orP6utumCzzg2PTJRIf7aY AWB+hOYBpeq/bxaXOBgXQLXTccZq9gA04kF31OOCumB4Uqj6os1a7Wy+43Epw7RcHAuGUY8J 3oJhlZDUisTFTJv3cMWCYdSTgrdgOIwkAcDU9nYAC4ZRTwr2guGmXV3PRukO9el/qE//l3Sx 3kewYBj1pOAtGNa7WABQCn2zqQ3VlZOuXGxZC4kFw6gnBW/BsIFla53ORGmb56dhwTDqSUFd MHzEqM+UySPIwDfcw4Jh1JOCumB4d0NduYN5PTYhWSoVEURvShYibO4wFgyjnhTUBcMAIBcK H4/QjFKoVCRZzzovWK27Gmq91cKABcOoB2HBMEKcYMEwQpzwXwWJBcPonsB/VBC6J2BpF0Kc YFQQ4gSjEnTEYuGpgw+dOvjQfYM0fPcFNeO/CvKOjX8kfuzcuFXzTgZsferdzOQMlffnV2Yc b2slT72bSVvZL97KvytdvJt2rB+Xlqz69PP8HbsLOnzy+yv6jRgQBgAeD+jNjis3LJ99U3Kt xNK9XXrl1VcoqXT16jdbPqhUKnfu/N9Vq1adO5fXvS/Xw361W5VNr51/ZcbxfZ8V8d2RYFGn d4xYfOL+JScWrT5HM65PXu6vUXfn7py0XmmTJk3cvv1zv8dNJtPXX3/93HPPEcS9XS70q40K R5teOx9smxSHwzV86p7hU/fknqvt9pV7PFCnd2zfVyqXkf+Voe7GNT/26KPnz18oLS29vWnf vv2JSUnDhg3rxpfreTwPwCb9IXHkNN3hf5SMnhMbohCVXDX9c+P1ugrfCflj58ZNeCzhT7N/ 9P6a2Ff1zJrM9S/llV5rvtNd1ljt5CcS5SpRWYF5z6eF1SVcz/Jau+8B7w/5OQ0B0zJscvTw qbrIGMqkd5w/XndkVwnr6OBoT0afsC0fjPZ4YNrvD+oNDAA8Njvt+SUZ5ZXWeUsOe58zalj0 ovnpKYlKO+PK+aV2w/ZLNXW+93vfIM26t0c2re2FP59smRaKIl9+JnPMCJ3Z6ly35SLHtxmQ mBQAgEjk+5oXkcSUkdqZD0QlxYQ4nO6zVw2b/u9maTXd9PzkmJAv/5r18sf5A9KU0+7XAsBX 31V+sb+s6Qkqler+Ufd/9OHHAV+uvr7+4sUL02dMP3XqVFe6zS/+tyoSGZk1TrvptQtrluW6 3Z7sN/oLhFy31CKJcNSsmC2rLqxZmutk3NmrM0gR13f0yozjr8w4XnzJGLB12uLk6dnJJ/ZW vLXw9KbXzpv1jsTeyg7XmX+1sUFvJwgYMjDS+8h9gyIB4Php3935xo+KWfM/w/r0UovFQqVC PGFM7Ob3R6uU4jbX2MLLz2ZOGR9PUaQmgnrj5SHaSIrT+2yNIEAbLlkyK8FkZY+f9d3gaUif 0PQE+dvbrk967qeFb5wVkYJ1L/cXkf5/yYUz4gFg8eq8xavz5DKy5RMGZQ0iSfL8hfNtve7F CxezsgYJ7+V6If6jQhCwf2tRQxVtbGC+2VQYFiXtPyKC+7IHthbXVdDGBmbPpkJVuGTg6G7Y a6TWSB+YFXt0d+mZ76ptZtZQx/y4r6LwgqHDBT0e+DGnGgCGDtQAgIgUZPaLAIATp6u8vX1+ SQZBQM4vNVMePbj0xR8sVqc2kpo/K9W7eO652uFT94yetff2NctDRBNHxwHAgSOlEx/ev+XL K0oFp4A1iVSLf9o26uTWUXveG5qeIP/jJ5frDb6zTk9d1L+3o7C4wupkPdUNzI4DZRq1JD3B v7jaYmM//fpmrZ6p1TMbdt9wss3b2PT0dIfDUV5W3tarFxUVSaXShISETvU5qPAfFQAoueob UNVV0LSVjUnuRAV8ya3BWEMVbTU5dckhXe9PSn8VQcDl0wHuqtchbyq8G5P+fcMoqdBgcly4 3AgAsdFybaQMADb//YrByFy60vjt0VKA5k1QO5ITlEIhAQDbdl4xW5xffn3dYvW/OWb7vNP6 kdknZr6Y858z9R+s7Nc70fd3FhAw73e6Hauzjn464qdtozb/KRMAZFL/LUDTVuh2YWq12WRu 59WNRiMAhIV15+yoh/EfFSfjdrHNZ0nSFlau5vp96WI9Tqb5u422sHJV575rA5IpRQBgNnTu s+iVm1dH213aSFmcTn7fQA0AnMypdrs9ANA00Kqp9VWYVdfSABCq7HhPFEX5ZpV19XYAcLs9 DY1tXsumHd5p/cc7i0wWdtGMeO+DC6bHPzM3aceBspkv/jxi8YmFb5wDAMFtH406A+P/UBOC 8LR/yU+C8L76vYv/qIgkAiHZPDmh5KTl1sDA44GWexjFEv/eCklC1OLBlst2hc3kBACFOnD1 ZfscDlfOLzUAcN+gyKGDNNBiomI0+fqm1fiuhuGdbxjNHfdZf+tjGhkhBQCBgAgPk95B97zc HiivpRN1vm5MHBZ58Kea736us9hYANCEBf66YV1tftIbGxtVKlU7u4NVSiUA6PX6O+4z7/iP CgAk3JoxR8ZQVAhZWezbi2UxOIQkQcl9X6jRSQEGVwnpvmXDo6kQpaiiuNVhNZuFBQAJ1bnZ ZNFFo8cDGcO5Tpn8HD9dBQBjR8b0TgtlHK6fz/r2YpVXWbw7u5Y+3idUKe6Xrp4yPh4AzuR1 vFO4osricLgAYNH83vIQ0WOzU+Uhd5LkJpFqidnmK3STSoR2pvmqA6OzOv3Gr127JhKJYmNj 23pCSkqK3W4vKSm5g64GCf6j4vHA9OyU8GhKFS6ZuSxVX2u/eLLO21Scb3S7PeMejpdQwoQ+ yuFTdbcvPi07OUJHKcPEM5elGOqZvB9afexuXja5XZ7hU3Xc96oBgL7W/uPeinHz4u+bECVT kKoIyfCputQBoRwXP/lztdvtGTIwUiAgcs/VNX0KPR7YsP0SAAwfov1217TPPhyjkIvqGuhd ewq9T9jz+aRTBx/64ZsHvb+ue3uk9wwXTQRltbH//k8ZAEyfmHDkq+nLnuhrMN3h9lOtFGXP TIiPor455ruO1OmL+onDNOkJcrmMnDNOd//AsM6u89zZcyzLDhgwoK0nDMjMPHv2nOtevgwI /ye2MDb23LGap/+WKVOQJVdNW1+/5Lq1oW+stu/ZWDj+kfiR03Q3r5i+21X68PJeLZd12F25 h6uffGdAiFJUes289fWLLac9ANBQRX+1rmDCYwlTFiQRBKz+/SmryQkAc5/vNXRiVNPTvMdY jn1ddvCLG95H9m8tqq+kRz0Y89DTqWa948zRmtwjJuDGZHacz28Y1D8CWoy+vI4cK2cY18L5 6amJKjvjyjlbs2FbPscP/botFykpOWpYtMnsWL/t0h/m9grltpfZy7sHDABoxlVcYVu95dqh U76vlfW7i0mS+OjFDLFIkHfN+Pa2grUv9OO+ZgAwGo0njp8Y/7vxBw4cuL1Vo9FkZGSs+vOq Tq0z2PBcr+I9BPmX+T/x1QHUXdJ6pW3a9OniRdm3j7IWZy8eOXLEkuylnnt5Xs//AAz9Olwv uH7o0OGFixb6Pa5UKufMmb3+k/X3dE4gGAZg6Fdj7Zq1tz9oMpmmTZ3e853pdlgwjBAnOABD iBOMCkKcYFQQ4iRYpvWJiYkrVi5PS0ujaXrunHl8dwchf8ESlSVLszUazZLspdXV1Xz3BaEA giUqcXFx+Zfyq6qqOn4qQnwIlrkKSZIORzecFIzQXRIsUQGADgoeEOJVsERFoVDQ9J3UKiHU M/ifq0gkkgkTfqdQKPLu8UuqoV83nqMyePDg9z94DwD+9a+9J08Gvk4kQsGA51sRVVVV7dq5 q6y8fMmS7OsFBWVtX/IDIX7xP1dhGObwocMGvWFQVhbffUGoTfxHxctG2yjqzq+rgNDdFixR AQAC7u3LP6Nft2CJCsuyInGXLkGC0F0VLFEpLyvP6Jeh1Wrv9VsLoF+rYKmCTE5OXrFyeWpq Kk3Tc2bP5bs7CPkLlqggFOSCZQCGUJDDqCDECUYFIU4wKghxglFBiBOMCkKcYFQQ4gSjghAn GBWEOMGoIMQJRgUhTjAqCHGCUUGIE4wKQpxgVBDiBKOCECcYFYQ4waggxAlGBSFOMCoIcYJR QYgTjApCnPB8JfzBgwd/+Y+/P/jgjKjo6NzcXI8Hb9yFghT/N43Y+b8762prn3xy2dUrV8vL 8aYRKEjxPwBzOp3/+c8xt9sTFx/Hd18QahP/UQEAt9vtcrEi/jZuCHUoKKICADhLQUEuWKJi t9sVCgXfvUCoTcESlby8vNFjRicmJuJNI1BwCpYr4YdHhH/04YexcbF6vX72Q3P47g5C/oJl Jr38hRcAYMETC8vKyvjuC0IBBMsALHNg5g8//FBaWorzexScgiUqUqnUZrPx3QuE2hQsUcHZ PApyQREVgUAgFJJOluW7Iwi1if9pPSkiRz/wgEBAlJfhCWAoePEclcGDB699b63BoN+7d19O Tg6/nUGoHcFyXAWhIBcUcxWEgh9GBSFOMCoIceKrgsTCXYTa54sKFu4i1L7mARgW7iLUjlZz FSzcRagt/tN6nKUgFJB/VLBwF6GA/KOChbsIBeR/YgsW7iIUkP8MHgt3EQrIfwCGhbsIBeQf FSzcRSgg/6jgbB6hgFpFBQt3EWpL87QeC3cRaocvKli4i1D7sGAYIU6wtAshTjAqCHGCUUGI E4wKQpxgVBDiBKOCECcYFYQ4waggxAlGBSFOMCoIcYJRQYgTjApCnGBUEOIEo4IQJxgVhDjB qCDECUYFIU7+Hx7nHea5qHSiAAAAAElFTkSuQmCC --------------DBD2136C4585F665CD2A9856 Content-Type: image/png; name="epihfhegglofbbha.png" Content-Transfer-Encoding: base64 Content-ID: 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: Content-Disposition: inline; filename="hfhhbebmljemcgca.png" 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 --------------DBD2136C4585F665CD2A9856 Content-Type: image/png; name="fiaafecacbkbgbkh.png" Content-Transfer-Encoding: base64 Content-ID: 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: 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: Content-Disposition: inline; filename="mehgknkpcccjilmm.png" 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 --------------DBD2136C4585F665CD2A9856 Content-Type: image/png; name="jognflfdjkamkonl.png" Content-Transfer-Encoding: base64 Content-ID: Content-Disposition: inline; filename="jognflfdjkamkonl.png" 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 --------------DBD2136C4585F665CD2A9856 Content-Type: image/png; name="igcegelpjofikpgg.png" Content-Transfer-Encoding: base64 Content-ID: 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 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 h/yS6MK+AAAAAElFTkSuQmCC --------------DBD2136C4585F665CD2A9856-- --------------B15B73055A3E6BA9F2756D5E-- From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 22 Sep 2020 21:16:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: jostein@secure.kjonigsen.net, 43559@debbugs.gnu.org Cc: acm@muc.de X-Debbugs-Original-To: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= , bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.16008093197904 (code B ref -1); Tue, 22 Sep 2020 21:16:02 +0000 Received: (at submit) by debbugs.gnu.org; 22 Sep 2020 21:15:19 +0000 Received: from localhost ([127.0.0.1]:33606 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kKpd7-00023N-Nt for submit@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 ) id 1kKpd3-00023C-Ft for submit@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 ) id 1kKpd3-00045m-80 for bug-gnu-emacs@gnu.org; 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 ) id 1kKpcx-0006DC-5z for bug-gnu-emacs@gnu.org; Tue, 22 Sep 2020 17:15:12 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com 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 In-Reply-To: <8081dcbd-1e89-c9e6-d691-1270df8f9f19@secure.kjonigsen.net> References: <87zh5iyu4d.fsf@thornhill.no> <87wo0myn2l.fsf@thornhill.no> <8081dcbd-1e89-c9e6-d691-1270df8f9f19@secure.kjonigsen.net> Date: Tue, 22 Sep 2020 23:15:04 +0200 Message-ID: <87r1qt4ip3.fsf@thornhill.no> 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@thornhill.no; 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -2.4 (--) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Jostein Kj=C3=B8nigsen writes: > On 22.09.2020 15:10, Theodor Thornhill wrote: >> Jostein Kj=C3=B8nigsen 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 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 --=-=-=-- From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 23 Sep 2020 08:48:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: theo@thornhill.no, 43559@debbugs.gnu.org Cc: acm@muc.de X-Debbugs-Original-To: Theodor Thornhill , bug-gnu-emacs@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.160085082630823 (code B ref -1); Wed, 23 Sep 2020 08:48:01 +0000 Received: (at submit) by debbugs.gnu.org; 23 Sep 2020 08:47:06 +0000 Received: from localhost ([127.0.0.1]:34491 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kL0Qb-000814-Nx for submit@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 ) id 1kL0QZ-00080v-D4 for submit@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 ) id 1kL0QZ-0006LI-1d for bug-gnu-emacs@gnu.org; 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 ) id 1kL0QW-0007nW-2O for bug-gnu-emacs@gnu.org; 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: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrudeigddtkecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefuvfhfhffkffgfgggjtgesrgdtreertdefjeenucfhrhhomheplfhoshhtvghi nhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnihhgsh gvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepudfffeffveffffehveeivedvveduvdff ueegfeejlefggfefgfdvffetfefgheehnecuffhomhgrihhnpehnihhgshgvnhdrnhhone cukfhppeekgedrvdduuddrfedvrddufeejnecuvehluhhsthgvrhfuihiivgeptdenucfr rghrrghmpehmrghilhhfrhhomhepjhhoshhtvghinhesshgvtghurhgvrdhkjhhonhhigh hsvghnrdhnvght X-ME-Proxy: 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) References: <87zh5iyu4d.fsf@thornhill.no> <87wo0myn2l.fsf@thornhill.no> <8081dcbd-1e89-c9e6-d691-1270df8f9f19@secure.kjonigsen.net> <87r1qt4ip3.fsf@thornhill.no> From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Message-ID: <3b523279-b05b-427b-7aeb-0e970d787704@secure.kjonigsen.net> 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@thornhill.no> Content-Type: multipart/alternative; boundary="------------091FB645DEE82464D7A7865E" Content-Language: en-GB Received-SPF: pass client-ip=64.147.123.21; envelope-from=jostein@secure.kjonigsen.net; 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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@kjonigsen.net 🍵 jostein@gmail.com https://jostein.kjønigsen.no --------------091FB645DEE82464D7A7865E Content-Type: multipart/related; boundary="------------207598F6F335CF36EADC430B" --------------207598F6F335CF36EADC430B Content-Type: text/html; charset=utf-8 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?

--------------207598F6F335CF36EADC430B Content-Type: image/png; name="cbdccnkapbnidcfb.png" Content-Transfer-Encoding: base64 Content-ID: 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: Content-Disposition: inline; filename="dadgfepfdgfigdjo.png" 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 --------------207598F6F335CF36EADC430B Content-Type: image/png; name="kgdddfodhnglljmd.png" Content-Transfer-Encoding: base64 Content-ID: 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: 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: Content-Disposition: inline; filename="nhalblonfacnkbej.png" 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 --------------207598F6F335CF36EADC430B-- --------------091FB645DEE82464D7A7865E-- From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Alan Mackenzie Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 23 Sep 2020 10:13:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Theodor Thornhill Cc: 43559@debbugs.gnu.org, jostein@kjonigsen.net Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.16008559229938 (code B ref 43559); Wed, 23 Sep 2020 10:13:01 +0000 Received: (at 43559) by debbugs.gnu.org; 23 Sep 2020 10:12:02 +0000 Received: from localhost ([127.0.0.1]:34605 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kL1kn-0002aA-J1 for submit@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 ) id 1kL1kk-0002Zh-H6 for 43559@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 Message-ID: <20200923101150.GB6178@ACM> References: <87zh5iyu4d.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <87zh5iyu4d.fsf@thornhill.no> X-Delivery-Agent: TMDA/1.1.12 (Macallan) From: Alan Mackenzie X-Primary-Address: acm@muc.de X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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 > Kjnigsen (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). From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 23 Sep 2020 18:39:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Alan Mackenzie Cc: 43559@debbugs.gnu.org, jostein@kjonigsen.net Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.160088630824110 (code B ref 43559); Wed, 23 Sep 2020 18:39:01 +0000 Received: (at 43559) by debbugs.gnu.org; 23 Sep 2020 18:38:28 +0000 Received: from localhost ([127.0.0.1]:37836 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kL9eu-0006Gm-86 for submit@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 ) id 1kL9ep-0006GU-GQ for 43559@debbugs.gnu.org; Wed, 23 Sep 2020 14:38:26 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com 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 In-Reply-To: <20200923101150.GB6178@ACM> References: <87zh5iyu4d.fsf@thornhill.no> <20200923101150.GB6178@ACM> Date: Wed, 23 Sep 2020 20:38:22 +0200 Message-ID: <87o8lw49up.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.10 X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Alan Mackenzie 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 From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 28 Sep 2020 19:54:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Alan Mackenzie Cc: 43559@debbugs.gnu.org, jostein@kjonigsen.net Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.160132278210884 (code B ref 43559); Mon, 28 Sep 2020 19:54:02 +0000 Received: (at 43559) by debbugs.gnu.org; 28 Sep 2020 19:53:02 +0000 Received: from localhost ([127.0.0.1]:54063 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1kMzCo-0002pQ-Ai for submit@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 ) id 1kMzCl-0002ow-0M for 43559@debbugs.gnu.org; Mon, 28 Sep 2020 15:53:01 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com 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 In-Reply-To: <20200923101150.GB6178@ACM> References: <87zh5iyu4d.fsf@thornhill.no> <20200923101150.GB6178@ACM> Date: Mon, 28 Sep 2020 21:52:00 +0200 Message-ID: <87ft714r33.fsf@thornhill.no> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Score: -0.10 X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Hello, Alan! Alan Mackenzie 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 From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 21 Jul 2021 12:20:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch To: Theodor Thornhill Cc: Alan Mackenzie , jostein@kjonigsen.net, Stefan Monnier , 43559@debbugs.gnu.org Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.162686998918446 (code B ref 43559); Wed, 21 Jul 2021 12:20:02 +0000 Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 12:19:49 +0000 Received: from localhost ([127.0.0.1]:36371 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6BCX-0004nR-LO for submit@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 ) id 1m6BCW-0004nB-5W for 43559@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 ) id 1m6BCL-0006QP-2D; Wed, 21 Jul 2021 14:19:39 +0200 From: Lars Ingebrigtsen References: <87zh5iyu4d.fsf@thornhill.no> <20200923101150.GB6178@ACM> <87ft714r33.fsf@thornhill.no> 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@thornhill.no> (Theodor Thornhill's message of "Mon, 28 Sep 2020 21:52:00 +0200") Message-ID: <87czrbkgfb.fsf@gnus.org> 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 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Theodor Thornhill 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 From debbugs-submit-bounces@debbugs.gnu.org Wed Jul 21 08:20:05 2021 Received: (at control) by debbugs.gnu.org; 21 Jul 2021 12:20:05 +0000 Received: from localhost ([127.0.0.1]:36375 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6BCm-0004oW-T1 for submit@debbugs.gnu.org; Wed, 21 Jul 2021 08:20:05 -0400 Received: from quimby.gnus.org ([95.216.78.240]:42068) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6BCl-0004nn-5S for control@debbugs.gnu.org; Wed, 21 Jul 2021 08:20:03 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=MqH+4K1KFcqmIJk25TS2WmS9GdHBy7TADq2Z+admVLI=; b=goYhogyfsM7t4WyP+8547iX9rg FhEOioiPebBxUi3vx60Uxz1R5vLS7z/qSK8wrZ0O5n0lhbEMttzhglnJJjbmgLCa+ueSDcKKvWFag 5AbIt3e+7Zl95W+4z26R5+zpeTwQsi6/IKwRgCqKePyyB03aRGvw5VyrH4ysuZ1K7WK8=; 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 ) id 1m6BCd-0006Qg-Bw for control@debbugs.gnu.org; Wed, 21 Jul 2021 14:19:57 +0200 Date: Wed, 21 Jul 2021 14:19:54 +0200 Message-Id: <87bl6vkget.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #43559 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: tags 43559 - patch quit 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: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) tags 43559 - patch quit From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode References: <87zh5iyu4d.fsf@thornhill.no> Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 21 Jul 2021 12:38:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Lars Ingebrigtsen Cc: Alan Mackenzie , jostein@kjonigsen.net, Stefan Monnier , 43559@debbugs.gnu.org Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.162687102729051 (code B ref 43559); Wed, 21 Jul 2021 12:38:02 +0000 Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 12:37:07 +0000 Received: from localhost ([127.0.0.1]:36397 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6BT2-0007Xr-NS for submit@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 ) id 1m6BSx-0007Xc-58 for 43559@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== Message-ID: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> X-Android-Message-ID: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> In-Reply-To: <87czrbkgfb.fsf@gnus.org> X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Theodor Thornhill 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@thornhill.no X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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+ From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 21 Jul 2021 12:59:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Theodor Thornhill Cc: Alan Mackenzie , Lars Ingebrigtsen , jostein@kjonigsen.net, 43559@debbugs.gnu.org Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.162687231731553 (code B ref 43559); Wed, 21 Jul 2021 12:59:02 +0000 Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 12:58:37 +0000 Received: from localhost ([127.0.0.1]:36466 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6Bo4-0008Cr-Ts for submit@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 ) id 1m6Bo3-0008Cd-93 for 43559@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 Message-ID: References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> Date: Wed, 21 Jul 2021 08:58:23 -0400 In-Reply-To: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> (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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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 From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Theodor Thornhill Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 21 Jul 2021 13:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: Alan Mackenzie , Lars Ingebrigtsen , jostein@kjonigsen.net, 43559@debbugs.gnu.org Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.16268734891002 (code B ref 43559); Wed, 21 Jul 2021 13:19:02 +0000 Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 13:18:09 +0000 Received: from localhost ([127.0.0.1]:36494 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6C6z-0000G6-Gj for submit@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 ) id 1m6C6v-0000Fp-F8 for 43559@debbugs.gnu.org; Wed, 21 Jul 2021 09:18:08 -0400 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com 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 In-Reply-To: References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> Date: Wed, 21 Jul 2021 15:18:02 +0200 Message-ID: MIME-Version: 1.0 Content-Type: text/plain X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: theo@thornhill.no X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.7 (-) Stefan Monnier 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 From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 21 Jul 2021 14:07:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: "Stefan Monnier" , "Theodor Thornhill" Cc: Alan Mackenzie , Lars Ingebrigtsen , Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= , 43559@debbugs.gnu.org Reply-To: jostein@kjonigsen.net Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.16268763847493 (code B ref 43559); Wed, 21 Jul 2021 14:07:01 +0000 Received: (at 43559) by debbugs.gnu.org; 21 Jul 2021 14:06:24 +0000 Received: from localhost ([127.0.0.1]:38153 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m6Crf-0001wn-PM for submit@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 ) id 1m6Cre-0001wa-1j for 43559@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: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvtddrfeeggdeiiecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecusecvtfgvtghiphhivghnthhsucdlqddutddtmdenuc fjughrpefofgggkfgjfhffhfhrvffutgesrgdtreerreerjeenucfhrhhomheplfhoshht vghinhgpmfhjpphnihhgshgvnhcuoehjohhsthgvihhnsehsvggtuhhrvgdrkhhjohhnih hgshgvnhdrnhgvtheqnecuggftrfgrthhtvghrnhepjeevfeffieeijeegtdejkeejgfev tefhuefhudettdelgffghfeujeefuedvhefhnecuffhomhgrihhnpehkjhhnihhgshgvnh drnhhonecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhep jhhoshhtvghinhesshgvtghurhgvrdhkjhhonhhighhsvghnrdhnvght X-ME-Proxy: 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@www.fastmail.com> In-Reply-To: References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> Date: Wed, 21 Jul 2021 16:05:53 +0200 From: Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= Content-Type: multipart/alternative; boundary=40f0322d817f4c4692375f2b179d9c09 X-Spam-Score: -0.7 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" 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@kjonigsen.net =F0=9F=8D=B5 jostein@gmail.com https://jostein.kj=C3=B8nigsen.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
On vacation wit= hout a laptop, but just chiming in that I=E2=80=99ve previously done the= required FSF copyright assignment. 

S= o any commits on my part should not lead to any additional paperwork.&nb= sp;

--
Vennlig hilsen
Jostein= Kj=C3=B8nigsen

=

On Wed, Jul 21, 2021, at 14:58, Stefan Mon= nier wrote:
> > Great!  Including it in GNU ELPA would be cool.  St= efan?

Fine by me.

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

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

Th= at 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



--40f0322d817f4c4692375f2b179d9c09-- From unknown Sat Jun 14 19:26:34 2025 X-Loop: help-debbugs@gnu.org Subject: bug#43559: 28.0.50; [PATCH] Add csharp support to cc-mode Resent-From: Lars Ingebrigtsen Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 25 Aug 2021 16:09:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 43559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Theodor Thornhill Cc: 43559@debbugs.gnu.org, Jostein =?UTF-8?Q?Kj=C3=B8nigsen?= , Stefan Monnier , Alan Mackenzie , jostein@kjonigsen.net, jose.junior@wildlifestudios.com Received: via spool by 43559-submit@debbugs.gnu.org id=B43559.162990769215110 (code B ref 43559); Wed, 25 Aug 2021 16:09:02 +0000 Received: (at 43559) by debbugs.gnu.org; 25 Aug 2021 16:08:12 +0000 Received: from localhost ([127.0.0.1]:47424 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mIvRf-0003va-RK for submit@debbugs.gnu.org; Wed, 25 Aug 2021 12:08:11 -0400 Received: from quimby.gnus.org ([95.216.78.240]:38508) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mIvRa-0003ul-UC for 43559@debbugs.gnu.org; Wed, 25 Aug 2021 12:08:07 -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=XKkWIYzO7B1kYrwrp+EnACE/zZGa3mU0Pe01Tn9GOGQ=; b=ephIAWYMqm9dCXaKWn5NjWLMJU x/5XqZmxLYdWlFoA73DLc4HIDPMmBS01Bbz7/3SQZnsMRKRh5LLNuSohhFcnOVGlXJ7Cwk6y7omrP 2gw5bCdmL95vbo+cmhn44CPSLIt1minScKn6Wfb6JL32G9znJVZQzJHyGOkD3OfLMb+s=; Received: from [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 ) id 1mIvRO-0006MR-Cs; Wed, 25 Aug 2021 18:07:54 +0200 From: Lars Ingebrigtsen References: <3a5043ee-ae0e-426f-b74d-fbba25ea4b21@email.android.com> <35791e76-b783-4856-a4e4-adf7996b5a45@www.fastmail.com> <325FA529-DED9-4061-8536-39168D18A504@thornhill.no> Date: Wed, 25 Aug 2021 18:07:49 +0200 In-Reply-To: <325FA529-DED9-4061-8536-39168D18A504@thornhill.no> (Theodor Thornhill's message of "Wed, 25 Aug 2021 18:05:50 +0200") Message-ID: <87zgt533u2.fsf@gnus.org> 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 writes: > Seeing how this is how included to elpa I guess this issue can be closed :) > thanks for your patience! :-) 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-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) Theodor Thornhill writes: > Seeing how this is how included to elpa I guess this issue can be closed :) > thanks for your patience! :-) I'm closing this issue, then. From debbugs-submit-bounces@debbugs.gnu.org Wed Aug 25 12:08:17 2021 Received: (at control) by debbugs.gnu.org; 25 Aug 2021 16:08:17 +0000 Received: from localhost ([127.0.0.1]:47427 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mIvRm-0003vx-00 for submit@debbugs.gnu.org; Wed, 25 Aug 2021 12:08:17 -0400 Received: from quimby.gnus.org ([95.216.78.240]:38526) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1mIvRh-0003vR-Ef for control@debbugs.gnu.org; Wed, 25 Aug 2021 12:08:13 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnus.org; s=20200322; h=Subject:From:To:Message-Id:Date:Sender:Reply-To:Cc: MIME-Version:Content-Type:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=y7M9PV+x0PeKarSRcwvvE4TzVNdeV5/+Wd03ArB5xfg=; b=IKuC8xkw+B64mMbMxLvt01E5kQ qpXyEStJ4cX6CVQBmMF8FowhInpJovu4Yi3GzFXBdYMpDBbC1wDBvIpSg50RJOCcUPgV+zu8ochI7 i+IiDfguzZI0W7D/+b5eGwembvLJ2mDFLS1BWkFlFDbvxOBEGR1m53JxbNMzdQB2zkIc=; Received: from [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 ) id 1mIvRZ-0006Mf-H9 for control@debbugs.gnu.org; Wed, 25 Aug 2021 18:08:03 +0200 Date: Wed, 25 Aug 2021 18:08:01 +0200 Message-Id: <87y28p33tq.fsf@gnus.org> To: control@debbugs.gnu.org From: Lars Ingebrigtsen Subject: control message for bug #43559 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: close 43559 28.1 quit 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: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) close 43559 28.1 quit