Skip to content

Commit 70ff9a0

Browse files
authored
electric-pair-mode: prevent self-insert of `>' when already inserted. (#337)
1 parent c0cc6dc commit 70ff9a0

File tree

2 files changed

+24
-1
lines changed

2 files changed

+24
-1
lines changed

rust-mode-tests.el

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3220,4 +3220,18 @@ impl Two<'a> {
32203220

32213221
(ert-deftest rust-test-electric-pair-lt-expression-capitalized-keyword ()
32223222
(test-electric-pair-insert "fn foo() -> Box" 16 ?< ?>))
3223-
)
3223+
3224+
(ert-deftest rust-test-electric-pair-<-> ()
3225+
(let ((old-electric-pair-mode electric-pair-mode))
3226+
(electric-pair-mode 1)
3227+
(unwind-protect
3228+
(with-temp-buffer
3229+
(electric-pair-mode 1)
3230+
(rust-mode)
3231+
(mapc (lambda (c)
3232+
(let ((last-command-event c)) (self-insert-command 1)))
3233+
"tmp<T>")
3234+
(should
3235+
(equal "tmp<T>" (buffer-substring-no-properties (point-min)
3236+
(point-max)))))
3237+
(electric-pair-mode (or old-electric-pair-mode 1))))))

rust-mode.el

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
(require 'json)
2222

2323
(defvar electric-pair-inhibit-predicate)
24+
(defvar electric-pair-skip-self)
2425
(defvar electric-indent-chars)
2526

2627
(defvar rust-buffer-project)
@@ -1049,6 +1050,13 @@ This wraps the default defined by `electric-pair-inhibit-predicate'."
10491050
(rust-is-lt-char-operator)))
10501051
(funcall (default-value 'electric-pair-inhibit-predicate) char)))
10511052

1053+
(defun rust-electric-pair-skip-self-wrap (char)
1054+
"Skip CHAR instead of inserting a second closing character.
1055+
This wraps the default defined by `electric-pair-skip-self'."
1056+
(or
1057+
(= ?> char)
1058+
(funcall (default-value 'electric-pair-skip-self) char)))
1059+
10521060
(defun rust-ordinary-lt-gt-p ()
10531061
"Test whether the `<' or `>' at point is an ordinary operator of some kind.
10541062
@@ -1625,6 +1633,7 @@ Return the created process."
16251633
(setq-local end-of-defun-function 'rust-end-of-defun)
16261634
(setq-local parse-sexp-lookup-properties t)
16271635
(setq-local electric-pair-inhibit-predicate 'rust-electric-pair-inhibit-predicate-wrap)
1636+
(setq-local electric-pair-skip-self 'rust-electric-pair-skip-self-wrap)
16281637

16291638
(add-hook 'before-save-hook 'rust-before-save-hook nil t)
16301639
(add-hook 'after-save-hook 'rust-after-save-hook nil t)

0 commit comments

Comments
 (0)