branch: externals/phps-mode
commit 837412c0e5423b4ceb38a8630b37e2d2f485e035
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Improved indentation on lines starting with a closing bracket
---
phps-mode-indent.el | 81 ++++++++++++++++++++++++++++++++++---------
test/phps-mode-test-indent.el | 4 +--
2 files changed, 67 insertions(+), 18 deletions(-)
diff --git a/phps-mode-indent.el b/phps-mode-indent.el
index c8a4d1db39..fb6b0090f0 100644
--- a/phps-mode-indent.el
+++ b/phps-mode-indent.el
@@ -1361,30 +1361,79 @@
;; or
;; array(
;; )
+ ;; or
+ ;; if (
+ ;; myFunction(
+ ;; 'random')
+ ;; ) {
;; but ignore
;; var_dump(array(<<<EOD
;; ölöas
;; EOD
;; ));
- ;; TODO Should backtrack to were bracket started
- ;; TODO and use indentation from that line
((and
current-line-starts-with-closing-bracket
(not previous-line-ends-with-opening-bracket))
- (setq
- new-indentation
- (- new-indentation tab-width))
-
- ;; if (
- ;; myFunction(
- ;; 'random')
- ;; ) {
- (when (and
- previous-line-ends-with-closing-bracket
- (not previous-line-starts-with-closing-bracket))
- (setq
- new-indentation
- (- new-indentation tab-width))))
+ ;; Backtrack to line were bracket started
+ ;; and use indentation from that line for this line
+ (forward-line (* -1 move-length1))
+ (end-of-line)
+ (let ((not-found t)
+ (reference-line)
+ (reference-indentation)
+ (parenthesis-level -1))
+ (while
+ (and
+ not-found
+ (search-backward-regexp
+ "[][(){}]"
+ nil
+ t))
+ (let ((match (match-string-no-properties 0)))
+ (cond
+
+ ((or
+ (string= "(" match)
+ (string= "[" match)
+ (string= "{" match))
+ (setq
+ parenthesis-level
+ (1+ parenthesis-level))
+ (when (= parenthesis-level 0)
+ (setq
+ not-found
+ nil)))
+
+ ((or
+ (string= ")" match)
+ (string= "]" match)
+ (string= "}" match))
+ (setq
+ parenthesis-level
+ (1- parenthesis-level))
+ (when (= parenthesis-level 0)
+ (setq
+ not-found
+ nil)))
+
+ )))
+ (unless not-found
+ (setq
+ reference-line
+ (buffer-substring-no-properties
+ (line-beginning-position)
+ (line-end-position)))
+ (setq
+ reference-indentation
+ (phps-mode-indent--string-indentation
+ reference-line)))
+
+ (goto-char point)
+
+ (when reference-indentation
+ (setq
+ new-indentation
+ reference-indentation))))
;; /**
;; * here
diff --git a/test/phps-mode-test-indent.el b/test/phps-mode-test-indent.el
index 83a6f473ae..11964aca5f 100644
--- a/test/phps-mode-test-indent.el
+++ b/test/phps-mode-test-indent.el
@@ -305,11 +305,11 @@
"Mutiline define statement")
(phps-mode-test-indent--should-equal
- "<?php\nif ($useRuntimeCache\n && self::isWritingnabled()\n &&
\\Aomebo\\Cache\\System::cacheExists(\n $cacheParameters,\n
$cacheKey,\n
\\Aomebo\\Cache\\System::CACHE_STORAGE_LOCATION_FILESYSTEM)\n) {\n"
+ "<?php\nif ($useRuntimeCache\n && self::isWritingnabled()\n &&
\\Aomebo\\Cache\\System::cacheExists(\n $cacheParameters,\n
$cacheKey,\n
\\Aomebo\\Cache\\System::CACHE_STORAGE_LOCATION_FILESYSTEM)\n) { "
"Multiline if condition")
(phps-mode-test-indent--should-equal
- "<?php\nif ($data = \\Aomebo\\Cache\\System::loadCache(\n
$cacheParameters,\n $cacheKey,\n
\\Aomebo\\Cache\\System::FORMAT_SERIALIZE,\n
\\Aomebo\\Cache\\System::CACHE_STORAGE_LOCATION_FILESYSTEM)\n) {\n"
+ "<?php\nif ($data = \\Aomebo\\Cache\\System::loadCache(\n
$cacheParameters,\n $cacheKey,\n
\\Aomebo\\Cache\\System::FORMAT_SERIALIZE,\n
\\Aomebo\\Cache\\System::CACHE_STORAGE_LOCATION_FILESYSTEM)\n) { "
"Multiline if-condition with assignment")
(phps-mode-test-indent--should-equal