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

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

[elpa] externals/phps-mode 806bb902b3 122/212: Improved indentation for


From: Christian Johansson
Subject: [elpa] externals/phps-mode 806bb902b3 122/212: Improved indentation for chaining objects
Date: Wed, 26 Jan 2022 01:51:12 -0500 (EST)

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

    Improved indentation for chaining objects
---
 phps-mode-indent.el           | 116 ++++++++++++++++++++++++++++++++++++++++--
 test/phps-mode-test-indent.el |   2 +-
 2 files changed, 112 insertions(+), 6 deletions(-)

diff --git a/phps-mode-indent.el b/phps-mode-indent.el
index ee117ead07..7b7318eb69 100644
--- a/phps-mode-indent.el
+++ b/phps-mode-indent.el
@@ -762,12 +762,14 @@
                             (parenthesis-level 0)
                             (is-bracket-less-command nil)
                             (is-same-line-p t)
+                            (is-object-chaining)
+                            (is-object-chaining-on-same-line)
                             (bracket-opened-on-first-line))
                         (while
                             (and
                              not-found
                              (search-backward-regexp
-                              "\\(;\\|{\\|(\\|)\\|=\\|echo[\t ]+\\|print[\t 
]+\\|\n\\|<<<'?\"?[a-zA-Z0-9]+'?\"?\\)"
+                              "\\(;\\|{\\|(\\|)\\|=\\|echo[\t ]+\\|print[\t 
]+\\|\n\\|<<<'?\"?[a-zA-Z0-9]+'?\"?\\|->\\)"
                               nil
                               t))
                           (let ((match (match-string-no-properties 0)))
@@ -791,6 +793,14 @@
                               (setq
                                parenthesis-level
                                (1- parenthesis-level)))
+                             ((string= match "->")
+                              (when (= parenthesis-level 0)
+                                (setq
+                                 is-object-chaining
+                                 t)
+                                (setq
+                                 is-object-chaining-on-same-line
+                                 is-same-line-p)))
                              ((= parenthesis-level 0)
                               (setq is-assignment (string= match "="))
                               (setq is-bracket-less-command
@@ -799,11 +809,13 @@
                                      match))
                               (setq not-found nil)))))
 
-                        (when (and
-                               (not is-same-line-p)
+                        (when (or
                                (and
-                                is-assignment
-                                (not bracket-opened-on-first-line)))
+                                (not is-same-line-p)
+                                is-assignment)
+                               (and
+                                (not is-object-chaining-on-same-line)
+                                is-object-chaining))
                           (setq
                            new-indentation
                            (- new-indentation tab-width)))
@@ -980,6 +992,100 @@
                  new-indentation
                  (+ new-indentation tab-width)))
 
+               ;; $myObject->myFunction()
+               ;;     ->myFunction2()
+               ((string-match-p
+                 "->"
+                 previous-line-string)
+                (let ((not-found t)
+                      (started-chaining-on-this-line t)
+                      (is-assignment)
+                      (is-string-concatenation)
+                      (parenthesis-level 0)
+                      (is-bracket-less-command)
+                      (is-same-line-p t)
+                      (bracket-opened-on-first-line))
+                  (while
+                      (and
+                       not-found
+                       (search-backward-regexp
+                        "\\(;\\|{\\|(\\|)\\|=\\|->\\|echo[\t ]+\\|print[\t 
]+\\|\n\\|^[\t ]*\\.\\|\\.[\t ]*$\\)"
+                        nil
+                        t))
+                    (let ((match (match-string-no-properties 0)))
+                      (cond
+
+                       ((string=
+                         "->"
+                         match)
+                        (setq
+                         started-chaining-on-this-line
+                         is-same-line-p))
+
+                       ((string=
+                         "\n"
+                         match)
+                        (setq
+                         is-same-line-p
+                         nil))
+
+                       ((or
+                         (string=
+                          "echo"
+                          match)
+                         (string=
+                          "print"
+                          match))
+                        (setq
+                         is-bracket-less-command
+                         t)
+                        (setq
+                         not-found
+                         nil))
+
+                       ((or
+                         (string=
+                          ";"
+                          match)
+                         (string=
+                          "}"
+                          match))
+                        (setq
+                         not-found
+                         nil))
+
+                       ((string=
+                         "="
+                         match)
+                        (setq
+                         is-assignment
+                         t)
+                        (setq
+                         not-found
+                         nil))
+
+                       ((string-match-p
+                         "\\(^[\t ]*\\.\\|\\.[\t ]*\\)$"
+                         match)
+                        (setq
+                         is-string-concatenation
+                         t)
+                        (setq
+                         not-found
+                         nil))
+
+                       )))
+
+                  (when (and
+                         (not is-assignment)
+                         (not is-string-concatenation)
+                         (not started-chaining-on-this-line)
+                         (not is-bracket-less-command))
+                    (setq
+                     new-indentation
+                     (+ new-indentation tab-width))))
+                (goto-char point))
+
                ;; /**
                ;;  *
                ;;  */
diff --git a/test/phps-mode-test-indent.el b/test/phps-mode-test-indent.el
index 010b841b6f..f74feaa133 100644
--- a/test/phps-mode-test-indent.el
+++ b/test/phps-mode-test-indent.el
@@ -198,7 +198,7 @@
    "Indentation of chained class method calls outside of assignments and 
conditionals")
 
   (phps-mode-test-indent--should-equal
-   "<?php\n\n$myVar = $myClass->meMethod()\n    ->mySecondMethod()\n    
->myThirdMethod()\n->myFourthFunction(\n    $myVariable\n);"
+   "<?php\n\n$myVar = $myClass->meMethod()\n    ->mySecondMethod()\n    
->myThirdMethod()\n    ->myFourthFunction(\n        $myVariable\n    );"
    "Indentation for chained object operators in assignment with method call 
with arguments")
 
   (phps-mode-test-indent--should-equal



reply via email to

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