branch: elpa/swift-mode commit b4b56f6d78117314c544d0629fbc557d06efad94 Merge: 17bf117 cb7ba6f Author: Arthur Evstifeev <m...@ap4y.me> Commit: Arthur Evstifeev <m...@ap4y.me>
Merge pull request #99 from uk-ar/fix-indents-around-comma Modify indents around comma to meet Xcode spec --- swift-mode.el | 31 ++++++++++++++++++++++++------- test/indentation-tests.el | 8 +++++--- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/swift-mode.el b/swift-mode.el index 9597644..19dd18a 100644 --- a/swift-mode.el +++ b/swift-mode.el @@ -61,6 +61,12 @@ :type 'integer :package-version '(swift-mode "0.3.0")) +(defcustom swift-indent-hanging-comma-offset 4 + "Defines the indentation offset for hanging comma." + :group 'swift + :type 'integer + :package-version '(swift-mode "0.4.0")) + (defcustom swift-repl-executable "xcrun swift" "Path to the Swift CLI." @@ -153,9 +159,11 @@ (enum-cases (enum-case) (enum-case ";" enum-case)) (enum-body (enum-cases) (insts)) - (case-exps (exp) (guard-exp)) - (case (case-exps ":" insts)) - (switch-body (case) (case "case" case)) + (case-exps (exp) + (guard-exp) + (case-exps "," case-exps)) + (case ("case" case-exps "case-:" insts)) + (switch-body (case)) (for-head (in-exp) (op-exp) (for-head ";" for-head)) @@ -247,7 +255,10 @@ ((looking-at "}") (forward-char 1) "}") ((looking-at ",") (forward-char 1) ",") - ((looking-at ":") (forward-char 1) ":") + ((looking-at ":") (forward-char 1) + (if (looking-back "case [^:]+:") + "case-:" + ":")) ((looking-at "->") (forward-char 2) "->") @@ -292,7 +303,10 @@ ((eq (char-before) ?\}) (backward-char 1) "}") ((eq (char-before) ?,) (backward-char 1) ",") - ((eq (char-before) ?:) (backward-char 1) ":") + ((eq (char-before) ?:) (backward-char 1) + (if (looking-back "case [^:]+") + "case-:" + ":")) ((looking-back "->" (- (point) 2) t) (goto-char (match-beginning 0)) "->") @@ -369,9 +383,12 @@ ;; Indent second line of the multi-line class ;; definitions with swift-indent-offset + (`(:before . "case") + (smie-rule-parent)) + (`(:before . ",") - (if (smie-rule-parent-p "class") - (smie-rule-parent swift-indent-offset))) + (if (smie-rule-parent-p "class" "case") + (smie-rule-parent swift-indent-hanging-comma-offset))) ;; Disable unnecessary default indentation for ;; "func" and "class" keywords diff --git a/test/indentation-tests.el b/test/indentation-tests.el index 256f3d7..3153cf1 100644 --- a/test/indentation-tests.el +++ b/test/indentation-tests.el @@ -59,6 +59,8 @@ values of customisable variables." (swift-indent-offset 4) (swift-indent-switch-case-offset 0) (swift-indent-multiline-statement-offset 2) + ;; Change from default value to detect offset bug. + (swift-indent-hanging-comma-offset 3) ,@var-bindings) (with-temp-buffer (insert ,before) @@ -486,7 +488,7 @@ case foo where bar, " " switch true { case foo where bar, - |bar where baz: + |bar where baz: } ") @@ -685,7 +687,7 @@ class Foo: Foo, Bar, } " " class Foo: Foo, Bar, - |Baz { + |Baz { } ") @@ -725,7 +727,7 @@ public class Foo: Foo, Bar, } " " public class Foo: Foo, Bar, - |Baz { + |Baz { } ")