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

[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)
 



reply via email to

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