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

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

[elpa] externals/phps-mode 67233ef 213/405: Fixed indent algorithm for m


From: Stefan Monnier
Subject: [elpa] externals/phps-mode 67233ef 213/405: Fixed indent algorithm for multi-line strings
Date: Sat, 13 Jul 2019 10:00:15 -0400 (EDT)

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

    Fixed indent algorithm for multi-line strings
---
 phps-mode-functions.el      | 68 ++++++++++++++++++++++++++-------------------
 phps-mode-test-functions.el |  4 +--
 2 files changed, 41 insertions(+), 31 deletions(-)

diff --git a/phps-mode-functions.el b/phps-mode-functions.el
index 8f08c29..4340359 100644
--- a/phps-mode-functions.el
+++ b/phps-mode-functions.el
@@ -394,6 +394,16 @@
                       (setq column-level-start column-level)
 
 
+                      ;; Indent token-less lines here in between last tokens 
if distance is more than 1 line
+                      (when (and (> next-token-start-line-number (1+ 
token-start-line-number))
+                                 (not (equal token 'T_CLOSE_TAG)))
+                        (let ((token-line-number-diff (1- (- 
token-start-line-number next-token-start-line-number))))
+                          (while (>= token-line-number-diff 0)
+                            (puthash (- token-start-line-number 
token-line-number-diff) `(,column-level-start ,tuning-level) line-indents)
+                            ;; (message "Saved line %s indent %s %s" (- 
token-end-line-number token-line-number-diff) column-level tuning-level)
+                            (setq token-line-number-diff (1- 
token-line-number-diff)))))
+
+
                       ;; Support temporarily pre-indent
                       (when temp-pre-indent
                         (setq column-level-start temp-pre-indent)
@@ -406,49 +416,22 @@
                                 in-heredoc-ended-this-line)
                         (setq column-level-start 0))
 
+
                       ;; Save line indent
                       
                       (when phps-mode-functions-verbose
                         (message "Process line ending. nesting: %s-%s, 
line-number: %s-%s,     indent: %s.%s,  token: %s" nesting-start nesting-end 
token-start-line-number token-end-line-number column-level-start tuning-level 
token))
 
                       (when (> token-start-line-number 0)
-
-                        ;; Save line indentation
                         (puthash token-start-line-number `(,column-level-start 
,tuning-level) line-indents))
 
 
-                      ;; Indent token-less lines here in between last tokens 
if distance is more than 1 line
-                      (when (and (> next-token-start-line-number (1+ 
token-start-line-number))
-                                 (not (equal token 'T_CLOSE_TAG)))
-                        (let ((token-line-number-diff (1- (- 
token-start-line-number next-token-start-line-number))))
-                          (while (>= token-line-number-diff 0)
-                            (puthash (- token-start-line-number 
token-line-number-diff) `(,column-level-start ,tuning-level) line-indents)
-                            ;; (message "Saved line %s indent %s %s" (- 
token-end-line-number token-line-number-diff) column-level tuning-level)
-                            (setq token-line-number-diff (1- 
token-line-number-diff)))))
-
-
-                      ;; Does token span over several lines?
-                      (when (> token-end-line-number token-start-line-number)
-                        ;; (message "Token %s starts at %s and ends at %s 
indent %s %s" next-token token-start-line-number token-end-line-number 
column-level tuning-level)
-
-                        ;; Indent doc-comment lines with 1 tuning
-                        (when (equal token 'T_DOC_COMMENT)
-                          (setq tuning-level 1))
-
-                        (let ((token-line-number-diff (1- (- 
token-end-line-number token-start-line-number))))
-                          (while (>= token-line-number-diff 0)
-                            (puthash (- token-end-line-number 
token-line-number-diff) `(,column-level-start ,tuning-level) line-indents)
-                            ;; (message "Saved line %s indent %s %s" (- 
token-end-line-number token-line-number-diff) column-level tuning-level)
-                            (setq token-line-number-diff (1- 
token-line-number-diff))))
-
-                        ;; Rest tuning-level used for comments
-                        (setq tuning-level 0))
-
                       ;; Support trailing indent decrements
                       (when temp-post-indent
                         (setq column-level temp-post-indent)
                         (setq temp-post-indent nil))
 
+
                       ;; Increase indentation
                       (when (and (> nesting-end 0)
                                  (or (not nesting-stack)
@@ -472,6 +455,33 @@
                             ;; (message "New stack %s, start: %s end: %s\n" 
nesting-stack (car (car nesting-stack)) (car (cdr (car nesting-stack))))
                             )))
 
+
+                      ;; Does token span over several lines?
+                      (when (> token-end-line-number token-start-line-number)
+                        (let ((column-level-end column-level))
+
+                          ;; HEREDOC lines should have zero indent
+                          (when (or (and in-heredoc
+                                         (not in-heredoc-started-this-line))
+                                    in-heredoc-ended-this-line)
+                            (setq column-level-end 0))
+
+                          ;; (message "Token %s starts at %s and ends at %s 
indent %s %s" next-token token-start-line-number token-end-line-number 
column-level-end tuning-level)
+
+                          ;; Indent doc-comment lines with 1 tuning
+                          (when (equal token 'T_DOC_COMMENT)
+                            (setq tuning-level 1))
+
+                          (let ((token-line-number-diff (1- (- 
token-end-line-number token-start-line-number))))
+                            (while (>= token-line-number-diff 0)
+                              (puthash (- token-end-line-number 
token-line-number-diff) `(,column-level-end ,tuning-level) line-indents)
+                              ;; (message "Saved line %s indent %s %s" (- 
token-end-line-number token-line-number-diff) column-level tuning-level)
+                              (setq token-line-number-diff (1- 
token-line-number-diff))))
+
+                          ;; Rest tuning-level used for comments
+                          (setq tuning-level 0)))
+
+
                       ;; ;; When nesting decreases but ends with a nesting 
increase, increase indent by one
                       ;; (when (and (< nesting-end nesting-start)
                       ;;            line-contained-nesting-increase)
diff --git a/phps-mode-test-functions.el b/phps-mode-test-functions.el
index 41e46be..cda2fad 100644
--- a/phps-mode-test-functions.el
+++ b/phps-mode-test-functions.el
@@ -74,13 +74,13 @@
    "<?php\n$var = \"A line\nmore text here\nlast line here\";"
    "Multi-line double-quoted string"
    ;; (message "Tokens: %s" phps-mode-lexer-tokens)
-   (should (equal '((1 (0 0)) (2 (1 0)) (3 (1 0)) (4 (1 0))) 
(phps-mode-test-functions--hash-to-list 
(phps-mode-functions-get-lines-indent)))))
+   (should (equal '((1 (0 0)) (2 (0 0)) (3 (1 0)) (4 (1 0))) 
(phps-mode-test-functions--hash-to-list 
(phps-mode-functions-get-lines-indent)))))
 
   (phps-mode-test-with-buffer
    "<?php\n$var = 'A line\nmore text here\nlast line here';"
    "Multi-line single-quoted string"
    ;; (message "Tokens: %s" phps-mode-lexer-tokens)
-   (should (equal '((1 (0 0)) (2 (1 0)) (3 (1 0)) (4 (1 0))) 
(phps-mode-test-functions--hash-to-list 
(phps-mode-functions-get-lines-indent)))))
+   (should (equal '((1 (0 0)) (2 (0 0)) (3 (1 0)) (4 (1 0))) 
(phps-mode-test-functions--hash-to-list 
(phps-mode-functions-get-lines-indent)))))
 
   (phps-mode-test-with-buffer
    "<?php\necho \"A line\" .\n    \"more text here\" .\n    \"last line 
here\";"



reply via email to

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