emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/smalltalk-mode 072c5a7: * smalltalk-mode.el: Recognize


From: Stefan Monnier
Subject: [elpa] externals/smalltalk-mode 072c5a7: * smalltalk-mode.el: Recognize GST2-style method header; add kw-align option
Date: Fri, 19 Apr 2019 16:36:38 -0400 (EDT)

branch: externals/smalltalk-mode
commit 072c5a763592e1d845b589544aa61a231a9c0090
Author: Stefan Monnier <address@hidden>
Commit: Stefan Monnier <address@hidden>

    * smalltalk-mode.el: Recognize GST2-style method header; add kw-align option
    
    (smalltalk-indent-align-colon): New custom var.
    (smalltalk--smie-rules): Obey it.
    (smalltalk--syntax-propertize): Mark the end of GST2-style method headers.
    (smalltalk--smie-grammar, smalltalk--smie-rules): Handle them.
---
 smalltalk-mode.el | 15 +++++++++++++--
 1 file changed, 13 insertions(+), 2 deletions(-)

diff --git a/smalltalk-mode.el b/smalltalk-mode.el
index dbe2899..aa5cc01 100644
--- a/smalltalk-mode.el
+++ b/smalltalk-mode.el
@@ -60,6 +60,10 @@
   "'Tab size'; used for simple indentation alignment."
   :type 'integer)
 
+(defcustom smalltalk-indent-align-colon nil
+  "If non-nil, try and align the `:' of keyword selectors."
+  :type 'boolean)
+
 ;;;; ---[ Syntax Table ]------------------------------------------------
 
 ;; This may very well be a bug, but certin chars like ?+ are set to be
@@ -264,6 +268,9 @@
                  (string-to-syntax "(>"))))
      (">" (0 (if (smalltalk--pragma-end-p (match-beginning 0))
                  (string-to-syntax ")<"))))
+     ;; FIXME: Ugly Hack!  Mark the newline typically placed
+     ;; after the method header as a separator in the "gst2-aka-bang" syntax.
+     ("![ \t\n]*\n[[:lower:]][[:alnum:]_:. \t]*\\(\n\\)" (1 "."))
      )))
 
 ;;;; ---[ SMIE support ]------------------------------------------------
@@ -310,8 +317,9 @@ The SMIE support is currently experimental 
work-in-progress.")
              (exp "!" exp)             ;GNU Smalltalk extension
              (id ":=" exp)             ;Assignment
              (exp ";" exp)             ;Message cascading
+             (exp "\n" exp)            ;Separator for bang method header
              (exp "." exp)))           ;Separate instructions
-      '((assoc "!") (assoc "|") (assoc ".") (noassoc ":=" "^")
+      '((assoc "!") (assoc "|") (assoc "." "\n") (noassoc ":=" "^")
         (assoc ";") (assoc "kw-sel" "bin-sel"))))))
 
 (defconst smalltalk--smie-id-re
@@ -432,6 +440,7 @@ The SMIE support is currently experimental 
work-in-progress.")
     (`(:after . "|") 0)
     (`(:after . ">") 0)                 ;Indentation after a pragma.
     (`(:after . ":=") smalltalk-indent-amount)
+    (`(:after . "\n") smalltalk-indent-amount) ;GST2 method header separator
     (`(:after . ";")
      (save-excursion
        (forward-char 1)
@@ -475,7 +484,9 @@ The SMIE support is currently experimental 
work-in-progress.")
                (goto-char (nth 1 parent))
                (let ((parent-len (and (looking-at smalltalk--smie-id-re)
                                       (string-width (match-string 0)))))
-                 (- parent-len kw-len)))
+                 (if smalltalk-indent-align-colon
+                     (- parent-len kw-len)
+                   0)))
               ("!" 0)
               (`"bin-sel" 0)            ;FIXME: Not sure what to do here.
               (_



reply via email to

[Prev in Thread] Current Thread [Next in Thread]