[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode cef3c1b3f7 06/12: More work on end-of-defun i
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode cef3c1b3f7 06/12: More work on end-of-defun implementation |
Date: |
Mon, 13 Feb 2023 12:39:21 -0500 (EST) |
branch: externals/phps-mode
commit cef3c1b3f7597cc9fc63baed53cf6798c5527a92
Author: christian <christian@cvj.se>
Commit: christian <christian@cvj.se>
More work on end-of-defun implementation
---
phps-mode-lex-analyzer.el | 54 ++++++++++++++++++++++++++++++++-----
test/phps-mode-test-lex-analyzer.el | 1 +
2 files changed, 49 insertions(+), 6 deletions(-)
diff --git a/phps-mode-lex-analyzer.el b/phps-mode-lex-analyzer.el
index 660ac3f38f..d594334b0c 100644
--- a/phps-mode-lex-analyzer.el
+++ b/phps-mode-lex-analyzer.el
@@ -1528,17 +1528,59 @@ of performed operations. Optionally do it
FORCE-SYNCHRONOUS."
(setq found-index (point)))
(setq found-index nil))
(setq index (1+ index))))
- (when found-index
- (goto-char found-index))
(if found-index
- t
+ (progn
+ (goto-char found-index)
+ t)
nil)))
(defun phps-mode-lex-analyzer--end-of-defun (&optional arg interactive)
"Custom implementation of `end-of-defun'."
- ;; TODO Implement this
- ;; TODO should start from beginning-of-defun and scan until balance of
brackets
- )
+ (let ((found-index))
+ (save-excursion
+ (when (phps-mode-lex-analyzer--beginning-of-defun)
+ (let ((beginning (point))
+ (bracket-level 0)
+ (found-initial-bracket)
+ (next-bracket (search-forward-regexp "[{}\"']" nil t)))
+ (message "beginning: %S" beginning)
+ (while (and
+ next-bracket
+ (or
+ (not found-initial-bracket)
+ (not (= bracket-level 0))))
+ (let ((match-string (match-string 0)))
+ (message "match-string: %S" match-string)
+ (cond
+ ((string= match-string "{")
+ (unless found-initial-bracket
+ (setq found-initial-bracket t))
+ (setq bracket-level (1+ bracket-level)))
+ ((string= match-string "}")
+ (setq bracket-level (1- bracket-level)))
+ ((string= match-string "\"")
+ ;; TODO Handle double quoted string here
+ )
+ ((string= match-string "'")
+ ;; TODO Handle single-quoted string here
+ )))
+ (unless (and
+ found-initial-bracket
+ (= bracket-level 0))
+ (setq
+ next-bracket
+ (search-forward-regexp "[{}\"']" nil t))))
+ (when (and
+ (= bracket-level 0)
+ found-initial-bracket)
+ (setq
+ found-index
+ (point))))))
+ (if found-index
+ (progn
+ (goto-char found-index)
+ t)
+ nil)))
(provide 'phps-mode-lex-analyzer)
diff --git a/test/phps-mode-test-lex-analyzer.el
b/test/phps-mode-test-lex-analyzer.el
index 07552ec662..946903be63 100644
--- a/test/phps-mode-test-lex-analyzer.el
+++ b/test/phps-mode-test-lex-analyzer.el
@@ -157,6 +157,7 @@
(phps-mode-test--with-buffer
"<?php\nfunction test($a) {\n return $a + 1;\n}\necho 'here';\n"
+ "Test beginning-of-defun and end-of-defun"
(goto-char 27)
(should (equal (phps-mode-lex-analyzer--beginning-of-defun) t))
(should (equal (point) 7))
- [elpa] externals/phps-mode updated (a32f68a0d4 -> 7619526596), Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 1bb2af276e 02/12: Started on support for narrow-to-defun, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 3c0de0167e 03/12: Merge branch 'master' of git.cvj.se:git/emacs-phps-mode, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 295cd646d3 01/12: Added TODO item, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode f197368bb7 04/12: Started custom implementation of beginning-of-defun, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 99fbd99129 08/12: Passing more advanced case of narrow-to-defun, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 72eec26571 11/12: Made test output more pedagogical, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode da43f8d5ad 05/12: More work on beginning-of-defun, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 34f36e6b43 07/12: Passing basic test narrow-to-defun, end-of-defun, beginning-of-defun, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 8587c24bbd 09/12: Passing tests for beginning-of-defun, end-of-defun and narrow-to-defun, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode cef3c1b3f7 06/12: More work on end-of-defun implementation,
Christian Johansson <=
- [elpa] externals/phps-mode e7c6888248 10/12: Improved end-of-defun, beginning-of-defun and narrow-to-defun by taking commented out code into account, Christian Johansson, 2023/02/13
- [elpa] externals/phps-mode 7619526596 12/12: Updated version and changelog for 0.4.38, Christian Johansson, 2023/02/13