1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-24 07:20:37 +00:00

Tweak regexp for object initializers in csharp-mode (bug#69571)

* lisp/progmodes/csharp-mode.el (csharp-guess-basic-syntax): Add
handling to not consider ended statements as object init openers.
* test/lisp/progmodes/csharp-mode-resources/indent.erts: New test
resources.
* test/lisp/progmodes/csharp-mode-tests.el: Add test for this particular
issue.
This commit is contained in:
Theodor Thornhill 2024-03-16 20:28:10 +01:00
parent f48babb112
commit c890622e1a
3 changed files with 54 additions and 2 deletions

View File

@ -495,9 +495,12 @@ compilation and evaluation time conflicts."
(unless (eq (char-after) ?{)
(ignore-errors (backward-up-list 1 t t)))
(save-excursion
;; 'new' should be part of the line
;; 'new' should be part of the line, but should not trigger if
;; statement has already ended, like for 'var x = new X();'.
;; Also, deal with the possible end of line obscured by a
;; trailing comment.
(goto-char (c-point 'iopl))
(looking-at ".*new.*")))
(looking-at "^[^//]*new[^//]*;$")))
;; Line should not already be terminated
(save-excursion
(goto-char (c-point 'eopl))

View File

@ -0,0 +1,19 @@
Code:
(lambda ()
(csharp-mode)
(indent-region (point-min) (point-max)))
Point-Char: |
Name: Don't consider closed statements as object initializers. (bug#69571)
=-=
public class Foo {
void Bar () {
var x = new X(); // [1]
for (;;) {
x();
} // [2]
}
}
=-=-=

View File

@ -0,0 +1,30 @@
;;; csharp-mode-tests.el --- Tests for CC Mode C# mode -*- lexical-binding: t; -*-
;; Copyright (C) 2024 Free Software Foundation, Inc.
;; This file is part of GNU Emacs.
;; GNU Emacs is free software: you can redistribute it and/or modify
;; it under the terms of the GNU General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; GNU Emacs is distributed in the hope that it will be useful,
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;; GNU General Public License for more details.
;; You should have received a copy of the GNU General Public License
;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
;;; Code:
(require 'ert)
(require 'ert-x)
(require 'csharp-mode)
(ert-deftest csharp-mode-test-indentation ()
(ert-test-erts-file (ert-resource-file "indent.erts")))
(provide 'csharp-mode-tests)
;;; csharp-mode-tests.el ends here