emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/phpinspect 75562aab35 085/126: Add some tests for edit


From: ELPA Syncer
Subject: [elpa] externals/phpinspect 75562aab35 085/126: Add some tests for edit tracker + patch newly discovered bugs
Date: Sat, 12 Aug 2023 00:58:46 -0400 (EDT)

branch: externals/phpinspect
commit 75562aab35f403b40767c037bd12ded281efa63b
Author: Hugo Thunnissen <devel@hugot.nl>
Commit: Hugo Thunnissen <devel@hugot.nl>

    Add some tests for edit tracker + patch newly discovered bugs
---
 phpinspect-buffer.el  |  6 ++++--
 phpinspect-edtrack.el | 10 +++++++++-
 test/test-edtrack.el  | 15 +++++++++++++++
 3 files changed, 28 insertions(+), 3 deletions(-)

diff --git a/phpinspect-buffer.el b/phpinspect-buffer.el
index 64e5e17e6a..f540ca33a3 100644
--- a/phpinspect-buffer.el
+++ b/phpinspect-buffer.el
@@ -61,6 +61,7 @@ linked with."
                      :previous-bmap buffer-map
                      :edtrack (phpinspect-buffer-edit-tracker buffer))))
           (phpinspect-with-parse-context ctx
+            (phpinspect--log "Parsing buffer")
             (let ((parsed (phpinspect-parse-current-buffer)))
               (setf (phpinspect-buffer-map buffer) map)
               (setf (phpinspect-buffer-tree buffer) parsed)
@@ -91,8 +92,9 @@ linked with."
   ;; they grow or shrink, so their ful regions need to be marked for a 
reparse).
   (save-excursion
     (goto-char start)
-    (when (looking-back "\\($->|::\\)?[^][)(}{[:blank:]\n;'\"]+" nil t)
-      (setq start (- start (length (match-string 0))))))
+    (when (looking-back "\\($|->|::\\)?[^][)(}{[:blank:]\n;'\"]+" nil t)
+      (setq start (- start (length (match-string 0))))
+      (setq pre-change-length (+ pre-change-length (length (match-string 
0))))))
 
   (phpinspect-edtrack-register-edit
    (phpinspect-buffer-edit-tracker buffer) start end pre-change-length))
diff --git a/phpinspect-edtrack.el b/phpinspect-edtrack.el
index b7b899c949..2a7df925e3 100644
--- a/phpinspect-edtrack.el
+++ b/phpinspect-edtrack.el
@@ -122,7 +122,13 @@
     (let ((delta ;; The delta of this edit.
            (- (- end start) pre-change-length))
           new-edit)
-      (if (= (phpinspect-edtrack-last-edit-start track) start)
+      (if (and (= (phpinspect-edtrack-last-edit-start track) start)
+               ;; Confirm that this is indeed a growing edit and not an edit
+               ;; starting at the same place by chance
+               (or (and (> delta 0) (> (cdr (phpinspect-edtrack-last-edit 
track)) 0)
+                        (> delta (cdr (phpinspect-edtrack-last-edit track))))
+                   (and (< delta 0) (< (cdr (phpinspect-edtrack-last-edit 
track)) 0)
+                        (< delta (cdr (phpinspect-edtrack-last-edit track))))))
           ;; `after-change-functions' can be called in succession with the same
           ;; start point for a continuously growing edited region. For example,
           ;; when typing without interruptions, subsequent calls can be:
@@ -196,6 +202,8 @@
 
 (defsubst phpinspect-edtrack-clear (track)
   (setf (phpinspect-edtrack-edits track) nil)
+  (setf (phpinspect-edtrack-last-edit track) nil)
+  (setf (phpinspect-edtrack-last-edit-start track) -1)
   (phpinspect-edtrack-clear-taint-pool track))
 
 (defsubst phpinspect-edtrack-register-taint (track start end)
diff --git a/test/test-edtrack.el b/test/test-edtrack.el
index e4e9e03613..e08750c73c 100644
--- a/test/test-edtrack.el
+++ b/test/test-edtrack.el
@@ -111,3 +111,18 @@
 
     (phpinspect-edtrack-register-edit track 15 0 1)
     (should (equal (list (cons 10 16)) (phpinspect-edtrack-taint-pool 
track)))))
+
+(ert-deftest phpinspect-edtrack-register-growing-edit ()
+  (let ((track (phpinspect-make-edtrack)))
+    (phpinspect-edtrack-register-edit track 10 11 0)
+    (phpinspect-edtrack-register-edit track 10 12 0)
+    (phpinspect-edtrack-register-edit track 10 13 0)
+
+    (should (equal (list (cons 10 3)) (phpinspect-edtrack-edits track)))))
+
+(ert-deftest phpinspect-edtrack-register-multi-edits-same-start ()
+  (let ((track (phpinspect-make-edtrack)))
+    (phpinspect-edtrack-register-edit track 10 11 0)
+    (phpinspect-edtrack-register-edit track 10 10 1)
+
+    (should (equal (list (cons 10 -1) (cons 10 1)) (phpinspect-edtrack-edits 
track)))))



reply via email to

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