branch: elpa/swift-mode commit 18ea9896272745b9e151314ab7c386033c21c40c Merge: 835c3d3 dd8f793 Author: Bozhidar Batsov <bozhidar.bat...@gmail.com> Commit: Bozhidar Batsov <bozhidar.bat...@gmail.com>
Merge pull request #42 from ap4y/customizable_multiline_dot_statement Make multi-line dot statement offset customisable value --- swift-mode.el | 14 ++++++++++++++ test/indentation-tests.el | 31 +++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/swift-mode.el b/swift-mode.el index adea3e9..d6f2f24 100644 --- a/swift-mode.el +++ b/swift-mode.el @@ -53,6 +53,12 @@ :group 'swift :type 'integerp) +(defcustom swift-indent-multiline-dot-offset 2 + "Defines the indentation offset for for multiline dot statement." + :group 'swift + :type 'integerp + :package-version '(swift-mode "0.3.0")) + (defcustom swift-repl-executable "xcrun swift" "Path to the Swift CLI." @@ -266,6 +272,14 @@ (if (smie-rule-parent-p "case" "default") (smie-rule-parent swift-indent-offset))) + ;; Apply swift-indent-multiline-dot-offset only if + ;; - dot is followed by newline, or + ;; - have at least one whitespace character before dot + (`(:before . ".") + (if (or (looking-at "[.][\n]") + (looking-back "[ \t\n]" 1 t)) + (smie-rule-parent swift-indent-multiline-dot-offset))) + (`(:before . "if") (if (smie-rule-prev-p "else") (if (smie-rule-parent-p "{") diff --git a/test/indentation-tests.el b/test/indentation-tests.el index d5dc4b4..c4c9e2a 100644 --- a/test/indentation-tests.el +++ b/test/indentation-tests.el @@ -58,6 +58,7 @@ values of customisable variables." ;; Bind customisable vars to default values for tests. (swift-indent-offset 4) (swift-indent-switch-case-offset 0) + (swift-indent-multiline-dot-offset 2) ,@var-bindings) (with-temp-buffer (insert ,before) @@ -810,6 +811,36 @@ let json_ary = NSJSONSerialization |.JSONObjectWithData(data, options: nil, error: &json_err) as NSArray ") +(check-indentation indents-multiline-expressions-to-user-defined-offset/1 + " +NSNotificationCenter.defaultCenter(). +|postNotificationName(foo, object: nil) +" " +NSNotificationCenter.defaultCenter(). + |postNotificationName(foo, object: nil) +" +((swift-indent-multiline-dot-offset 4))) + +(check-indentation indents-multiline-expressions-to-user-defined-offset/2 + " +NSNotificationCenter.defaultCenter() +|.postNotificationName(foo, object: nil) +" " +NSNotificationCenter.defaultCenter() + |.postNotificationName(foo, object: nil) +" +((swift-indent-multiline-dot-offset 4))) + +(check-indentation indents-multiline-expressions-to-user-defined-offset/3 + " +let json_ary = NSJSONSerialization + |.JSONObjectWithData(data, options: nil, error: &json_err) as NSArray +" " +let json_ary = NSJSONSerialization + |.JSONObjectWithData(data, options: nil, error: &json_err) as NSArray +" +((swift-indent-multiline-dot-offset 4))) + (check-indentation indents-type-annotations/1 " typealias Foo = Bar<Foo.Baz, Foo>