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

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

[elpa] externals/phps-mode 99d90d6af0 1/3: Started on fix for indented h


From: Christian Johansson
Subject: [elpa] externals/phps-mode 99d90d6af0 1/3: Started on fix for indented heredoc and nowdocs
Date: Sat, 29 Oct 2022 02:59:10 -0400 (EDT)

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

    Started on fix for indented heredoc and nowdocs
---
 phps-mode-lexer.el           | 28 +++++++++++++++-------------
 test/phps-mode-test-lexer.el | 26 +++++++++++++++++---------
 2 files changed, 32 insertions(+), 22 deletions(-)

diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 6d55c6f629..9b29e7d1d8 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -124,12 +124,12 @@
 (defvar phps-mode-lexer--lambdas-by-state #s(hash-table size 65 test equal 
rehash-size 1.5 rehash-threshold 0.8125 data (ST_IN_SCRIPTING (((lambda nil 
(looking-at "exit")) (lambda nil (phps-mode-lexer--return-token-with-indent 
'T_EXIT))) ((lambda nil (looking-at "die")) (lambda nil 
(phps-mode-lexer--return-token-with-indent 'T_EXIT))) ((lambda nil (looking-at 
"fn")) (lambda nil (phps-mode-lexer--return-token-with-indent 'T_FN))) ((lambda 
nil (looking-at "function")) (lambda nil (phps-mod [...]
 
        ]*("))) (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 (concat "
-" phps-mode-lexer--heredoc-label ";?
+[       ]*" 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* ((start (match-beginning 0)) (end (1- (m [...]
 
        '#]"))) (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 ";?\\
+[       ]*" 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)))))))))))
   "Hash-table of lex-analyzer rules organized by state.")
 
@@ -1894,7 +1894,7 @@
      (let ((string-start
             (search-forward-regexp
              (concat
-              "\\(\n"
+              "\\(\n[\t ]*"
               phps-mode-lexer--heredoc-label
               ";?\n\\|\\$"
               phps-mode-lexer--label
@@ -1913,9 +1913,9 @@
 
              (cond
 
-              ((string-match
+              ((string-match-p
                 (concat
-                 "\n"
+                 "\n[\t ]*"
                  phps-mode-lexer--heredoc-label
                  ";?\n"
                  )
@@ -1947,12 +1947,14 @@
    ST_NOWDOC
    (looking-at phps-mode-lexer--any-char)
    (let ((start (car (cdr (car phps-mode-lexer--generated-tokens)))))
-     (let ((string-start (search-forward-regexp
-                          (concat
-                           "\n"
-                           phps-mode-lexer--heredoc-label
-                           ";?\\\n"
-                           ) nil t)))
+     (let ((string-start
+            (search-forward-regexp
+             (concat
+              "\n[\t ]*"
+              phps-mode-lexer--heredoc-label
+              ";?\\\n")
+             nil
+             t)))
        (if string-start
            (let* ((start (match-beginning 0))
                   (end (match-end 0))
diff --git a/test/phps-mode-test-lexer.el b/test/phps-mode-test-lexer.el
index 7f6d78694f..d123af88e9 100644
--- a/test/phps-mode-test-lexer.el
+++ b/test/phps-mode-test-lexer.el
@@ -365,7 +365,7 @@
 
   (phps-mode-test--with-buffer
    "<?php echo \" Hello $variable[0], how are you?\";"
-   nil
+   "Simple interpolated string with indexed variable"
    (should
     (equal
      phps-mode-lex-analyzer--tokens
@@ -373,14 +373,6 @@
 
   ;; HEREDOC
 
-  (phps-mode-test--with-buffer
-   "<?php\nclass foo {\n    public $bar = <<<EOT\nbar\n    EOT;\n}\n// 
Identifier must not be indented\n?>\n"
-   "Example #1 Invalid example (HEREDOC)"
-   (should
-    (equal
-     phps-mode-lex-analyzer--tokens
-     nil)))
-
   (phps-mode-test--with-buffer
    "<?php\nclass foo {\n    public $bar = <<<EOT\nbar\nEOT;\n}\n?>\n"
    "Example #2 Valid example (HEREDOC)"
@@ -422,6 +414,14 @@
      phps-mode-lex-analyzer--tokens
      '((T_OPEN_TAG 1 . 7) (T_ECHO 7 . 11) (T_START_HEREDOC 12 . 24) 
(T_ENCAPSED_AND_WHITESPACE 24 . 36) (T_END_HEREDOC 36 . 43) (";" 43 . 44) 
(T_CLOSE_TAG 45 . 47) (T_INLINE_HTML 47 . 48)))))
 
+  (phps-mode-test--with-buffer
+   "<?php\n\nclass MyClass\n{\n    public const MY_CONSTANT = <<<DELIMITER\n   
 {\n        some {\n            json\n        }\n    }\n    DELIMITER;\n}\n"
+   "Heredoc where ending delimiter is not first on line (PHP > 7.3)"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_CLASS 8 . 13) (T_STRING 14 . 21) ("{" 22 . 23) 
(T_PUBLIC 28 . 34) (T_CONST 35 . 40) (T_STRING 41 . 52) ("=" 53 . 54) 
(T_START_HEREDOC 55 . 68) (T_ENCAPSED_AND_WHITESPACE 68 . 121) (T_END_HEREDOC 
121 . 131) (T_STRING 131 . 135) (";" 135 . 136) ("}" 137 . 138)))))
+
   ;; NOWDOC
 
   (phps-mode-test--with-buffer
@@ -448,6 +448,14 @@
      phps-mode-lex-analyzer--tokens
      '((T_OPEN_TAG 1 . 7) (T_CLASS 7 . 12) (T_STRING 13 . 16) ("{" 17 . 18) 
(T_PUBLIC 23 . 29) (T_VARIABLE 30 . 34) ("=" 35 . 36) (T_START_HEREDOC 37 . 46) 
(T_ENCAPSED_AND_WHITESPACE 46 . 49) (T_END_HEREDOC 49 . 53) (";" 53 . 54) ("}" 
55 . 56) (T_CLOSE_TAG 57 . 59) (T_INLINE_HTML 59 . 60)))))
 
+  (phps-mode-test--with-buffer
+   "<?php\n\nclass MyClass\n{\n    public const MY_CONSTANT = <<<'DELIMITER'\n 
   {\n        some {\n            json\n        }\n    }\n    DELIMITER;\n}\n"
+   "Nowdoc where ending delimiter is not first on line (PHP > 7.3)"
+   (should
+    (equal
+     phps-mode-lex-analyzer--tokens
+     '((T_OPEN_TAG 1 . 7) (T_CLASS 8 . 13) (T_STRING 14 . 21) ("{" 22 . 23) 
(T_PUBLIC 28 . 34) (T_CONST 35 . 40) (T_STRING 41 . 52) ("=" 53 . 54) 
(T_START_HEREDOC 55 . 70) (T_ENCAPSED_AND_WHITESPACE 70 . 123) (T_END_HEREDOC 
123 . 133) (T_STRING 133 . 137) (";" 137 . 138) ("}" 139 . 140)))))
+
   ;; Backquotes
   (phps-mode-test--with-buffer
    "<?php `echo \"HELLO\"`;"



reply via email to

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