66
66
67
67
(require 'cl-lib )
68
68
(require 'imenu )
69
+ (require 'newcomment )
69
70
70
71
(declare-function lisp-fill-paragraph " lisp-mode" (&optional justify))
71
72
@@ -682,9 +683,11 @@ Implementation function for `clojure--find-indent-spec'."
682
683
(let* ((function (thing-at-point 'symbol ))
683
684
(method (or (when function ; ; Is there a spec here?
684
685
(clojure--get-indent-method function))
685
- (progn (up-list ) ; ; Otherwise look higher up.
686
- (clojure-backward-logical-sexp 1 )
687
- (clojure--find-indent-spec-backtracking)))))
686
+ ; ; `up-list' errors on unbalanced sexps.
687
+ (ignore-errors
688
+ (up-list ) ; ; Otherwise look higher up.
689
+ (clojure-backward-logical-sexp 1 )
690
+ (clojure--find-indent-spec-backtracking)))))
688
691
(when (numberp method)
689
692
(setq method (list method)))
690
693
(pcase method
@@ -1103,23 +1106,23 @@ Returns a list pair, e.g. (\"defn\" \"abc\") or (\"deftest\" \"some-test\")."
1103
1106
1104
1107
1105
1108
; ;; Sexp navigation
1106
- (defun clojure--looking-at-logical-sexp ()
1109
+ (defun clojure--looking-at-non- logical-sexp ()
1107
1110
" Return non-nil if sexp after point represents code.
1108
1111
Sexps that don't represent code are ^metadata or #reader.macros."
1109
- (forward-sexp 1 )
1110
- (forward-sexp -1 )
1111
- (not ( looking-at-p " \\ ^\\ |#[?[:alpha:]]" ) ))
1112
+ (comment-normalize-vars )
1113
+ (comment-forward ( point-max ) )
1114
+ (looking-at-p " \\ ^\\ |#[?[:alpha:]]" ))
1112
1115
1113
1116
(defun clojure-forward-logical-sexp (&optional n )
1114
1117
" Move forward N logical sexps.
1115
1118
This will skip over sexps that don't represent objects, so that ^hints and
1116
1119
#reader.macros are considered part of the following sexp."
1117
1120
(interactive " p" )
1118
- (let ((forward-sexp-function nil ) )
1119
- ( if ( < n 0 )
1120
- (clojure-backward-logical- sexp ( - n ))
1121
+ (if ( < n 0 )
1122
+ (clojure-backward-logical-sexp ( - n) )
1123
+ ( let ((forward- sexp-function nil ))
1121
1124
(while (> n 0 )
1122
- (while (not ( clojure--looking-at-logical-sexp) )
1125
+ (while (clojure--looking-at-non- logical-sexp)
1123
1126
(forward-sexp 1 ))
1124
1127
; ; The actual sexp
1125
1128
(forward-sexp 1 )
@@ -1132,17 +1135,18 @@ This will skip over sexps that don't represent objects, so that ^hints and
1132
1135
(interactive " p" )
1133
1136
(if (< n 0 )
1134
1137
(clojure-forward-logical-sexp (- n))
1135
- (while (> n 0 )
1136
- ; ; The actual sexp
1137
- (backward-sexp 1 )
1138
- ; ; Non-logical sexps.
1139
- (while (and (not (bobp ))
1140
- (ignore-errors
1141
- (save-excursion
1142
- (backward-sexp 1 )
1143
- (not (clojure--looking-at-logical-sexp)))))
1144
- (backward-sexp 1 ))
1145
- (setq n (1- n)))))
1138
+ (let ((forward-sexp-function nil ))
1139
+ (while (> n 0 )
1140
+ ; ; The actual sexp
1141
+ (backward-sexp 1 )
1142
+ ; ; Non-logical sexps.
1143
+ (while (and (not (bobp ))
1144
+ (ignore-errors
1145
+ (save-excursion
1146
+ (backward-sexp 1 )
1147
+ (clojure--looking-at-non-logical-sexp))))
1148
+ (backward-sexp 1 ))
1149
+ (setq n (1- n))))))
1146
1150
1147
1151
(defconst clojurescript-font-lock-keywords
1148
1152
(eval-when-compile
0 commit comments