branch: externals/phps-mode commit e30ac0ca253b6d96970eb44fe0d4571f8414c1d0 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Started implementation of moving lexer and state position when indenting to save time --- phps-functions.el | 27 +++++++++++++++++---------- phps-lexer.el | 2 +- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/phps-functions.el b/phps-functions.el index 9e5c2d5..3312a9b 100644 --- a/phps-functions.el +++ b/phps-functions.el @@ -40,7 +40,7 @@ "Start of buffer changes, nil if none.") ;; TODO Also format white-space inside the line, i.e. after function declarations? -;; TODO Support inline function indentation +;; TODO Support inline function indentations (defun phps-mode/indent-line () "Indent line." (let ((data (phps-mode/get-point-data))) @@ -121,9 +121,12 @@ (let ((indent-sum (+ (* indent-level tab-width) indent-adjust)) current-indentation (current-indentation)) + (when (null current-indentation) + (setq current-indentation 0)) + ;; Only continue if current indentation is wrong (when (not (equal indent-sum current-indentation)) - (let ((indent-diff (- current-indentation indent-sum))) + (let ((indent-diff (- indent-sum current-indentation))) ;; (message "Indenting to %s current column %s" indent-sum (current-indentation)) ;; (message "inside scripting, start: %s, end: %s, indenting to column %s " start end indent-level) @@ -131,16 +134,20 @@ ;; TODO When indent is changed the trailing tokens just need to adjust their token positions, this will improve speed of indent-region a lot ;; TODO Lexer states need to be moved as well - (let ((line-start (line-beginning-position))) - - ;; Set point of change if it's not set or if it's larger than current point - (when (or (not phps-mode/buffer-changes--start) - (< line-start phps-mode/buffer-changes--start)) - ;; (message "Setting changes start from %s to %s" phps-mode/buffer-changes--start start) - (setq phps-mode/buffer-changes--start line-start)) + (phps-mode/move-lexer-tokens line-start indent-diff) + (phps-mode/move-lexer-states line-start indent-diff) + (message "Moving tokens and states %s, %s to %s" indent-diff current-indentation indent-sum) - (phps-mode/run-incremental-lex))))))))))) + ;; ;; Set point of change if it's not set or if it's larger than current point + ;; (when (or (not phps-mode/buffer-changes--start) + ;; (< line-start phps-mode/buffer-changes--start)) + ;; ;; (message "Setting changes start from %s to %s" phps-mode/buffer-changes--start start) + ;; (setq phps-mode/buffer-changes--start line-start)) + + ;; (phps-mode/run-incremental-lex) + + )))))))))) ;; TODO Implement this? (defun phps-mode/indent-region () diff --git a/phps-lexer.el b/phps-lexer.el index 0478323..33bb126 100644 --- a/phps-lexer.el +++ b/phps-lexer.el @@ -1302,7 +1302,7 @@ ANY_CHAR' new-states)) -(defun phps-mode/lexer-move-lexer-tokens (start diff) +(defun phps-mode/move-lexer-tokens (start diff) "Update tokens with moved lexer tokens after or equal to START with modification DIFF." (setq phps-mode/lexer-tokens (phps-mode/get-moved-lexer-tokens phps-mode/lexer-tokens start diff)))