@@ -172,6 +172,9 @@ declaration and its offset is `swift-mode:basic-offset'."
172
172
((eq (nth 3 parser-state) t )
173
173
(swift-mode:calculate-indent-of-multiline-string))
174
174
175
+ ((looking-at " //" )
176
+ (swift-mode:calculate-indent-of-single-line-comment))
177
+
175
178
(t
176
179
(swift-mode:calculate-indent-of-code)))))
177
180
@@ -238,6 +241,23 @@ declaration and its offset is `swift-mode:basic-offset'."
238
241
(setq string-beginning-position (nth 8 (syntax-ppss )))))
239
242
(forward-line 0 )))
240
243
244
+ (defun swift-mode:calculate-indent-of-single-line-comment ()
245
+ " Return the indentation of the current line inside a single-line comment."
246
+ (cond
247
+ ((save-excursion
248
+ (forward-line 0 )
249
+ (bobp ))
250
+ (swift-mode:indentation (point-min ) 0 ))
251
+ ((save-excursion
252
+ (forward-line -1 )
253
+ (skip-syntax-forward " " )
254
+ (looking-at " //" ))
255
+ (forward-line -1 )
256
+ (skip-syntax-forward " " )
257
+ (swift-mode:indentation (point ) 0 ))
258
+ (t
259
+ (swift-mode:calculate-indent-of-code))))
260
+
241
261
(defun swift-mode:calculate-indent-of-code ()
242
262
" Return the indentation of the current line outside multiline comments."
243
263
(back-to-indentation )
@@ -1525,62 +1545,103 @@ multiline comment, close the previous comment and start new one if
1525
1545
See `indent-new-comment-line' for SOFT."
1526
1546
(interactive )
1527
1547
(let* ((chunk (swift-mode:chunk-after))
1528
- (comment-beginning-position (swift-mode:chunk:start chunk))
1529
- (space-after-asterisk
1530
- (if swift-mode:insert-space-after-asterisk-in-comment " " " " ))
1531
- (default-line-prefix
1532
- (if swift-mode:prepend-asterisk-to-comment-line
1533
- (concat " *" space-after-asterisk)
1534
- " " )))
1535
- (delete-horizontal-space )
1548
+ (comment-beginning-position (swift-mode:chunk:start chunk)))
1536
1549
(if soft (insert-and-inherit ?\n ) (newline 1 ))
1537
1550
(delete-horizontal-space )
1538
1551
1539
- (when (swift-mode:chunk:comment-p chunk)
1552
+ (cond
1553
+ ((not (swift-mode:chunk:comment-p chunk))
1554
+ (indent-according-to-mode ))
1555
+
1556
+ ((swift-mode:chunk:single-line-comment-p chunk)
1540
1557
(insert-before-markers-and-inherit
1541
- (cond
1542
- ((swift-mode:chunk:single-line-comment-p chunk)
1543
- (save-excursion
1544
- (goto-char comment-beginning-position)
1545
- (looking-at " /+\\ (\\ s *\\ )" )
1546
- (match-string-no-properties 0 )))
1558
+ (save-excursion
1559
+ (goto-char comment-beginning-position)
1560
+ (looking-at " /+\\ s *" )
1561
+ (match-string-no-properties 0 )))
1562
+ (indent-according-to-mode ))
1547
1563
1548
- (comment-multi-line
1549
- (save-excursion
1550
- (forward-line 0 )
1551
- (forward-char -1 )
1552
- (forward-line 0 )
1553
- (if (<= (point ) comment-beginning-position)
1554
- ; ; The cursor was on the 2nd line of the comment.
1555
- ; ; Uses default prefix.
1556
- default-line-prefix
1557
- ; ; The cursor was on the 3nd or following lines of
1558
- ; ; the comment.
1559
- ; ; Use the prefix of the previous line.
1560
- (back-to-indentation )
1561
- (if (and swift-mode:prepend-asterisk-to-comment-line
1562
- (looking-at " \\ *+\\ s *" ))
1563
- (match-string-no-properties 0 )
1564
- " " ))))
1565
-
1566
- (t
1567
- (backward-char )
1568
- (insert-before-markers-and-inherit " */" )
1569
- (forward-char )
1570
- (save-excursion
1571
- (goto-char comment-beginning-position)
1572
- (looking-at " /\\ *+\\ s *" )
1573
- (match-string-no-properties 0 ))))))
1574
- (indent-according-to-mode )
1564
+ ((not comment-multi-line)
1565
+ (insert-before-markers-and-inherit
1566
+ (save-excursion
1567
+ (goto-char comment-beginning-position)
1568
+ (looking-at " /\\ *+\\ s *" )
1569
+ (match-string-no-properties 0 )))
1570
+ ; ; Cleans up and closes the previous line.
1571
+ (save-excursion
1572
+ (forward-line 0 )
1573
+ (backward-char )
1574
+ (delete-horizontal-space )
1575
+ (insert-before-markers-and-inherit " */" ))
1576
+ (indent-according-to-mode ))
1577
+
1578
+ ((save-excursion
1579
+ (forward-line -1 )
1580
+ (<= (point ) comment-beginning-position))
1581
+ ; ; The cursor was on the 2nd line of the comment.
1582
+ ; ; Uses default prefix.
1583
+ (when swift-mode:prepend-asterisk-to-comment-line
1584
+ (insert-before-markers-and-inherit " *" )
1585
+ (when swift-mode:insert-space-after-asterisk-in-comment
1586
+ (insert-before-markers-and-inherit " " )))
1587
+ (indent-according-to-mode )
1588
+ (insert-before-markers-and-inherit
1589
+ (save-excursion
1590
+ (goto-char comment-beginning-position)
1591
+ (forward-char 1 )
1592
+ (looking-at " \\ **\\ (\\ s *\\ )" )
1593
+ (let ((prefix (match-string-no-properties 0 )))
1594
+ (if (= (length (match-string-no-properties 1 )) 0 )
1595
+ " "
1596
+ (substring
1597
+ (replace-regexp-in-string " \\ *" " " prefix)
1598
+ (if swift-mode:prepend-asterisk-to-comment-line
1599
+ (if swift-mode:insert-space-after-asterisk-in-comment 2 1 )
1600
+ 0 )
1601
+ (length prefix)))))))
1602
+
1603
+ ; ; The cursor was on the 3nd or following lines of
1604
+ ; ; the comment.
1605
+ ; ; Uses the prefix of the previous line.
1606
+
1607
+ ((and
1608
+ swift-mode:prepend-asterisk-to-comment-line
1609
+ (save-excursion
1610
+ (forward-line -1 )
1611
+ (looking-at " \\ s *\\ (\\ *+\\ s *\\ )" )))
1612
+ ; ; The previous line has a prefix. Uses it.
1613
+ (insert-before-markers-and-inherit (match-string-no-properties 1 ))
1614
+ (indent-according-to-mode ))
1615
+
1616
+ ((save-excursion
1617
+ (forward-line -1 )
1618
+ (looking-at " $" ))
1619
+ ; ; The previous line is empty. Uses the default indentation.
1620
+ (indent-according-to-mode ))
1621
+
1622
+ (t
1623
+ ; ; Uses the prefix of the previous line.
1624
+ (insert-before-markers-and-inherit
1625
+ (save-excursion
1626
+ (forward-line -1 )
1627
+ (looking-at " \\ s *" )
1628
+ (match-string-no-properties 0 )))))
1629
+
1630
+ ; ; Cleans up the previous line.
1631
+ (save-excursion
1632
+ (forward-line 0 )
1633
+ (backward-char )
1634
+ (delete-horizontal-space ))
1575
1635
1576
1636
; ; Closes incomplete multiline comment.
1577
1637
(when (and swift-mode:auto-close-multiline-comment
1578
1638
(swift-mode:chunk:multiline-comment-p chunk)
1579
1639
(swift-mode:incomplete-comment-p))
1580
1640
(save-excursion
1581
1641
(end-of-line )
1582
- (if soft (insert-and-inherit ?\n ) (newline 1 ))
1583
- (insert-before-markers-and-inherit " */" )
1642
+ (when comment-multi-line
1643
+ (if soft (insert-and-inherit ?\n ) (newline 1 )))
1644
+ (insert-and-inherit " */" )
1584
1645
(indent-according-to-mode )))))
1585
1646
1586
1647
(defun swift-mode:post-self-insert ()
0 commit comments