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:
parent
f48babb112
commit
c890622e1a
@ -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))
|
||||
|
19
test/lisp/progmodes/csharp-mode-resources/indent.erts
Normal file
19
test/lisp/progmodes/csharp-mode-resources/indent.erts
Normal 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]
|
||||
}
|
||||
}
|
||||
=-=-=
|
30
test/lisp/progmodes/csharp-mode-tests.el
Normal file
30
test/lisp/progmodes/csharp-mode-tests.el
Normal 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
|
Loading…
Reference in New Issue
Block a user