branch: elpa/lua-mode
commit 78f0e09565d77938e9974ac3b38b26a75c1fa6d9
Author: immerrr <[email protected]>
Commit: immerrr <[email protected]>
Make sure nested token searches begin from open-token positions
There's a `(forward-char 1)' in the beginning of
`lua-find-matching-token-word' function to make sure the open-token is
not found repeatedly that may skip 1-character close-token (e.g. ] or })
if it's right after the open counterpart.
For example (| being current point):
- |function() return {} end -> (forward-sexp)
- |function() return {} end -> (forward-char 1)
- f|unction() return {} end -> (re-search-forward indentation-modifier)
- function() return {|} end -> (forward-char 1)
- function() return {}| end
At this point closing curly braces will be matched incorrectly as the
close brace has been skipped unmatched.
---
Makefile | 1 +
lua-mode.el | 1 +
test/generic-test.el | 13 +++++++++++++
3 files changed, 15 insertions(+)
diff --git a/Makefile b/Makefile
index 3702314..2c946fb 100644
--- a/Makefile
+++ b/Makefile
@@ -14,6 +14,7 @@ TESTS += test/builtin-font-lock-test.el
TESTS += test/electric-mode-test.el
TESTS += test/indentation-test.el
TESTS += test/strings-and-comments-test.el
+TESTS += test/generic-test.el
default:
@echo version is $(VERSION)
diff --git a/lua-mode.el b/lua-mode.el
index ad10382..6ff8798 100644
--- a/lua-mode.el
+++ b/lua-mode.el
@@ -1049,6 +1049,7 @@ TOKEN-TYPE determines where the token occurs on a
statement. open indicates that
(eq match-type 'middle-or-open)
(eq found-type 'middle-or-open)
(eq match-type found-type))
+ (goto-char found-pos)
(lua-find-matching-token-word found-token
search-direction)))
(when maybe-found-pos
diff --git a/test/generic-test.el b/test/generic-test.el
new file mode 100644
index 0000000..148e1a0
--- /dev/null
+++ b/test/generic-test.el
@@ -0,0 +1,13 @@
+(load (concat (file-name-directory (or load-file-name (buffer-file-name)
+ default-directory))
+ "test-helper.el") nil 'nomessage 'nosuffix)
+
+(ert-deftest lua-forward-sexp-curly-braces ()
+ (with-lua-buffer
+ (lua-insert-goto-<>
+ '("local x = <>function() return {{}} end"
+ ""
+ "function foobar() end"))
+ (lua-forward-sexp)
+ (should (looking-back "x = function() return {{}} end"))))
+