Skip to content

Commit a2ab8ff

Browse files
committed
Tweak indentation of multiline comments
1 parent ee6e9ce commit a2ab8ff

File tree

1 file changed

+37
-37
lines changed

1 file changed

+37
-37
lines changed

swift-mode-indent.el

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -174,54 +174,54 @@ declaration and its offset is `swift-mode:basic-offset'."
174174
(defun swift-mode:calculate-indent-of-multiline-comment ()
175175
"Return the indentation of the current line inside a multiline comment."
176176
(back-to-indentation)
177-
(let ((comment-beginning-position (nth 8 (syntax-ppss)))
177+
(let ((pos (point))
178+
(comment-beginning-position (nth 8 (syntax-ppss)))
178179
(starts-with-asterisk (eq (char-after) ?*)))
179-
(forward-line -1)
180-
(back-to-indentation)
181180
(cond
182-
((<= (point) comment-beginning-position)
183-
;; The cursor was on the 2nd line of the comment.
181+
;; Before the closing delimiter.
182+
((and (looking-at "\\*+/")
183+
(= pos
184+
(save-excursion
185+
(goto-char comment-beginning-position)
186+
(if (forward-comment 1)
187+
(progn
188+
(backward-char)
189+
(skip-chars-backward "*")
190+
(point))
191+
-1))))
192+
;; Aligns with the first asterisk of the opening delimiter.
184193
(goto-char comment-beginning-position)
185194
(forward-char)
186-
;; If there are extra characters or spaces after asterisks, aligns with
187-
;; the first non-space character or end of line. Otherwise, aligns with
188-
;; the first asterisk.
189-
(when (and
190-
(looking-at "\\**[^*\n]+")
191-
(not (and swift-mode:prepend-asterisk-to-comment-line
192-
starts-with-asterisk)))
193-
(skip-chars-forward "*")
194-
(skip-syntax-forward " "))
195195
(swift-mode:indentation (point) 0))
196196

197-
;; The cursor was on the 3rd or following lines of the comment.
198-
199-
((= (save-excursion
200-
(forward-line)
201-
(back-to-indentation)
202-
(point))
203-
(save-excursion
204-
(goto-char comment-beginning-position)
205-
(if (forward-comment 1)
206-
(progn
207-
(backward-char)
208-
(skip-chars-backward "*")
209-
(point))
210-
-1)))
211-
;; Before the closing delimiter. Aligns with the first asterisk of the
212-
;; opening delimiter.
197+
;; The cursor was on the 2nd line of the comment (excluding empty lines).
198+
((progn
199+
(forward-line -1)
200+
(while (and (bolp) (eolp) (< comment-beginning-position (point)))
201+
(forward-line -1))
202+
(back-to-indentation)
203+
(<= (point) comment-beginning-position))
213204
(goto-char comment-beginning-position)
214205
(forward-char)
206+
;; If the line starts with a decoration asterisk, align with the first
207+
;; asterisk of the opening delimiter.
208+
;;
209+
;; Otherwise, if there are extra characters or spaces after asterisks,
210+
;; aligns with the first non-space character or end of line.
211+
;;
212+
;; Otherwise, aligns with the first asterisk of the opening delimiter.
213+
(when (and
214+
(not (and swift-mode:prepend-asterisk-to-comment-line
215+
starts-with-asterisk))
216+
(looking-at "\\**[^*\n]+"))
217+
(skip-chars-forward "*")
218+
(skip-syntax-forward " "))
215219
(swift-mode:indentation (point) 0))
216220

217-
;; Otherwise, aligns with a non-empty preceding line.
218-
219-
((and (bolp) (eolp))
220-
;; The previous line is empty, so seeks a non-empty-line.
221-
(swift-mode:calculate-indent-of-multiline-comment))
222-
221+
;; The cursor was on the 3rd or following line of the comment, and found a
222+
;; non-empty preceding line.
223223
(t
224-
;; The previous line is not empty, so aligns to this line.
224+
;; Aligns to this line.
225225
(swift-mode:indentation (point) 0)))))
226226

227227
(defun swift-mode:calculate-indent-of-multiline-string ()

0 commit comments

Comments
 (0)