branch: externals/sql-indent
commit dc44adc8ae037acfadae344ab5c7c70fc91d76d5
Author: Pierre Téchoueyres <[email protected]>
Commit: Pierre Téchoueyres <[email protected]>

    Add support for assignment and arrow (=>) in align.
    
    Allow to align some keywords in sql statements.
    Ex:
    
    declare
      function dummy(p_param_1 in     varchar2,
                     p_param_2 in out varchar2,
                     p_param_2 out    varchar2)
      return   boolean;
      end dummy;
    
      function dummy_2(p_param_1 out varchar2,
                       p_param_2 out varchar2,
                       p_param_2 out varchar2)
      return   boolean;
    
      function dummy_3(p_param_1     varchar2,
                       p_param_2 in  varchar2,
                       p_param_2 out varchar2)
      return   boolean;
    
      var1 boolean      := true;
      var2 number       := 1;
      var42 varchar2(1) := 'Y';
    begin
      if dummy(p_param_1  => val1,
               p_param_10 => val10) then
        null;
      end if;
    end;
    /
---
 sql-indent.el | 42 +++++++++++++++++++++++++++++++-----------
 1 file changed, 31 insertions(+), 11 deletions(-)

diff --git a/sql-indent.el b/sql-indent.el
index f92b1a7..ec78b29 100644
--- a/sql-indent.el
+++ b/sql-indent.el
@@ -1694,21 +1694,41 @@ determine how to indent each type of syntactic element."
 ;;; alignment rules
 
 (defvar sqlind-align-rules
-  ;; Line up he two sides of an equal sign in an update expression
-  `((sql-update-lineup-equals
-     (regexp . , ".*?\\(\\s *\\)=\\(\\s *\\).*")
-     (modes . '(sql-mode))
-     (group . (1 2))
+  '(;; Line up the two side of arrow =>
+    (sql-arrow-lineup
+     (regexp . "\\(\\s-*\\)=>\\(\\s-*\\)")
+     (modes quote (sql-mode))
+     (group 1 2)
      (case-fold . t)
      (repeat . t))
-    ;; lineup the column aliases (the "as name" part) in a select statement
-    (sql-sqlect-lineup-column-names
-     (regexp . , ".*?\\(\\s +\\)as\\(\\s +\\).*")
-     (modes . '(sql-mode))
-     (group . (1 2))
+    ;; Line up the two sides of an assigment
+    (sql-assign-lineup
+     (regexp . "\\(\\s-*\\):=\\(\\s-*\\)")
+     (modes quote (sql-mode))
+     (group 1 2)
+     (case-fold . t)
+     (repeat . t))
+    ;; Line up the two sides of in / out / in out parameter
+    (sql-param-lineup-in-out
+     (regexp . "\\(\\s-+\\)\\(in out\\|in\\|out\\)\\(\\s-+\\)")
+     (modes quote (sql-mode))
+     (group 1 3)
      (case-fold . t)
      (repeat . t))
-    )
+    ;; Line up the two sides of an equal sign in an update expression
+    (sql-equals
+     (regexp . "\\(\\s-*[^:]\\)=\\([^>]\\s-*\\)")
+     (modes quote (sql-mode))
+     (group 1 2)
+     (case-fold . t)
+     (repeat . t))
+    ;; lineup the column aliases (the "as name" part) in a select statement
+    (sql-select-lineup-column-names
+     (regexp . ".*?\\(\\s +\\)as\\(\\s +\\).*")
+     (modes quote (sql-mode))
+     (group 1 2)
+     (case-fold . t)
+     (repeat . t)))
   "Align rules for SQL codes.
 
 These rules help aligning some SQL statements, such as the column

Reply via email to