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

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

[elpa] externals/phps-mode be5d5e8127 1/2: Improved heredoc and nowdoc s


From: Christian Johansson
Subject: [elpa] externals/phps-mode be5d5e8127 1/2: Improved heredoc and nowdoc support of indented endings
Date: Thu, 3 Nov 2022 13:48:15 -0400 (EDT)

branch: externals/phps-mode
commit be5d5e8127397a620f3add9b2cfa0e47fb2d7eac
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Improved heredoc and nowdoc support of indented endings
---
 phps-mode-lexer.el           | 7 +++++--
 test/phps-mode-test-lexer.el | 8 ++++++++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 637e906821..5b4a987d3e 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -125,9 +125,9 @@
 
        ]*("))) (lambda nil (phps-mode-lexer--yyless (length "readonly")) 
(phps-mode-lexer--return-token-with-str 'T_STRING 0))) ((lambda nil (looking-at 
"unset")) (lambda nil (phps-mode-lexer--return-token-with-indent 'T_UNSET))) 
((lambda nil (looking-at "=>")) (lambda nil (phps-mode-lexer--return-token 
'T_DOUBLE_ARROW))) ((lambda nil (looking-at "list")) (lambda nil 
(phps-mode-lexer--return-token-with-indent 'T_LIST))) ((lambda nil (looking-at 
"array")) (lambda nil (phps-mode-lexer--return-tok [...]
 ]*" "\\(\\$\\|\\.\\.\\.\\)"))) (lambda nil (phps-mode-lexer--yyless 1) 
(phps-mode-lexer--return-token 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG 
(match-beginning 0) (- (match-end 0) 1)))) ((lambda nil (looking-at "&")) 
(lambda nil (phps-mode-lexer--return-token 
'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG))) ((lambda nil (looking-at (concat 
"\\(" "]" "\\|" ")" "\\)"))) (lambda nil 
(phps-mode-lexer--return-exit-nesting-token))) ((lambda nil (looking-at (concat 
"\\(" "\\[" "\\|" "(" "\\)"))) (la [...]
 [       ]*" phps-mode-lexer--heredoc-label "\\|\\$" phps-mode-lexer--label 
"\\|{\\$" phps-mode-lexer--label "\\|\\${" phps-mode-lexer--label "\\)") nil 
t))) (if string-start (let* ((start (match-beginning 0)) (end (match-end 0)) 
(data (buffer-substring-no-properties start end))) (cond ((string-match-p 
(concat "
-[       ]*" phps-mode-lexer--heredoc-label) data) 
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE old-end 
start) (phps-mode-lexer--begin 'ST_END_HEREDOC)) (t 
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE old-end 
start)))) (progn (signal 'phps-lexer-error (list (format "Found no ending of 
heredoc starting at %d" old-start) old-start))))))))) ST_LOOKING_FOR_VARNAME 
(((lambda nil (looking-at (concat phps-mode-lexer--label "[\\[}]"))) (lambda 
nil (let* ((st [...]
+[       ]*" phps-mode-lexer--heredoc-label) data) (search-forward-regexp "[    
 ]*") (phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE 
old-end start) (phps-mode-lexer--begin 'ST_END_HEREDOC)) (t 
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE old-end 
start)))) (progn (signal 'phps-lexer-error (list (format "Found no ending of 
heredoc starting at %d" old-start) old-start))))))))) ST_LOOKING_FOR_VARNAME 
(((lambda nil (looking-at (concat phps-mode-lexer--label "[ [...]
 
        '#]"))) (lambda nil (phps-mode-lexer--yyless 0) 
(phps-mode-lexer--yy-pop-state) (phps-mode-lexer--return-token-with-val 
'T_ENCAPSED_AND_WHITESPACE))) ((lambda nil (looking-at phps-mode-lexer--label)) 
(lambda nil (phps-mode-lexer--return-token-with-str 'T_STRING 0))) ((lambda nil 
(looking-at phps-mode-lexer--any-char)) (lambda nil (signal 'phps-lexer-error 
(list (format "Unexpected character at %d" (match-beginning 0)) 
(match-beginning 0)))))) quote (((lambda nil (looking-at (concat "#!.* [...]
-[       ]*" phps-mode-lexer--heredoc-label) nil t))) (if string-start (let* 
((start (match-beginning 0)) (end (match-end 0)) (_data 
(buffer-substring-no-properties start end))) 
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE 
phps-mode-lexer--generated-new-tokens-index start) (phps-mode-lexer--begin 
'ST_END_HEREDOC)) (progn (signal 'phps-lexer-error (list (format "Found no 
ending of nowdoc starting at %d" start) start)))))))))))
+[       ]*" phps-mode-lexer--heredoc-label) nil t))) (if string-start (let* 
((start (match-beginning 0)) (end (match-end 0)) (_data 
(buffer-substring-no-properties start end))) 
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE 
phps-mode-lexer--generated-new-tokens-index start) (search-forward-regexp "[    
    ]*") (phps-mode-lexer--begin 'ST_END_HEREDOC)) (progn (signal 
'phps-lexer-error (list (format "Found no ending of nowdoc starting at %d" 
start) start)))))))))))
   "Hash-table of lex-analyzer rules organized by state.")
 
 (defvar-local phps-mode-lexer--generated-tokens nil
@@ -1912,6 +1912,8 @@
                  phps-mode-lexer--heredoc-label
                  )
                 data)
+               ;; Skip possible white-spaces before label
+               (search-forward-regexp "[\t ]*")
                ;; (message "Found heredoc end at %s-%s" start end)
                (phps-mode-lexer--return-token-with-val
                 'T_ENCAPSED_AND_WHITESPACE
@@ -1956,6 +1958,7 @@
               'T_ENCAPSED_AND_WHITESPACE
               phps-mode-lexer--generated-new-tokens-index
               start)
+             (search-forward-regexp "[\t ]*")
              (phps-mode-lexer--begin
               'ST_END_HEREDOC))
          (progn
diff --git a/test/phps-mode-test-lexer.el b/test/phps-mode-test-lexer.el
index e8de0e6e13..35d734ed3e 100644
--- a/test/phps-mode-test-lexer.el
+++ b/test/phps-mode-test-lexer.el
@@ -468,6 +468,14 @@
      phps-mode-lex-analyzer--tokens
      '((T_INLINE_HTML 1 . 2) (T_OPEN_TAG 2 . 8) (T_ECHO 8 . 12) 
(T_START_HEREDOC 13 . 25) (T_ENCAPSED_AND_WHITESPACE 25 . 37) (T_END_HEREDOC 37 
. 44) (";" 44 . 45) (T_CLOSE_TAG 46 . 48) (T_INLINE_HTML 48 . 49)))))
 
+  (phps-mode-test--with-buffer
+   "<?php\n$var = <<<QUERY\n    {\n        shop {\n            name\n        
}\n    }\n    QUERY;\n"
+   "Another HEREDOC example"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_VARIABLE 7 . 11) ("=" 12 . 13) (T_START_HEREDOC 
14 . 23) (T_ENCAPSED_AND_WHITESPACE 23 . 76) (T_END_HEREDOC 76 . 82) (T_STRING 
82 . 86) (";" 86 . 87)))))
+
 
   ;; NOWDOC
 



reply via email to

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