emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] master be50572 2/2: Fix electric-pair-tests by disabling b


From: João Távora
Subject: [Emacs-diffs] master be50572 2/2: Fix electric-pair-tests by disabling bug#33794's fix with a variable
Date: Thu, 17 Jan 2019 13:49:33 -0500 (EST)

branch: master
commit be505726b68d407a44fdcd9c7ac1ef722398532d
Author: João Távora <address@hidden>
Commit: João Távora <address@hidden>

    Fix electric-pair-tests by disabling bug#33794's fix with a variable
    
    The variable c--disable-fix-of-bug-33794, which should be removed in
    the short term in favor of a permanent solution, is introduced.
    
    It is bound to nil by default.  This means that breakage is still
    happening in actual c-mode and c++-mode usage, though the tests no
    longer show it.
    
    To get around this breakage, put
    
       (setq c--disable-fix-of-bug-33794 t)
    
    In your init file.  Evidently, you will lose the fix for bug#33794,
    but that only affects a small corner case of c-toggle-auto-newline,
    which is not turned on by default.
    
    See https://lists.gnu.org/archive/html/emacs-devel/2019-01/msg00360.html
    for more information.
    
    * lisp/progmodes/cc-cmds.el (c--disable-fix-of-bug-33794): New
    variable.
    (c--with-post-self-insert-hook-maybe): New macro.
    (c-electric-pound, c-electric-brace, c-electric-slash)
    (c-electric-star, c-electric-semi&comma, c-electric-colon)
    (c-electric-lt-gt, c-electric-paren): Use it.
    (c-electric-paren, c-electric-brace): Check
    c--disable-fix-of-bug-33794.
    
    * test/lisp/electric-tests.el (c--disable-fix-of-bug-33794):
    Forward declare.
    (electric-pair-test-for)
    (electric-layout-int-main-kernel-style)
    (electric-modes-in-c-mode-with-self-insert-command): Use it.
---
 lisp/progmodes/cc-cmds.el   | 96 ++++++++++++++++++++++++++-------------------
 test/lisp/electric-tests.el |  6 +++
 2 files changed, 62 insertions(+), 40 deletions(-)

diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index 78677fe..6b0d961 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -485,6 +485,20 @@ function to control that."
       (c-hungry-delete-forward)
     (c-hungry-delete-backwards)))
 
+(defvar c--disable-fix-of-bug-33794 nil
+  "If non-nil disable alans controversional fix of 33794.
+This fix breaks most features of `electric-pair-mode' by
+incompletely reimplementing in in this mode.")
+
+(defmacro c--with-post-self-insert-hook-maybe (&rest body)
+  `(let ((post-self-insert-hook
+         (if c--disable-fix-of-bug-33794
+             post-self-insert-hook
+           ;; Acording to AM: Disable random functionality to get
+           ;; defined functionality from `self-insert-command'
+           nil)))
+     ,@body))
+
 (defun c-electric-pound (arg)
   "Insert a \"#\".
 If `c-electric-flag' is set, handle it specially according to the variable
@@ -504,7 +518,7 @@ inside a literal or a macro, nothing special happens."
                          (eq (char-before) ?\\))))
            (c-in-literal)))
       ;; do nothing special
