branch: elpa/lua-mode
commit c3b103dc4c7ca9881c40eb8f7477c85b6ea6bf7f
Author: immerrr <[email protected]>
Commit: immerrr <[email protected]>
lua-beginning-of-proc: improve defun header regex
Now it matches all common Lua function headers, including:
- local function XXX(...)
- XXX = function(...)
- XXX = local function(...)
---
lua-mode.el | 9 +++++++--
test/generic-test.el | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+), 2 deletions(-)
diff --git a/lua-mode.el b/lua-mode.el
index 6640468..122a51e 100644
--- a/lua-mode.el
+++ b/lua-mode.el
@@ -1537,6 +1537,11 @@ If not, return nil."
;; 4. if there's no previous line, indentation is 0
0))))
+(defvar lua--beginning-of-defun-re
+ (lua-rx-to-string '(: bol (? (symbol "local") ws+) lua-funcheader))
+ "Lua top level (matches only at the beginning of line) function header
regex.")
+
+
(defun lua-beginning-of-proc (&optional arg)
"Move backward to the beginning of a lua proc (or similar).
@@ -1548,11 +1553,11 @@ Returns t unless search stops due to beginning or end
of buffer."
(or arg (setq arg 1))
(while (and (> arg 0)
- (re-search-backward "^function[ \t]" nil t))
+ (re-search-backward lua--beginning-of-defun-re nil t))
(setq arg (1- arg)))
(while (and (< arg 0)
- (re-search-forward "^function[ \t]" nil t))
+ (re-search-forward lua--beginning-of-defun-re nil t))
(beginning-of-line)
(setq arg (1+ arg)))
diff --git a/test/generic-test.el b/test/generic-test.el
index 0090674..f9d6d47 100644
--- a/test/generic-test.el
+++ b/test/generic-test.el
@@ -19,3 +19,53 @@
"--[[end here]] end"))
(lua-forward-sexp)
(should (looking-back (rx "--[[end here]] end")))))
+
+(ert-deftest lua-beginning-of-defun-different-headers ()
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("function foobar()"
+ "<>"
+ "end"))
+ (beginning-of-defun)
+ (should (looking-at "function foobar()")))
+
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("local function foobar()"
+ "<>"
+ "end"))
+ (beginning-of-defun)
+ (should (looking-at "local function foobar()")))
+
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("local foobar = function()"
+ "<>"
+ "end"))
+ (beginning-of-defun)
+ (should (looking-at "local foobar = function()")))
+
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("foobar = function()"
+ "<>"
+ "end"))
+ (beginning-of-defun)
+ (should (looking-at "foobar = function()"))))
+
+(ert-deftest lua-beginning-of-defun-accepts-dots-and-colons ()
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("foo.bar = function (x,y,z)"
+ "<>"
+ "end"))
+ (beginning-of-defun)
+ (should (looking-at "foo\\.bar = function (x,y,z)")))
+
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("function foo.bar:baz (x,y,z)"
+ "<>"
+ "end"))
+ (beginning-of-defun)
+ (should (looking-at "function foo.bar:baz (x,y,z)"))))