branch: externals/phps-mode commit 37406602856c1528c174dac5b79016424a10b8e9 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Get point-data now collects information about square brackets --- phps-functions.el | 42 +++++++++++++++++++++++++----------------- phps-test-functions.el | 7 +++++++ 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/phps-functions.el b/phps-functions.el index 22e42ee..227d0f4 100644 --- a/phps-functions.el +++ b/phps-functions.el @@ -43,6 +43,7 @@ "Start of buffer changes, nil if none.") ;; NOTE Also format white-space inside the line, i.e. after function declarations? + ;; TODO Support inline function indentations ;; TODO Support indentation for multi-line scalar assignments ;; TODO Add support for automatic parenthesis, bracket, square-bracket, single-quote and double-quote encapsulations @@ -203,13 +204,15 @@ (let ((line-beginning (point)) (line-end (line-end-position)) (start-in-scripting nil) - (start-brace-level 0) - (start-parenthesis-level 0) + (start-curly-bracket-level 0) + (start-round-bracket-level 0) + (start-square-bracket-level 0) (start-inline-function-level 0) (start-token-number nil) (end-in-scripting nil) - (end-brace-level 0) - (end-parenthesis-level 0) + (end-curly-bracket-level 0) + (end-round-bracket-level 0) + (end-square-bracket-level 0) (end-inline-function-level 0) (end-token-number nil) (line-in-doc-comment nil) @@ -240,14 +243,17 @@ ('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)) - ('T_CURLY_OPEN (setq start-brace-level (+ start-brace-level 1))) - ('T_DOLLAR_OPEN_CURLY_BRACES (setq start-brace-level (+ start-brace-level 1))) - ("}" (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))) + ('T_CURLY_OPEN (setq start-curly-bracket-level (+ start-curly-bracket-level 1))) + ('T_DOLLAR_OPEN_CURLY_BRACES (setq start-curly-bracket-level (+ start-curly-bracket-level 1))) + ("{" (setq start-curly-bracket-level (+ start-curly-bracket-level 1))) + ("}" (setq start-curly-bracket-level (- start-curly-bracket-level 1))) + ("[" (setq start-square-bracket-level (+ start-square-bracket-level 1))) + ("]" (setq start-square-bracket-level (- start-square-bracket-level 1))) + ("(" (setq start-round-bracket-level (+ start-round-bracket-level 1))) + (")" (setq start-round-bracket-level (- start-round-bracket-level 1))) (_))) + ;; Are we at the final line and inside a doc-comment that ends after it? (when (and (< token-start line-beginning) (>= token-end line-end) (eq token 'T_DOC_COMMENT)) @@ -262,19 +268,21 @@ ('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)) - ('T_CURLY_OPEN (setq end-brace-level (+ end-brace-level 1))) - ('T_DOLLAR_OPEN_CURLY_BRACES (setq end-brace-level (+ end-brace-level 1))) - ("}" (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))) + ('T_CURLY_OPEN (setq end-curly-bracket-level (+ end-curly-bracket-level 1))) + ('T_DOLLAR_OPEN_CURLY_BRACES (setq end-curly-bracket-level (+ end-curly-bracket-level 1))) + ("{" (setq end-curly-bracket-level (+ end-curly-bracket-level 1))) + ("}" (setq end-curly-bracket-level (- end-curly-bracket-level 1))) + ("[" (setq end-square-bracket-level (+ end-square-bracket-level 1))) + ("]" (setq end-square-bracket-level (- end-square-bracket-level 1))) + ("(" (setq end-round-bracket-level (+ end-round-bracket-level 1))) + (")" (setq end-round-bracket-level (- end-round-bracket-level 1))) (_))) ))) (when (not found-line-tokens) (setq start-token-number nil) (setq end-token-number nil)) - (let ((data (list (list start-in-scripting start-brace-level start-parenthesis-level start-inline-function-level start-token-number line-in-doc-comment) (list end-in-scripting end-brace-level end-parenthesis-level end-inline-function-level end-token-number line-in-doc-comment)))) + (let ((data (list (list start-in-scripting start-curly-bracket-level start-round-bracket-level start-square-bracket-level start-inline-function-level start-token-number line-in-doc-comment) (list end-in-scripting end-curly-bracket-level end-round-bracket-level end-square-bracket-level end-inline-function-level end-token-number line-in-doc-comment)))) ;; (message "data: %s" data) data))))) diff --git a/phps-test-functions.el b/phps-test-functions.el index ed538cc..fefb864 100644 --- a/phps-test-functions.el +++ b/phps-test-functions.el @@ -42,6 +42,8 @@ (autoload 'phps-mode/get-point-data "phps-functions") (autoload 'should "ert") +;; TODO Add unit tests for HEREDOC, NOWDOC as well + (defun phps-mode/test-indent-line () "Test for indentation." @@ -165,6 +167,7 @@ "<?php\nif (myRandomCondition()):\necho 'Something here';\n else:\n echo 'Something else here';\nendif;\n" (goto-char 60) (phps-mode/indent-line) + (message "Tokens %s" phps-mode/lexer-tokens) (let ((buffer-contents (buffer-substring-no-properties (point-min) (point-max)))) (should (equal buffer-contents "<?php\nif (myRandomCondition()):\necho 'Something here';\nelse:\n echo 'Something else here';\nendif;\n")))) @@ -226,6 +229,10 @@ ) +;; TODO Support all control structures +;; if, else, elseif, else if, while, do-while, for, foreach, break, switch, declare, return, require, include, require_once, include_once, goto + + (defun phps-mode/test-functions--get-point-data () "Return information about point in tokens."