[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