[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 1b891ea 031/405: More work on indentation and
From: |
Stefan Monnier |
Subject: |
[elpa] externals/phps-mode 1b891ea 031/405: More work on indentation and related tests |
Date: |
Sat, 13 Jul 2019 09:59:34 -0400 (EDT) |
branch: externals/phps-mode
commit 1b891ea83c61fbd3bd745b8fd65186d3c3718ea8
Author: Christian Johansson <address@hidden>
Commit: Christian Johansson <address@hidden>
More work on indentation and related tests
---
phps-functions.el | 25 +++++++------
phps-lexer.el | 105 ++++++++++++++++++++++++++++++-----------------------
phps-test-lexer.el | 50 +++++++++++++++----------
3 files changed, 103 insertions(+), 77 deletions(-)
diff --git a/phps-functions.el b/phps-functions.el
index e6bf6d3..57f59c6 100644
--- a/phps-functions.el
+++ b/phps-functions.el
@@ -38,17 +38,20 @@
(defun phps-mode/indent-line ()
"Indent line."
- (save-excursion
- (beginning-of-line)
- (let ((data (phps-mode/lexer-get-point-data)))
- ;; Are we in scripting?
- (if (nth 0 data)
- (let ((indent-level (* (+ (nth 1 data) (nth 2 data)) 4)))
- (message "inside scripting %s, indenting to column %s " data
indent-level)
- (indent-line-to indent-level))
- (progn
- (message "Outside scripting %s" data)
- (indent-relative))))))
+ (let ((data (phps-mode/lexer-get-point-data)))
+ (save-excursion
+ (beginning-of-line)
+ (let ((start (nth 0 data))
+ (end (nth 1 data)))
+
+ ;; Are we in scripting?
+ (if (nth 0 start)
+ (let ((indent-level (* (+ (nth 1 start) (nth 2 start)) 4)))
+ (message "inside scripting, start: %s, end: %s, indenting to
column %s " start end indent-level)
+ (indent-line-to indent-level))
+ (progn
+ (message "Outside scripting %s" start)
+ (indent-relative)))))))
(defun phps-mode/indent-region ()
"Indent region."
diff --git a/phps-lexer.el b/phps-lexer.el
index 979a383..da663ec 100644
--- a/phps-lexer.el
+++ b/phps-lexer.el
@@ -368,12 +368,12 @@
"Push TOKEN to list with START and END."
(phps-mode/COLOR_SYNTAX token start end)
- (when (and
- phps-mode/prepend_trailing_brace
- (> end (- (point-max) 2)))
- ;; (message "Adding trailing brace")
- (setq phps-mode/prepend_trailing_brace nil)
- (phps-mode/RETURN_TOKEN "}" (- end 1) end))
+ ;; (when (and
+ ;; phps-mode/prepend_trailing_brace
+ ;; (> end (- (point-max) 2)))
+ ;; ;; (message "Adding trailing brace")
+ ;; (setq phps-mode/prepend_trailing_brace nil)
+ ;; (phps-mode/RETURN_TOKEN "}" (- end 1) end))
;; (message "Added token %s %s %s" token start end)
@@ -834,7 +834,7 @@
(when (string= data ";")
(setq phps-mode/prepend_trailing_brace t)
;; (message "Set flag prepend trailing brace")
- (setq use-brace t)
+ ;; (setq use-brace t)
)
(setq phps-mode/declaring_namespace nil))
(if use-brace
@@ -1260,45 +1260,58 @@ ANY_CHAR'
(defun phps-mode/lexer-get-point-data()
"Return information about point in tokens."
;; (message "Point: %s in %s" (point) phps-mode/lexer-tokens)
- (let ((position (point))
- (line-end (line-end-position))
- (in-scripting nil)
- (brace-level 0)
- (parenthesis-level 0)
- (inline-function-level 0))
- (catch 'stop-iteration
- (dolist (item phps-mode/lexer-tokens)
- (let ((token (car item))
- (start (car (cdr item)))
- (end (cdr (cdr item))))
- ;; (message "Token: %s Start: %s End: %s Item: %s" token start end
item)
-
- (when (> start line-end)
- ;; (message "Stopping iteration at: %s %s" start position)
- (throw 'stop-iteration nil))
-
- ;; When start of token is equal or less to current point
- (when (<= start position)
- (pcase token
- ('T_OPEN_TAG (setq in-scripting t))
- ('T_OPEN_TAG_WITH_ECHO (setq in-scripting t))
- ('T_CLOSE_TAG (setq in-scripting nil))
- ("{" (setq brace-level (+ brace-level 1)))
- ("(" (setq parenthesis-level (+ parenthesis-level 1)))
- (")" (setq parenthesis-level (- parenthesis-level 1)))
- (_)))
-
- ;; When start of token is equal or less to end of curent line
- (when (<= start line-end)
- (pcase token
- ("}" (setq brace-level (- brace-level 1)))
- (_)))
-
- )))
- (let ((data (list in-scripting brace-level parenthesis-level
inline-function-level)))
- ;; (message "data: %s" data)
- data)
- ))
+ (save-excursion
+ (beginning-of-line)
+ (let ((position (point))
+ (line-end (line-end-position))
+ (start-in-scripting nil)
+ (start-brace-level 0)
+ (start-parenthesis-level 0)
+ (start-inline-function-level 0)
+ (end-in-scripting nil)
+ (end-brace-level 0)
+ (end-parenthesis-level 0)
+ (end-inline-function-level 0))
+ (catch 'stop-iteration
+ (dolist (item phps-mode/lexer-tokens)
+ (let ((token (car item))
+ (start (car (cdr item)))
+ (end (cdr (cdr item))))
+ ;; (message "Token: %s Start: %s End: %s Item: %s" token start end
item)
+
+ (when (> start line-end)
+ ;; (message "Stopping iteration at: %s %s" start position)
+ (throw 'stop-iteration nil))
+
+ ;; When start of token is equal or less to current point
+ (when (< start position)
+ (pcase token
+ ('T_OPEN_TAG (setq start-in-scripting t))
+ ('T_OPEN_TAG_WITH_ECHO (setq start-in-scripting t))
+ ('T_CLOSE_TAG (setq start-in-scripting nil))
+ ("}" (setq start-brace-level (- start-brace-level 1)))
+ ("{" (setq start-brace-level (+ start-brace-level 1)))
+ ("(" (setq start-parenthesis-level (+ start-parenthesis-level
1)))
+ (")" (setq start-parenthesis-level (- start-parenthesis-level
1)))
+ (_)))
+
+ ;; When start of token is equal or less to end of curent line
+ (when (< start line-end)
+ (pcase token
+ ('T_OPEN_TAG (setq end-in-scripting t))
+ ('T_OPEN_TAG_WITH_ECHO (setq end-in-scripting t))
+ ('T_CLOSE_TAG (setq end-in-scripting nil))
+ ("}" (setq end-brace-level (- end-brace-level 1)))
+ ("{" (setq end-brace-level (+ end-brace-level 1)))
+ ("(" (setq end-parenthesis-level (+ end-parenthesis-level 1)))
+ (")" (setq end-parenthesis-level (- end-parenthesis-level 1)))
+ (_)))
+
+ )))
+ (let ((data (list (list start-in-scripting start-brace-level
start-parenthesis-level start-inline-function-level) (list end-in-scripting
end-brace-level end-parenthesis-level end-inline-function-level))))
+ ;; (message "data: %s" data)
+ data)
+ )))
(defun phps-mode/lex--SETUP (start end)
"Just prepare other lexers for lexing region START to END."
diff --git a/phps-test-lexer.el b/phps-test-lexer.el
index c96499c..225a426 100644
--- a/phps-test-lexer.el
+++ b/phps-test-lexer.el
@@ -231,13 +231,14 @@
(phps-mode/with-test-buffer
"<?php\nnamespace MyNameSpace{\n\tclass MyClass {\n\t\tpublic function
__construct() {\n\t\t\texit;\n\t\t}\n\t}\n}\n"
+
(should (equal phps-mode/lexer-tokens
'((T_OPEN_TAG 1 . 7) (T_NAMESPACE 7 . 16) (T_STRING 17 . 28)
("{" 28 . 29) (T_CLASS 31 . 36) (T_STRING 37 . 44) ("{" 45 . 46) (T_PUBLIC 49 .
55) (T_FUNCTION 56 . 64) (T_STRING 65 . 76) ("(" 76 . 77) (")" 77 . 78) ("{" 79
. 80) (T_EXIT 84 . 88) (";" 88 . 89) ("}" 92 . 93) ("}" 95 . 96) ("}" 97 .
98)))))
(phps-mode/with-test-buffer
"<?php\nNAMESPACE MyNameSpace;\nCLASS MyClass {\n\tpublic function
__construct() {\n\t\texit;\n\t}\n}\n"
(should (equal phps-mode/lexer-tokens
- '((T_OPEN_TAG 1 . 7) (T_NAMESPACE 7 . 16) (T_STRING 17 . 28)
("{" 28 . 29) (T_CLASS 30 . 35) (T_STRING 36 . 43) ("{" 44 . 45) (T_PUBLIC 47 .
53) (T_FUNCTION 54 . 62) (T_STRING 63 . 74) ("(" 74 . 75) (")" 75 . 76) ("{" 77
. 78) (T_EXIT 81 . 85) (";" 85 . 86) ("}" 88 . 89) ("}" 90 . 91) ("}" 90 .
91)))))
+ '((T_OPEN_TAG 1 . 7) (T_NAMESPACE 7 . 16) (T_STRING 17 . 28)
(";" 28 . 29) (T_CLASS 30 . 35) (T_STRING 36 . 43) ("{" 44 . 45) (T_PUBLIC 47 .
53) (T_FUNCTION 54 . 62) (T_STRING 63 . 74) ("(" 74 . 75) (")" 75 . 76) ("{" 77
. 78) (T_EXIT 81 . 85) (";" 85 . 86) ("}" 88 . 89) ("}" 90 . 91)))))
)
(defun phps-mode/test-lexer--errors ()
@@ -265,44 +266,45 @@
(phps-mode/with-test-buffer
"<?php\nNAMESPACE MyNameSpace;\nCLASS MyClass {\n\tpublic function
__construct() {\n\t\texit;\n\t}\n}\n"
- (goto-char 30)
- (should (equal (list t 1 0 0) (phps-mode/lexer-get-point-data))))
+ (goto-char 35)
+ (should (equal (list (list t 0 0 0) (list t 1 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
"<html><head><title><?php echo $title; ?></title><body>Bla
bla</body></html>"
(goto-char 15)
- (should (equal (list nil 0 0 0) (phps-mode/lexer-get-point-data))))
+ (should (equal (list (list nil 0 0 0) (list nil 0 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
"<html><head><title><?php echo $title; ?></title><body>Bla
bla</body></html>"
(goto-char 30)
- (should (equal (list t 0 0 0) (phps-mode/lexer-get-point-data))))
+ (should (equal (list (list nil 0 0 0) (list nil 0 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
"<html><head><title><?php echo $title; ?></title><body>Bla
bla</body></html>"
(goto-char 50)
- (should (equal (list nil 0 0 0) (phps-mode/lexer-get-point-data))))
+ (should (equal (list (list nil 0 0 0) (list nil 0 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
- "<html><head><title><?php if ($myCondition) { if ($mySeconCondition) {
echo $title; } } ?></title><body>Bla bla</body></html>"
+ "<html><head><title><?php if ($myCondition) { \n if ($mySeconCondition) {
echo $title; } } ?></title><body>Bla bla</body></html>"
;; (message "Tokens: %s" phps-mode/lexer-tokens)
(goto-char 48)
- (should (equal (list t 1 0 0) (phps-mode/lexer-get-point-data))))
+ (should (equal (list (list t 1 0 0) (list nil 0 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
- "<html><head><title><?php if ($myCondition) { if ($mySeconCondition) { echo
$title; } } ?></title><body>Bla bla</body></html>"
- (goto-char 70)
- (should (equal (list t 2 0 0) (phps-mode/lexer-get-point-data))))
+ "<html><head><title><?php if ($myCondition) { if ($mySeconCondition) {\n
echo $title;\n} } ?></title><body>Bla bla</body></html>"
+ (goto-char 72)
+ (should (equal (list (list t 2 0 0) (list t 2 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
- "<html><head><title><?php if ($myCondition) { if ($mySeconCondition) { echo
$title; } } ?></title><body>Bla bla</body></html>"
- (goto-char 85)
- (should (equal (list t 1 0 0) (phps-mode/lexer-get-point-data))))
+ "<html><head><title><?php if ($myCondition) {\nif ($mySeconCondition)
{\necho $title;\n}\n}\n ?></title><body>Bla bla</body></html>"
+ (goto-char 84)
+ (should (equal (list (list t 2 0 0) (list t 1 0 0))
(phps-mode/lexer-get-point-data))))
(phps-mode/with-test-buffer
"<html><head><title><?php if ($myCondition) { if ($mySeconCondition) { echo
$title; } } ?></title><body>Bla bla</body></html>"
+
(goto-char 100)
- (should (equal (list nil 0 0 0) (phps-mode/lexer-get-point-data))))
+ (should (equal (list (list nil 0 0 0) (list nil 0 0 0))
(phps-mode/lexer-get-point-data))))
)
@@ -313,20 +315,28 @@
(goto-char 69)
(phps-mode/indent-line)
(let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
- (should (equal buffer-contents "<html><head><title><?php if
($myCondition) {\n if ($mySeconCondition) {\necho $title;\n\n}
?></title><body>Bla bla</body></html>")))
- (goto-char 85)
+ (should (equal buffer-contents "<html><head><title><?php if
($myCondition) {\n if ($mySeconCondition) {\necho $title;\n\n}
?></title><body>Bla bla</body></html>"))))
+
+ (phps-mode/with-test-buffer
+ "<html><head><title><?php if ($myCondition) {\nif ($mySeconCondition)
{\necho $title;\n\n} ?></title><body>Bla bla</body></html>"
+ (goto-char 80)
(phps-mode/indent-line)
(let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
- (should (equal buffer-contents "<html><head><title><?php if
($myCondition) {\n if ($mySeconCondition) {\n echo $title;\n\n}
?></title><body>Bla bla</body></html>")))
+ (should (equal buffer-contents "<html><head><title><?php if
($myCondition) {\nif ($mySeconCondition) {\n echo $title;\n\n}
?></title><body>Bla bla</body></html>"))))
+
+ (phps-mode/with-test-buffer
+ "<html><head><title><?php if ($myCondition) {\nif ($mySeconCondition)
{\necho $title;\n\n} ?></title><body>Bla bla</body></html>"
(goto-char 98)
(phps-mode/indent-line)
(let ((buffer-contents (buffer-substring-no-properties (point-min)
(point-max))))
- (should (equal buffer-contents "<html><head><title><?php if
($myCondition) {\n if ($mySeconCondition) {\n echo $title;\n\n }
?></title><body>Bla bla</body></html>")))))
+ (should (equal buffer-contents "<html><head><title><?php if
($myCondition) {\nif ($mySeconCondition) {\necho $title;\n\n}
?></title><body>Bla bla</body></html>"))))
+
+ )
(defun phps-mode/test-lexer ()
"Run test for lexer."
;; (message "-- Running all tests for lexer... --\n")
- ;; (setq debug-on-error t)
+ (setq debug-on-error t)
(phps-mode/test-lexer--script-boundaries)
(phps-mode/test-lexer--simple-tokens)
(phps-mode/test-lexer--complex-tokens)
- [elpa] externals/phps-mode 64a3ca8 014/405: Modified start and end for single and double quoted strings, (continued)
- [elpa] externals/phps-mode 64a3ca8 014/405: Modified start and end for single and double quoted strings, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 3ea8c64 003/405: Added license, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode f6e3ce4 027/405: Added another test for comments, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 4fa9341 030/405: Started with unit tests for indentation, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 184dfa5 034/405: Indentation outside PHP now does nothing, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 5c0568b 033/405: Added some basic unit tests for indentation, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 47440dd 036/405: Added test for decreasing indentation with letters, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 9d3f644 032/405: Separated indentation tests for lexer tests, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode d839f8a 029/405: More work on indentation support, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode efcefde 035/405: Added support for closing parenthesis and braces, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 1b891ea 031/405: More work on indentation and related tests,
Stefan Monnier <=
- [elpa] externals/phps-mode c6e5255 038/405: Merge branch 'master' of https://github.com/cjohansson/emacs-phps-mode, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 3837d9c 001/405: My initial commit, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 6776468 037/405: Started worked with adding references to tokens from point meta information, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode feb5724 039/405: Various debug work, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode e36d477 045/405: token-number from point now is the same format as (nth), Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode b437374 040/405: Fixed bug in parsing of object parameters inside double quoted string, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 7161184 041/405: Handles stacked states better, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode c625217 042/405: Added flag for PSR-2 white-space settings, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode b629c4b 050/405: Updated comments and TODOs, Stefan Monnier, 2019/07/13
- [elpa] externals/phps-mode 4b4a375 043/405: Using lexical bindings for all files, Stefan Monnier, 2019/07/13