@@ -1090,6 +1090,12 @@ will align the values like this:
1090
1090
:safe #'booleanp
1091
1091
:type 'boolean )
1092
1092
1093
+ (defcustom clojure-align-reader-conditionals nil
1094
+ " Whether to align reader conditionals, as if they were maps."
1095
+ :package-version '(clojure-mode . " 5.10" )
1096
+ :safe #'booleanp
1097
+ :type 'boolean )
1098
+
1093
1099
(defcustom clojure-align-binding-forms
1094
1100
'(" let" " when-let" " when-some" " if-let" " if-some" " binding" " loop"
1095
1101
" doseq" " for" " with-open" " with-local-vars" " with-redefs" )
@@ -1118,32 +1124,42 @@ For instance, in a map literal point is left immediately before
1118
1124
the first key; while, in a let-binding, point is left inside the
1119
1125
binding vector and immediately before the first binding
1120
1126
construct."
1121
- ; ; Are we in a map?
1122
- (or (and (eq (char-before ) ?{ )
1123
- (not (eq (char-before (1- (point ))) ?\# )))
1124
- ; ; Are we in a cond form?
1125
- (let* ((fun (car (member (thing-at-point 'symbol ) clojure-align-cond-forms)))
1126
- (method (and fun (clojure--get-indent-method fun)))
1127
- ; ; The number of special arguments in the cond form is
1128
- ; ; the number of sexps we skip before aligning.
1129
- (skip (cond ((numberp method) method)
1130
- ((null method) 0 )
1131
- ((sequencep method) (elt method 0 )))))
1132
- (when (and fun (numberp skip))
1133
- (clojure-forward-logical-sexp skip)
1134
- (comment-forward (point-max ))
1135
- fun)) ; Return non-nil (the var name).
1136
- ; ; Are we in a let-like form?
1137
- (when (member (thing-at-point 'symbol )
1138
- clojure-align-binding-forms)
1139
- ; ; Position inside the binding vector.
1140
- (clojure-forward-logical-sexp)
1141
- (backward-sexp )
1142
- (when (eq (char-after ) ?\[ )
1143
- (forward-char 1 )
1144
- (comment-forward (point-max ))
1145
- ; ; Return non-nil.
1146
- t ))))
1127
+ (let ((point (point )))
1128
+ ; ; Are we in a map?
1129
+ (or (and (eq (char-before ) ?{ )
1130
+ (not (eq (char-before (1- point)) ?\# )))
1131
+ ; ; Are we in a reader conditional?
1132
+ (and clojure-align-reader-conditionals
1133
+ (or (and (eq (char-before (- point 2 )) ?\# )
1134
+ (eq (char-before (- point 1 )) ?? )
1135
+ (eq (char-before ) ?\( ))
1136
+ (and (eq (char-before (- point 3 )) ?\# )
1137
+ (eq (char-before (- point 2 )) ?? )
1138
+ (eq (char-before (- point 1 )) ?@ )
1139
+ (eq (char-before ) ?\( ))))
1140
+ ; ; Are we in a cond form?
1141
+ (let* ((fun (car (member (thing-at-point 'symbol ) clojure-align-cond-forms)))
1142
+ (method (and fun (clojure--get-indent-method fun)))
1143
+ ; ; The number of special arguments in the cond form is
1144
+ ; ; the number of sexps we skip before aligning.
1145
+ (skip (cond ((numberp method) method)
1146
+ ((null method) 0 )
1147
+ ((sequencep method) (elt method 0 )))))
1148
+ (when (and fun (numberp skip))
1149
+ (clojure-forward-logical-sexp skip)
1150
+ (comment-forward (point-max ))
1151
+ fun)) ; Return non-nil (the var name).
1152
+ ; ; Are we in a let-like form?
1153
+ (when (member (thing-at-point 'symbol )
1154
+ clojure-align-binding-forms)
1155
+ ; ; Position inside the binding vector.
1156
+ (clojure-forward-logical-sexp)
1157
+ (backward-sexp )
1158
+ (when (eq (char-after ) ?\[ )
1159
+ (forward-char 1 )
1160
+ (comment-forward (point-max ))
1161
+ ; ; Return non-nil.
1162
+ t )))))
1147
1163
1148
1164
(defun clojure--find-sexp-to-align (end )
1149
1165
" Non-nil if there's a sexp ahead to be aligned before END.
@@ -1152,10 +1168,13 @@ Place point as in `clojure--position-for-alignment'."
1152
1168
(let ((found))
1153
1169
(while (and (not found)
1154
1170
(search-forward-regexp
1155
- (concat " {\\ |(" (regexp-opt
1156
- (append clojure-align-binding-forms
1157
- clojure-align-cond-forms)
1158
- 'symbols ))
1171
+ (concat (when clojure-align-reader-conditionals
1172
+ " #\\ ?@(\\ |#\\ ?(\\ |" )
1173
+ " {\\ |("
1174
+ (regexp-opt
1175
+ (append clojure-align-binding-forms
1176
+ clojure-align-cond-forms)
1177
+ 'symbols ))
1159
1178
end 'noerror ))
1160
1179
1161
1180
(let ((ppss (syntax-ppss )))
0 commit comments