[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\";"
- [elpa] externals/phps-mode 6105e5d 226/405: Added a new failing test for indetation, (continued)
- [elpa] externals/phps-mode 6105e5d 226/405: Added a new failing test for indetation, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 5f445cd 229/405: Fixed indentation for while expressions, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode eb0ee5e 236/405: Updated README with imenu-support, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 811c499 220/405: New algorithm now works for switch, case syntax, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode d2e5a03 228/405: Updated indentation algorithm document and README, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 1aa0f90 238/405: Typo in README, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode da1cfd5 231/405: Adding failing lexer test, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode e6a8944 241/405: Started work on a lexer bug with expressions inside double quoted strings, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 0c49d6d 243/405: Removed debugging output, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 95ac15a 245/405: Imenu index now handles class extends and implements, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 67233ef 213/405: Fixed indent algorithm for multi-line strings,
Stefan Monnier <=
- [elpa] externals/phps-mode 36a4b64 222/405: Added lost test for token-less lines again, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 70f2d46 242/405: Fixed lexer issue with multiple expressions inside double-quoted string, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 0286660 224/405: Indentation passes new tests for concatenated strings, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode f05d40a 230/405: Tests for lexer passes again after close_tag modification, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 1bc5713 227/405: New tests for concatenation passes, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode c71a97d 178/405: Started on refactored indentation calculation, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 8bb3918 249/405: Clean-up of unit test logging, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 9201d1c 246/405: Imenu index now handles functions with optional arguments, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 2c3239a 187/405: Adding new failing tests for indentation, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode d9a0119 183/405: Optimized indentation code by removing unused variables, Stefan Monnier, 2019/07/13