[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[nongnu] elpa/swift-mode 462ea17e 221/496: Improve closures grammar and
From: |
ELPA Syncer |
Subject: |
[nongnu] elpa/swift-mode 462ea17e 221/496: Improve closures grammar and add several related indentation rules |
Date: |
Sun, 29 Aug 2021 11:33:39 -0400 (EDT) |
branch: elpa/swift-mode
commit 462ea17e0898ecd6334575d9a1501d121b095078
Author: ap4y <lod@pisem.net>
Commit: ap4y <lod@pisem.net>
Improve closures grammar and add several related indentation rules
---
swift-mode.el | 26 +++++++++++++------
test/indentation-tests.el | 64 +++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 82 insertions(+), 8 deletions(-)
diff --git a/swift-mode.el b/swift-mode.el
index 65796e4..7fa4452 100644
--- a/swift-mode.el
+++ b/swift-mode.el
@@ -126,9 +126,9 @@
(tern-exp)
(in-exp)
(dot-exp)
- (dot-exp "{" insts "}")
+ (dot-exp "{" closure "}")
(method-call)
- (method-call "{" insts "}")
+ (method-call "{" closure "}")
("enum" decl-exp "{" enum-body "}")
("switch" exp "{" switch-body "}")
(if-clause)
@@ -139,7 +139,7 @@
(method-call (dot-exp "(" method-args ")"))
(method-args (method-arg) (method-arg "," method-arg))
- (method-arg (exp "," "{" insts "}") (exp))
+ (method-arg (exp "," "{" closure "}") (exp))
(exp (op-exp)
("[" decl-exps "]"))
@@ -161,9 +161,11 @@
(if-conditional (exp) (let-decl))
(if-body ("if" if-conditional "{" insts "}"))
- (if-clause (if-body) (if-body "else" if-body)))
+ (if-clause (if-body) (if-body "else" if-body))
+
+ (closure (insts) (id "in" insts) (id "->" id "in" insts)))
;; Conflicts
- '((nonassoc "{") (assoc ",") (assoc ";") (assoc ":") (right "="))
+ '((nonassoc "{") (assoc "in") (assoc ",") (assoc ";") (assoc ":") (right
"="))
'((assoc "in") (assoc "where") (assoc "OP"))
'((assoc ";") (assoc "ecase"))
'((assoc "case")))
@@ -215,6 +217,8 @@
(looking-back "[[:space:]][?!]" (- (point) 2) t)
;; ??, is? and as? are operators
(looking-back "[?][?]\\|as[?]\\|is[?]" (- (point) 3) t)
+ ;; "in" operator in closure
+ (looking-back "in" (- (point) 2) t)
;; Characters placed on the second line in multi-line expression
(looking-at "[ \n\t]+[.?:]")
;; Operators placed on the second line in multi-line expression
@@ -362,15 +366,21 @@
;; Disable unnecessary default indentation for
;; "func" and "class" keywords
- (`(:after . ,(or `"func" `"class")) (smie-rule-parent 0))
+ (`(:after . ,(or `"func" `"class")) (smie-rule-parent))
- (`(:after . "(") (smie-rule-parent swift-indent-offset))
+ ;; "in" token in closure
+ (`(:after . "in")
+ (if (smie-rule-parent-p "{")
+ (smie-rule-parent swift-indent-offset)))
+ (`(:after . "(")
+ (if (smie-rule-parent-p "(") 0
+ (smie-rule-parent swift-indent-offset)))
(`(:before . "(")
(cond
((smie-rule-next-p "[") (smie-rule-parent))
;; Custom indentation for method arguments
- ((smie-rule-parent-p "." "func") (smie-rule-parent 0))))
+ ((smie-rule-parent-p "." "func") (smie-rule-parent))))
(`(:before . "[")
(cond
diff --git a/test/indentation-tests.el b/test/indentation-tests.el
index 2d24fa8..f3a2bc2 100644
--- a/test/indentation-tests.el
+++ b/test/indentation-tests.el
@@ -1805,6 +1805,70 @@ func foo() {
}
")
+(check-indentation anonymous-function-as-a-argument/5
+ "
+foo.bar(10,
+ completionHandler: { complete in
+ |foo
+ }
+)
+" "
+foo.bar(10,
+ completionHandler: { complete in
+ |foo
+ }
+)
+")
+
+(check-indentation anonymous-function-as-a-argument/6
+ "
+foo.bar(10,
+ completionHandler: {
+ complete in
+ |foo
+ }
+)
+" "
+foo.bar(10,
+ completionHandler: {
+ complete in
+ |foo
+ }
+)
+")
+
+(check-indentation anonymous-function-as-a-argument/7
+ "
+foo.bar(10,
+ completionHandler: { (
+ |bar, baz) in
+ foo
+ }
+)
+" "
+foo.bar(10,
+ completionHandler: { (
+ |bar, baz) in
+ foo
+ }
+)
+")
+
+(check-indentation anonymous-function-as-a-argument/8
+ "
+foo.bar(10,
+ completionHandler: { (bar, baz) -> Void in
+ |foo
+ }
+)
+" "
+foo.bar(10,
+ completionHandler: { (bar, baz) -> Void in
+ |foo
+ }
+)
+")
+
(check-indentation indents-expression-with-optional-type/1
"
var object: JsonObject?
- [nongnu] elpa/swift-mode 2d478bf 140/496: Merge pull request #46 from ap4y/multiline_op_statemenets, (continued)
- [nongnu] elpa/swift-mode 2d478bf 140/496: Merge pull request #46 from ap4y/multiline_op_statemenets, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode e09694f 158/496: Release 0.3.0, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 9b6f599 146/496: Apply swift-indent-offset to multi-line class definitions, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 4286ff9 148/496: Merge pull request #52 from ap4y/fix_47, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 0f57a7d 179/496: Add lexer rule for ":" token., ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 2d0194e 184/496: Correct several indentation cases for class defitinion, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode f8190d6 186/496: Extract function into separate grammar and add return typo to the, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode fb2f48e 187/496: Add rule for assignment expression, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 01bcc35 192/496: Improve grammar for functions and contraint protocols grammar to, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode c09229a 198/496: Use semantic hanging-p function instead of custom regex when checking, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 462ea17e 221/496: Improve closures grammar and add several related indentation rules,
ELPA Syncer <=
- [nongnu] elpa/swift-mode f42752b 223/496: Respect comments when calculating position of the implicit semicolon, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode b4b56f6 246/496: Merge pull request #99 from uk-ar/fix-indents-around-comma, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode d047843 258/496: Fix token for :, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode ba39552 261/496: Fix test failure on travis, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 1f39b11 288/496: Fix indent for ternary operator, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 4d90ca5 280/496: Merge pull request #110 from lunaryorn/patch-1, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 0cb5e13 303/496: Improve some wording, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode b6f3664 302/496: Update a few URLs, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 9c180cf 315/496: Fix testing error when running the test twice interactively, ELPA Syncer, 2021/08/29
- [nongnu] elpa/swift-mode 2955e8f 314/496: Simplify indentation for commas, ELPA Syncer, 2021/08/29