changeset 375:d3de57ce4bca

Fixing overzealous SQL paren-nester
author Adam Chlipala <adamc@hcoop.net>
date Thu, 16 Oct 2008 17:31:24 -0400
parents 1099d083a702
children 6fd102fa28f9
files src/elisp/urweb-mode.el tests/sql_indent.ur
diffstat 2 files changed, 19 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/elisp/urweb-mode.el	Thu Oct 16 17:15:21 2008 -0400
+++ b/src/elisp/urweb-mode.el	Thu Oct 16 17:31:24 2008 -0400
@@ -535,19 +535,23 @@
 (defun urweb-in-sql ()
   "Check if the point is in a block of SQL syntax."
   (save-excursion
-    (let ((depth 0)
-          done)
-      (while (and (not done)
-                  (re-search-backward "[()]" nil t))
-        (cond
-         ((looking-at ")")
-          (decf depth))
-         ((looking-at "(")
-          (if (looking-at urweb-sql-main-starters-paren-re)
-              (setq done t)
-            (incf depth)))))
-      (and (>= depth 0)
-           (looking-at urweb-sql-main-starters-paren-re)))))
+    (let ((start-pos (point))
+          (depth 0)
+          done
+          (good t))
+      (when (re-search-backward urweb-sql-main-starters-paren-re nil t)
+        (forward-char)
+        (while (and (not done) (re-search-forward "[()]" start-pos t))
+          (save-excursion
+            (backward-char)
+            (cond
+             ((looking-at ")")
+              (cond
+               ((= depth 0) (setq done t) (setq good nil))
+               (t (decf depth))))
+             ((looking-at "(")
+              (incf depth)))))
+        good))))
 
 (defun urweb-sql-depth ()
   "Check if the point is in a block of SQL syntax.
--- a/tests/sql_indent.ur	Thu Oct 16 17:15:21 2008 -0400
+++ b/tests/sql_indent.ur	Thu Oct 16 17:31:24 2008 -0400
@@ -1,7 +1,7 @@
 table t1 : {A : int, B : string, C : float}
 
 val q1 = (SELECT *
-          FROM t1)
+          FROM t1
           WHERE A = 0)
 
 val a1 = (INSERT INTO t1
@@ -9,7 +9,7 @@
 
 val a2 = (UPDATE t1
           SET A = 3, B = "4", C = 5.0)
-
+         
 val a3 = (DELETE FROM t1
           WHERE B <> "good")