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

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

[elpa] externals/phps-mode c040358 046/405: Point lexer token informatio


From: Stefan Monnier
Subject: [elpa] externals/phps-mode c040358 046/405: Point lexer token information makes more sense
Date: Sat, 13 Jul 2019 09:59:40 -0400 (EDT)

branch: externals/phps-mode
commit c040358b555a1e157b055da5c7a1b7e08d2718ae
Author: Christian Johansson <address@hidden>
Commit: Christian Johansson <address@hidden>

    Point lexer token information makes more sense
---
 phps-lexer.el      | 28 ++++++++++++++++++++--------
 phps-test-lexer.el | 18 ++++++++++++++----
 2 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/phps-lexer.el b/phps-lexer.el
index 39d745e..42ab914 100644
--- a/phps-lexer.el
+++ b/phps-lexer.el
@@ -1268,24 +1268,33 @@ ANY_CHAR'
           (start-brace-level 0)
           (start-parenthesis-level 0)
           (start-inline-function-level 0)
-          (start-token-number -1)
+          (start-token-number nil)
           (end-in-scripting nil)
           (end-brace-level 0)
           (end-parenthesis-level 0)
           (end-inline-function-level 0)
-          (end-token-number -1))
+          (end-token-number nil)
+          (found-line-tokens nil))
       (catch 'stop-iteration
         (dolist (item phps-mode/lexer-tokens)
           (let ((token (car item))
-                (start (car (cdr item))))
+                (start (car (cdr item)))
+                (end (cdr (cdr item))))
             ;; (message "Token: %s Start: %s End: %s Item: %s" token start end 
item)
 
             (when (> start line-end)
               ;; (message "Stopping iteration at: %s %s" start position)
               (throw 'stop-iteration nil))
 
+            (when (and (not found-line-tokens)
+                       (>= start position)
+                       (<= end line-end))
+              (setq found-line-tokens t))
+
             ;; When start of token is equal or less to current point
-            (when (< start position)
+            (when (<= end position)
+              (when (null start-token-number)
+                (setq start-token-number -1))
               (setq start-token-number (+ start-token-number 1))
               (pcase token
                 ('T_OPEN_TAG (setq start-in-scripting t))
@@ -1298,7 +1307,9 @@ ANY_CHAR'
                 (_)))
 
             ;; When start of token is equal or less to end of curent line
-            (when (< start line-end)
+            (when (<= start line-end)
+              (when (null end-token-number)
+                (setq end-token-number -1))
               (setq end-token-number (+ end-token-number 1))
               (pcase token
                 ('T_OPEN_TAG (setq end-in-scripting t))
@@ -1311,10 +1322,11 @@ ANY_CHAR'
                 (_)))
             
             )))
-      (let ((data (list (list start-in-scripting start-brace-level 
start-parenthesis-level start-inline-function-level start-token-number) (list 
end-in-scripting end-brace-level end-parenthesis-level 
end-inline-function-level end-token-number))))
+      (let ((data (list (list start-in-scripting start-brace-level 
start-parenthesis-level start-inline-function-level nil) (list end-in-scripting 
end-brace-level end-parenthesis-level end-inline-function-level nil))))
+        (when found-line-tokens
+          (setq data (list (list start-in-scripting start-brace-level 
start-parenthesis-level start-inline-function-level start-token-number) (list 
end-in-scripting end-brace-level end-parenthesis-level 
end-inline-function-level end-token-number))))
         ;; (message "data: %s" data)
-        data)
-      )))
+        data))))
 
 (defun phps-mode/lex--SETUP (start end)
   "Just prepare other lexers for lexing region START to END."
diff --git a/phps-test-lexer.el b/phps-test-lexer.el
index 0897a08..8eb8ed3 100644
--- a/phps-test-lexer.el
+++ b/phps-test-lexer.el
@@ -279,17 +279,27 @@
   (phps-mode/with-test-buffer
    "<html><head><title><?php echo $title; ?></title><body>Bla 
bla</body></html>"
    (goto-char 15)
-   (should (equal (list (list nil 0 0 0 -1) (list nil 0 0 0 5)) 
(phps-mode/lexer-get-point-data))))
+   (should (equal (list (list nil 0 0 0 nil) (list nil 0 0 0 5)) 
(phps-mode/lexer-get-point-data))))
+
+  (phps-mode/with-test-buffer
+   "<html><head><title><?php echo $title; ?>\n</title><body>Bla 
bla</body></html>"
+   (goto-char 50)
+   (should (equal (list (list nil 0 0 0 nil) (list nil 0 0 0 nil)) 
(phps-mode/lexer-get-point-data))))
+
+  (phps-mode/with-test-buffer
+   "<html><head><title></title><body>Bla bla</body></html>"
+   (goto-char 15)
+   (should (equal (list (list nil 0 0 0 nil) (list nil 0 0 0 nil)) 
(phps-mode/lexer-get-point-data))))
 
   (phps-mode/with-test-buffer
    "<html><head><title><?php echo $title; ?></title><body>Bla 
bla</body></html>"
    (goto-char 30)
-   (should (equal (list (list nil 0 0 0 -1) (list nil 0 0 0 5)) 
(phps-mode/lexer-get-point-data))))
+   (should (equal (list (list nil 0 0 0 nil) (list nil 0 0 0 5)) 
(phps-mode/lexer-get-point-data))))
 
   (phps-mode/with-test-buffer
    "<html><head><title><?php echo $title; ?></title><body>Bla 
bla</body></html>"
    (goto-char 50)
-   (should (equal (list (list nil 0 0 0 -1) (list nil 0 0 0 5)) 
(phps-mode/lexer-get-point-data))))
+   (should (equal (list (list nil 0 0 0 nil) (list nil 0 0 0 5)) 
(phps-mode/lexer-get-point-data))))
 
   (phps-mode/with-test-buffer
    "<html><head><title><?php if ($myCondition) { \n   if ($mySeconCondition) { 
echo $title; } } ?></title><body>Bla bla</body></html>"
@@ -311,7 +321,7 @@
    "<html><head><title><?php if ($myCondition) { if ($mySeconCondition) { echo 
$title; } } ?></title><body>Bla bla</body></html>"
    
    (goto-char 100)
-   (should (equal (list (list nil 0 0 0 -1) (list nil 0 0 0 17)) 
(phps-mode/lexer-get-point-data))))
+   (should (equal (list (list nil 0 0 0 nil) (list nil 0 0 0 17)) 
(phps-mode/lexer-get-point-data))))
 
   )
 



reply via email to

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