branch: externals/phps-mode commit 8ed0716dd920d8a8ab7bdf484bc79c656773ceb5 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Started with unit tests for getting point lexer data --- phps-lexer.el | 36 ++++++++++++++++++++++++++++++++---- phps-test-lexer.el | 13 ++++++++++--- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/phps-lexer.el b/phps-lexer.el index d9b6493..1529dd7 100644 --- a/phps-lexer.el +++ b/phps-lexer.el @@ -1257,10 +1257,38 @@ ANY_CHAR' (defun phps-mode/lexer-get-point-data() "Return information about point in tokens." - (message "Point: %s in %s" (point) phps-mode/lexer-tokens) - (dolist (item phps-mode/lexer-tokens) - ) - ) + ;; (message "Point: %s in %s" (point) phps-mode/lexer-tokens) + (let ((position (point)) + (in-scripting nil) + (brace-level 0) + (parenthesis-level 0) + (inline-function-level 0)) + (catch 'stop-iteration + (dolist (item phps-mode/lexer-tokens) + (let ((token (car item)) + (start (car (cdr item))) + (end (cdr (cdr item)))) + ;; (message "Token: %s Start: %s End: %s Item: %s" token start end item) + + (when (> start position) + ;; (message "Stopping iteration at: %s %s" start position) + (throw 'stop-iteration nil)) + + (pcase token + ('T_OPEN_TAG (setq in-scripting t)) + ('T_OPEN_TAG_WITH_ECHO (setq in-scripting t)) + ('T_CLOSE_TAG (setq in-scripting nil)) + ("{" (setq brace-level (+ brace-level 1))) + ("}" (setq brace-level (- brace-level 1))) + ("(" (setq parenthesis-level (+ parenthesis-level 1))) + (")" (setq parenthesis-level (- parenthesis-level 1))) + (_)) + + ))) + (let ((data (list in-scripting brace-level parenthesis-level inline-function-level))) + ;; (message "data: %s" 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 a45db16..3b3059f 100644 --- a/phps-test-lexer.el +++ b/phps-test-lexer.el @@ -239,12 +239,19 @@ ) -(defun phps-mode/test-lexer-get-point-data () +(defun phps-mode/test-lexer--get-point-data () "Return information about point in tokens." + (phps-mode/with-test-buffer "<?php\nNAMESPACE MyNameSpace;\nCLASS MyClass {\n\tpublic function __construct() {\n\t\texit;\n\t}\n}\n" (goto-char 30) - (phps-mode/lexer-get-point-data)) + (should (equal (list t 1 0 0) (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 15) + (should (equal (list nil 0 0 0) (phps-mode/lexer-get-point-data)))) + ) (defun phps-mode/test-lexer () @@ -256,7 +263,7 @@ (phps-mode/test-lexer--complex-tokens) (phps-mode/test-lexer--namespaces) (phps-mode/test-lexer--errors) - (phps-mode/test-lexer-get-point-data) + (phps-mode/test-lexer--get-point-data) ;; (message "\n-- Ran all tests for lexer. --") )