-      (let (post-self-insert-hook)     ; Disable random functionality.
+      (c--with-post-self-insert-hook-maybe
        (self-insert-command (prefix-numeric-value arg)))
     ;; place the pound character at the left edge
     (let ((pos (- (point-max) (point)))
@@ -857,36 +871,38 @@ settings of `c-cleanup-list' are done."
 
     ;; Insert the brace.  Note that expand-abbrev might reindent
     ;; the line here if there's a preceding "else" or something.
-    (let (post-self-insert-hook) ; the only way to get defined functionality
-                                ; from `self-insert-command'.
-      (self-insert-command (prefix-numeric-value arg)))
+    (c--with-post-self-insert-hook-maybe
+     (self-insert-command (prefix-numeric-value arg)))
 
     ;; Emulate `electric-pair-mode'.
-    (when (and (boundp 'electric-pair-mode)
-              electric-pair-mode)
-      (let ((size (buffer-size))
-           (c-in-electric-pair-functionality t)
-           post-self-insert-hook)
-       (electric-pair-post-self-insert-function)
-       (setq got-pair-} (and at-eol
-                             (eq (c-last-command-char) ?{)
-                             (eq (char-after) ?}))
-             electric-pair-deletion (< (buffer-size) size))))
-
-    ;; Perform any required CC Mode electric actions.
-    (cond
-     ((or literal arg (not c-electric-flag) active-region))
-     ((not at-eol)
-      (c-indent-line))
-     (electric-pair-deletion
-      (c-indent-line)
-      (c-do-brace-electrics 'ignore nil))
-     (t (c-do-brace-electrics nil nil)
-       (when got-pair-}
-         (save-excursion
-           (forward-char)
-           (c-do-brace-electrics 'assume 'ignore))
-         (c-indent-line))))
+    (unless c--disable-fix-of-bug-33794
+      (when (and (boundp 'electric-pair-mode)
+                electric-pair-mode)
+       (let ((size (buffer-size))
+             (c-in-electric-pair-functionality t)
+             post-self-insert-hook)
+         (electric-pair-post-self-insert-function)
+         (setq got-pair-} (and at-eol
+                               (eq (c-last-command-char) ?{)
+                               (eq (char-after) ?}))
+               electric-pair-deletion (< (buffer-size) size))))
+
+      ;; Perform any required CC Mode electric actions.
+      (cond
+       ((or literal arg (not c-electric-flag) active-region))
+       ((not at-eol)
+       (c-indent-line))
+       (electric-pair-deletion
+       (c-indent-line)
+       (c-do-brace-electrics 'ignore nil))
+       (t (c-do-brace-electrics nil nil)
+         (when got-pair-}
+           (save-excursion
+             (forward-char)
+             (c-do-brace-electrics 'assume 'ignore))
+           (c-indent-line)))))
+
+
 
     ;; blink the paren
     (and (eq (c-last-command-char) ?\})
@@ -944,7 +960,7 @@ is inhibited."
                       c-electric-flag
                       (eq (c-last-command-char) ?/)
                       (eq (char-before) (if literal ?* ?/))))
-    (let (post-self-insert-hook)       ; Disable random functionality.
+    (c--with-post-self-insert-hook-maybe
       (self-insert-command (prefix-numeric-value arg)))
     (if indentp
        (indent-according-to-mode))))
@@ -958,7 +974,7 @@ supplied, point is inside a literal, or 
`c-syntactic-indentation' is nil,
 this indentation is inhibited."
 
   (interactive "*P")
-  (let (post-self-insert-hook)         ; Disable random functionality.
+  (c--with-post-self-insert-hook-maybe
     (self-insert-command (prefix-numeric-value arg)))
   ;; if we are in a literal, or if arg is given do not reindent the
   ;; current line, unless this star introduces a comment-only line.
@@ -1006,7 +1022,7 @@ settings of `c-cleanup-list'."
       (setq lim (c-most-enclosing-brace (c-parse-state))
            literal (c-in-literal lim)))
 
-    (let (post-self-insert-hook)       ; Disable random functionality.
+    (c--with-post-self-insert-hook-maybe
       (self-insert-command (prefix-numeric-value arg)))
 
     (if (and c-electric-flag (not literal) (not arg))
@@ -1076,7 +1092,7 @@ reindented unless `c-syntactic-indentation' is nil.
         newlines is-scope-op
         ;; shut this up
         (c-echo-syntactic-information-p nil))
-    (let (post-self-insert-hook)       ; Disable random functionality.
+    (c--with-post-self-insert-hook-maybe
       (self-insert-command (prefix-numeric-value arg)))
     ;; Any electric action?
     (if (and c-electric-flag (not literal) (not arg))
@@ -1170,7 +1186,7 @@ numeric argument is supplied, or the point is inside a 
literal."
   (let ((c-echo-syntactic-information-p nil)
        final-pos found-delim case-fold-search)
 
-    (let (post-self-insert-hook)       ; Disable random functionality.
+    (c--with-post-self-insert-hook-maybe
       (self-insert-command (prefix-numeric-value arg)))
     (setq final-pos (point))
 
@@ -1236,8 +1252,7 @@ newline cleanups are done if appropriate; see the 
variable `c-cleanup-list'."
        ;; shut this up
        (c-echo-syntactic-information-p nil)
        case-fold-search)
-    (let (post-self-insert-hook) ; The only way to get defined functionality
-                                ; from `self-insert-command'.
+    (c--with-post-self-insert-hook-maybe
       (self-insert-command (prefix-numeric-value arg)))
 
     (if (and (not arg) (not literal))
@@ -1288,10 +1303,11 @@ newline cleanups are done if appropriate; see the 
variable `c-cleanup-list'."
              (insert-and-inherit "} catch (")))
 
          ;; Apply `electric-pair-mode' stuff.
-         (when (and (boundp 'electric-pair-mode)
-                    electric-pair-mode)
-           (let (post-self-insert-hook)
-             (electric-pair-post-self-insert-function)))
+         (unless c--disable-fix-of-bug-33794
+           (when (and (boundp 'electric-pair-mode)
+                      electric-pair-mode)
+             (let (post-self-insert-hook)
+               (electric-pair-post-self-insert-function))))
 
          ;; Check for clean-ups at function calls.  These two DON'T need
          ;; `c-electric-flag' or `c-syntactic-indentation' set.
diff --git a/test/lisp/electric-tests.el b/test/lisp/electric-tests.el
index 5a4b20e..b55d889 100644
--- a/test/lisp/electric-tests.el
+++ b/test/lisp/electric-tests.el
@@ -47,10 +47,14 @@
   (declare (indent defun) (debug t))
   `(call-with-saved-electric-modes #'(lambda () ,@body)))
 
+;; Defined in lisp/progmodes/cc-cmds.el
+(defvar c--disable-fix-of-bug-33794 t)
+
 (defun electric-pair-test-for (fixture where char expected-string
                                        expected-point mode bindings fixture-fn)
   (with-temp-buffer
     (funcall mode)
+    (setq-local c--disable-fix-of-bug-33794 t)
     (insert fixture)
     (save-electric-modes
       (let ((last-command-event char)
@@ -821,6 +825,7 @@ baz\"\""
     (electric-layout-local-mode 1)
     (electric-pair-local-mode 1)
     (electric-indent-local-mode 1)
+    (setq-local c--disable-fix-of-bug-33794 t)
     (setq-local electric-layout-rules
                 '((?\{ . (after-stay after))))
     (insert "int main () ")
@@ -834,6 +839,7 @@ baz\"\""
     (electric-layout-local-mode 1)
     (electric-pair-local-mode 1)
     (electric-indent-local-mode 1)
+    (setq-local c--disable-fix-of-bug-33794 t)
     (setq-local electric-layout-rules
                 '((?\{ . (before after-stay after))))
     (insert "int main () ")



reply via email to

[Prev in Thread] Current Thread [Next in Thread]