diff options
| author | Nathan Moreau <nathan.moreau@m4x.org> | 2019-10-31 19:46:26 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-31 19:46:26 +0100 |
| commit | 70ff9a027c51118ebba07c9be832c3efa7a7df67 (patch) | |
| tree | 8ee2d1f5f7d7b70a15a485335098c1bf9e46387d | |
| parent | c0cc6dc75754fd607572a6fd72945d87729d0174 (diff) | |
| download | rust-mode-70ff9a027c51118ebba07c9be832c3efa7a7df67.tar.gz | |
electric-pair-mode: prevent self-insert of `>' when already inserted. (#337)
| -rw-r--r-- | rust-mode-tests.el | 16 | ||||
| -rw-r--r-- | rust-mode.el | 9 |
2 files changed, 24 insertions, 1 deletions
diff --git a/rust-mode-tests.el b/rust-mode-tests.el index 3252b6a..42b7a44 100644 --- a/rust-mode-tests.el +++ b/rust-mode-tests.el @@ -3220,4 +3220,18 @@ impl Two<'a> { (ert-deftest rust-test-electric-pair-lt-expression-capitalized-keyword () (test-electric-pair-insert "fn foo() -> Box" 16 ?< ?>)) - ) + + (ert-deftest rust-test-electric-pair-<-> () + (let ((old-electric-pair-mode electric-pair-mode)) + (electric-pair-mode 1) + (unwind-protect + (with-temp-buffer + (electric-pair-mode 1) + (rust-mode) + (mapc (lambda (c) + (let ((last-command-event c)) (self-insert-command 1))) + "tmp<T>") + (should + (equal "tmp<T>" (buffer-substring-no-properties (point-min) + (point-max))))) + (electric-pair-mode (or old-electric-pair-mode 1)))))) diff --git a/rust-mode.el b/rust-mode.el index 5c68640..dd50f18 100644 --- a/rust-mode.el +++ b/rust-mode.el @@ -21,6 +21,7 @@ (require 'json) (defvar electric-pair-inhibit-predicate) +(defvar electric-pair-skip-self) (defvar electric-indent-chars) (defvar rust-buffer-project) @@ -1049,6 +1050,13 @@ This wraps the default defined by `electric-pair-inhibit-predicate'." (rust-is-lt-char-operator))) (funcall (default-value 'electric-pair-inhibit-predicate) char))) +(defun rust-electric-pair-skip-self-wrap (char) + "Skip CHAR instead of inserting a second closing character. +This wraps the default defined by `electric-pair-skip-self'." + (or + (= ?> char) + (funcall (default-value 'electric-pair-skip-self) char))) + (defun rust-ordinary-lt-gt-p () "Test whether the `<' or `>' at point is an ordinary operator of some kind. @@ -1625,6 +1633,7 @@ Return the created process." (setq-local end-of-defun-function 'rust-end-of-defun) (setq-local parse-sexp-lookup-properties t) (setq-local electric-pair-inhibit-predicate 'rust-electric-pair-inhibit-predicate-wrap) + (setq-local electric-pair-skip-self 'rust-electric-pair-skip-self-wrap) (add-hook 'before-save-hook 'rust-before-save-hook nil t) (add-hook 'after-save-hook 'rust-after-save-hook nil t) |
