[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 8f3ada6: Improved indentation in two edge cas
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 8f3ada6: Improved indentation in two edge cases |
Date: |
Mon, 17 Feb 2020 06:28:24 -0500 (EST) |
branch: externals/phps-mode
commit 8f3ada6f51c0a45f37009fb3957567005fcebf4b
Author: Christian Johansson <address@hidden>
Commit: Christian Johansson <address@hidden>
Improved indentation in two edge cases
---
Makefile | 2 +-
README.md | 3 +-
phps-mode-lex-analyzer.el | 55 +++++++++--------------
phps-mode.el | 8 ++--
test/phps-mode-test-lex-analyzer.el | 87 +++++++++++++++++++++++--------------
5 files changed, 81 insertions(+), 74 deletions(-)
diff --git a/Makefile b/Makefile
index 87b19f8..137a3f9 100644
--- a/Makefile
+++ b/Makefile
@@ -23,7 +23,7 @@ test-integration:
$(EMACS_CMD) -l test/phps-mode-test-integration.el
.PHONY: test-lex-analyzer
-test-functions:
+test-lex-analyzer:
$(EMACS_CMD) -l test/phps-mode-test-lex-analyzer.el
diff --git a/README.md b/README.md
index d46cf2c..7108627 100644
--- a/README.md
+++ b/README.md
@@ -62,13 +62,13 @@ For flycheck support run `(phps-mode-flycheck-setup)`.
### Asynchronous lexer
Enable with `(setq phps-mode-async-process t)`
+Disable with `(setq phps-mode-async-process nil)`
### Asynchronous lexer via async.el processes
Enable with:
``` emacs-lisp
-(setq phps-mode-async-process t)
(setq phps-mode-async-process-using-async-el t)
```
@@ -77,7 +77,6 @@ Enable with:
Enable with:
``` emacs-lisp
-(setq phps-mode-async-process t)
(setq phps-mode-async-process-using-async-el nil)
```
diff --git a/phps-mode-lex-analyzer.el b/phps-mode-lex-analyzer.el
index 2f57e83..74f4a3d 100644
--- a/phps-mode-lex-analyzer.el
+++ b/phps-mode-lex-analyzer.el
@@ -55,9 +55,6 @@
(defvar-local phps-mode-lex-analyzer--processed-buffer-p nil
"Flag whether current buffer is processed or not.")
-(defvar-local phps-mode-lex-analyzer--process-on-indent-and-imenu-p nil
- "Whether to automatically process buffer when using indent or imenu.")
-
;; VARIABLES
@@ -350,12 +347,12 @@
(when (get-buffer buffer-name)
(with-current-buffer buffer-name
- ;; Move variables into this buffers variables
+ ;; Move variables into this buffers local variables
+ (setq phps-mode-lex-analyzer--processed-buffer-p nil)
(setq phps-mode-lex-analyzer--tokens (nth 0 result))
(setq phps-mode-lex-analyzer--states (nth 1 result))
(setq phps-mode-lex-analyzer--state (nth 2 result))
(setq phps-mode-lex-analyzer--state-stack (nth 3 result))
- (setq phps-mode-lex-analyzer--processed-buffer-p nil)
(phps-mode-lex-analyzer--reset-imenu)
;; Apply syntax color on tokens
@@ -643,26 +640,17 @@
(phps-mode-debug-message
(message "Found no head states"))
- ;; Reset processed buffer flag
- (phps-mode-lex-analyzer--reset-processed-buffer)
-
(setq run-full-lexer t)))
(push (list 'FOUND-NO-HEAD-TOKENS
incremental-start-new-buffer) log)
(phps-mode-debug-message
(message "Found no head tokens"))
- ;; Reset processed buffer flag
- (phps-mode-lex-analyzer--reset-processed-buffer)
-
(setq run-full-lexer t))))
(push (list 'FOUND-NO-CHANGE-POINT-MINIMUM) log)
(phps-mode-debug-message
(message "Found no change point minimum"))
- ;; Reset processed buffer flag
- (phps-mode-lex-analyzer--reset-processed-buffer)
-
(setq run-full-lexer t))
(when run-full-lexer
@@ -673,28 +661,19 @@
log)))
-(defun phps-mode-lex-analyzer--get-processed-buffer ()
- "Get flag for whether buffer is processed or not."
- phps-mode-lex-analyzer--processed-buffer-p)
-
-(defun phps-mode-lex-analyzer--reset-processed-buffer ()
- "Reset flag for whether buffer is processed or not."
- (setq phps-mode-lex-analyzer--processed-buffer-p nil))
-
-(defun phps-mode-lex-analyzer--process-current-buffer ()
+(defun phps-mode-lex-analyzer--process-current-buffer (&optional force)
"Process current buffer, generate indentations and Imenu, trigger
incremental lexer if we have change."
(interactive)
(phps-mode-debug-message (message "Process current buffer"))
(when phps-mode-lex-analyzer--idle-timer
(phps-mode-debug-message
(message "Flag buffer as not processed since changes are detected"))
- (setq phps-mode-lex-analyzer--processed-buffer-p nil)
- (when phps-mode-lex-analyzer--process-on-indent-and-imenu-p
- (phps-mode-debug-message (message "Trigger incremental lexer"))
- (phps-mode-lex-analyzer--process-changes)))
- (if (and
- (not phps-mode-lex-analyzer--processed-buffer-p)
- (not phps-mode-lex-analyzer--idle-timer))
+ (setq phps-mode-lex-analyzer--processed-buffer-p nil))
+ (if (or
+ force
+ (and
+ (not phps-mode-lex-analyzer--processed-buffer-p)
+ (not phps-mode-lex-analyzer--idle-timer)))
(progn
(phps-mode-debug-message (message "Buffer is not processed"))
(let ((processed
@@ -939,6 +918,7 @@ SQUARE-BRACKET-LEVEL and ROUND-BRACKET-LEVEL."
(in-concatenation-round-bracket-level nil)
(in-concatenation-square-bracket-level nil)
(in-concatenation-level 0)
+ (in-double-quotes nil)
(column-level 0)
(column-level-start 0)
(tuning-level 0)
@@ -1167,6 +1147,7 @@ SQUARE-BRACKET-LEVEL and ROUND-BRACKET-LEVEL."
;; INDENTATION LOGIC
+
;; Keep track of round bracket level
(when (string= token "(")
(setq round-bracket-level (1+ round-bracket-level)))
@@ -1175,10 +1156,17 @@ SQUARE-BRACKET-LEVEL and ROUND-BRACKET-LEVEL."
(when first-token-on-line
(setq first-token-is-nesting-decrease t)))
+ ;; Keep track of opened double quotes
+ (when (string= token "\"")
+ (setq in-double-quotes (not in-double-quotes)))
+
;; Keep track of square bracket level
(when (string= token "[")
(setq square-bracket-level (1+ square-bracket-level)))
- (when (string= token "]")
+ (when (and
+ (string= token "]")
+ (not in-double-quotes))
+ ;; You can have stuff like this $var = "abc $b[test]"; and
only the closing square bracket will be tokenized
(setq square-bracket-level (1- square-bracket-level))
(when first-token-on-line
(setq first-token-is-nesting-decrease t)))
@@ -2010,8 +1998,7 @@ SQUARE-BRACKET-LEVEL and ROUND-BRACKET-LEVEL."
current-line-string
(buffer-substring-no-properties
(line-beginning-position)
- (line-end-position)
- )
+ (line-end-position))
)
(when (> line-number 1)
(while (and
@@ -2122,7 +2109,7 @@ SQUARE-BRACKET-LEVEL and ROUND-BRACKET-LEVEL."
(defun phps-mode-lex-analyzer--string-starts-with-closing-bracket-p (string)
"Get bracket count for STRING."
- (string-match-p "^[\r\t ]*\\([\]{}()[]\\|<[a-zA-Z]+\\|</[a-zA-Z]+\\|/>\\)"
string))
+ (string-match-p "^[\r\t ]*\\([\]})[]\\|</[a-zA-Z]+\\|/>\\)" string))
(defun phps-mode-lex-analyzer--string-ends-with-assignment-p (string)
"Get bracket count for STRING."
diff --git a/phps-mode.el b/phps-mode.el
index ee5dd10..99cf923 100644
--- a/phps-mode.el
+++ b/phps-mode.el
@@ -5,8 +5,8 @@
;; Author: Christian Johansson <address@hidden>
;; Maintainer: Christian Johansson <address@hidden>
;; Created: 3 Mar 2018
-;; Modified: 14 Feb 2020
-;; Version: 0.3.32
+;; Modified: 17 Feb 2020
+;; Version: 0.3.33
;; Keywords: tools, convenience
;; URL: https://github.com/cjohansson/emacs-phps-mode
@@ -125,9 +125,9 @@
;; All PHP files MUST end with a non-blank line, terminated with a
single LF.
(phps-mode-add-trailing-newline))
-
+
(phps-mode-lex-analyzer--process-changes nil t)
- (phps-mode-lex-analyzer--process-current-buffer)
+ (phps-mode-lex-analyzer--process-current-buffer t)
(indent-region (point-min) (point-max)))
(let ((old-buffer-contents
(buffer-substring-no-properties (point-min) (point-max)))
diff --git a/test/phps-mode-test-lex-analyzer.el
b/test/phps-mode-test-lex-analyzer.el
index 5e9b46f..6bafa62 100644
--- a/test/phps-mode-test-lex-analyzer.el
+++ b/test/phps-mode-test-lex-analyzer.el
@@ -29,7 +29,7 @@
(require 'phps-mode)
(require 'phps-mode-test)
-(defun phps-mode-test-lex-analyzer-process-changes ()
+(defun phps-mode-test-lex-analyzer--process-changes ()
"Test `phps-mode-lex-analyzer--process-changes'."
(phps-mode-test--with-buffer
@@ -59,7 +59,7 @@
)
-(defun phps-mode-test-lex-analyzer-alternative-indentation ()
+(defun phps-mode-test-lex-analyzer--alternative-indentation ()
"Test `phps-mode-lex-analyzer--alternative-indentation'."
(phps-mode-test--with-buffer
@@ -254,9 +254,21 @@
buffer-contents
"$var =\n 'abc';\n$var =\n 'abc'\n . 'def';\n//
Comment\n"))))
+ (phps-mode-test--with-buffer
+ "<?php\nif ($here) {\n if ($wasHere)\n{\n \n }\n}\n\n"
+ "Alternative indentation on line after condition"
+ (goto-char 38)
+ (should (equal
+ (phps-mode-lex-analyzer--alternative-indentation)
+ 4))
+ (let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
+ (should (equal
+ buffer-contents
+ "<?php\nif ($here) {\n if ($wasHere)\n {\n \n
}\n}\n\n"))))
+
)
-(defun phps-mode-test-lex-analyzer-move-lines-indent ()
+(defun phps-mode-test-lex-analyzer--move-lines-indent ()
"Test `phps-mode-functions-move-lines-indent'."
(phps-mode-test--with-buffer
@@ -291,7 +303,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent ()
"Test `phps-mode-lex-analyzer--get-lines-indent' function."
(phps-mode-test--with-buffer
@@ -514,7 +526,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-psr-2 ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-psr-2 ()
"Test PSR-2 examples from: https://www.php-fig.org/psr/psr-2/."
(phps-mode-test--with-buffer
@@ -633,7 +645,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-multi-line-assignments ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-multi-line-assignments ()
"Test for multi-line assignments."
(phps-mode-test--with-buffer
@@ -686,7 +698,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-inline-if ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-inline-if ()
"Test for inline if indentations."
(phps-mode-test--with-buffer
@@ -706,7 +718,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-alternative-if ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-alternative-if ()
"Test for alternative if indentations."
(phps-mode-test--with-buffer
@@ -726,7 +738,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-classes ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-classes ()
"Test for class indent."
(phps-mode-test--with-buffer
@@ -759,7 +771,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-if ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-if ()
"Test for multi-line if expressions."
(phps-mode-test--with-buffer
@@ -818,7 +830,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-lines-indent-switch-case ()
+(defun phps-mode-test-lex-analyzer--get-lines-indent-switch-case ()
"Test for switch-case indentation."
(phps-mode-test--with-buffer
@@ -845,7 +857,7 @@
)
-(defun phps-mode-test-lex-analyzer-indent-line ()
+(defun phps-mode-test-lex-analyzer--indent-line ()
"Test for indentation."
;; Curly bracket tests
@@ -1100,9 +1112,18 @@
(let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
(should (equal buffer-contents "<html>\n <head>\n <title><?php
$myTitle; ?></title>\n </head>\n <body>\n <?php echo 'test'; ?>\n
<h1>My title</h1>\n <?php if ($myTest): ?>\n <div>\n
A lot of other stuff.\n </div>\n <?php endif; ?>\n
</body>\n</html>"))))
+ (phps-mode-test--with-buffer
+ "<?php\nif ($here) {\n $var = \"abc $b[abc] def\";\n// Was here\n}\n\n"
+ "Indentation after line with square brackets inside double quoted string"
+ (indent-region (point-min) (point-max))
+ (let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
+ (should (equal
+ buffer-contents
+ "<?php\nif ($here) {\n $var = \"abc $b[abc] def\";\n //
Was here\n}\n\n"))))
+
)
-(defun phps-mode-test-lex-analyzer-imenu ()
+(defun phps-mode-test-lex-analyzer--imenu ()
"Test for imenu."
(phps-mode-test--with-buffer
@@ -1182,7 +1203,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-moved-imenu ()
+(defun phps-mode-test-lex-analyzer--get-moved-imenu ()
"Test for moving imenu index."
;; (message "Moved imenu %s" (phps-mode-lex-analyzer--get-moved-imenu
'(("myNamespace" ("myClass" ("myFunctionA" . 108) ("myFunctionB" . 161)))) 0 2))
@@ -1205,7 +1226,7 @@
)
-(defun phps-mode-test-lex-analyzer-comment-uncomment-region ()
+(defun phps-mode-test-lex-analyzer--comment-uncomment-region ()
"Test (comment-region) and (uncomment-region)."
(phps-mode-test--with-buffer
@@ -1270,7 +1291,7 @@
)
-(defun phps-mode-test-lex-analyzer-get-inline-html-indentation ()
+(defun phps-mode-test-lex-analyzer--get-inline-html-indentation ()
"Test function."
(should (equal
@@ -1324,23 +1345,23 @@
(defun phps-mode-test-lex-analyzer ()
"Run test for functions."
;; (setq debug-on-error t)
- (phps-mode-test-lex-analyzer-process-changes)
- (phps-mode-test-lex-analyzer-alternative-indentation)
- (phps-mode-test-lex-analyzer-move-lines-indent)
- (phps-mode-test-lex-analyzer-get-inline-html-indentation)
- (phps-mode-test-lex-analyzer-get-lines-indent-if)
- (phps-mode-test-lex-analyzer-get-lines-indent-classes)
- (phps-mode-test-lex-analyzer-get-lines-indent-inline-if)
- (phps-mode-test-lex-analyzer-get-lines-indent-alternative-if)
- (phps-mode-test-lex-analyzer-get-lines-indent-multi-line-assignments)
- (phps-mode-test-lex-analyzer-get-lines-indent-switch-case)
- (phps-mode-test-lex-analyzer-get-lines-indent-psr-2)
- (phps-mode-test-lex-analyzer-get-lines-indent)
- (phps-mode-test-lex-analyzer-indent-line)
- (phps-mode-test-lex-analyzer-imenu)
- (phps-mode-test-lex-analyzer-get-moved-imenu)
- (phps-mode-test-lex-analyzer-comment-uncomment-region)
- (phps-mode-test-lex-analyzer-move-lines-indent))
+ (phps-mode-test-lex-analyzer--process-changes)
+ (phps-mode-test-lex-analyzer--alternative-indentation)
+ (phps-mode-test-lex-analyzer--move-lines-indent)
+ (phps-mode-test-lex-analyzer--get-inline-html-indentation)
+ (phps-mode-test-lex-analyzer--get-lines-indent-if)
+ (phps-mode-test-lex-analyzer--get-lines-indent-classes)
+ (phps-mode-test-lex-analyzer--get-lines-indent-inline-if)
+ (phps-mode-test-lex-analyzer--get-lines-indent-alternative-if)
+ (phps-mode-test-lex-analyzer--get-lines-indent-multi-line-assignments)
+ (phps-mode-test-lex-analyzer--get-lines-indent-switch-case)
+ (phps-mode-test-lex-analyzer--get-lines-indent-psr-2)
+ (phps-mode-test-lex-analyzer--get-lines-indent)
+ (phps-mode-test-lex-analyzer--indent-line)
+ (phps-mode-test-lex-analyzer--imenu)
+ (phps-mode-test-lex-analyzer--get-moved-imenu)
+ (phps-mode-test-lex-analyzer--comment-uncomment-region)
+ (phps-mode-test-lex-analyzer--move-lines-indent))
(phps-mode-test-lex-analyzer)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [elpa] externals/phps-mode 8f3ada6: Improved indentation in two edge cases,
Christian Johansson <=