@@ -108,37 +108,46 @@ In general, we recognize three states: error, warning, notice
108
108
(cl-defmethod elsa-message-to-lsp-severity ((_this elsa-notice))
109
109
lsp/diagnostic-severity-information)
110
110
111
+ (defun elsa--message-resolve (expression )
112
+ (or (when-let ((of (elsa-form-find-parent expression
113
+ (lambda (x )
114
+ (oref x original-form)))))
115
+ (oref of original-form))
116
+ expression))
117
+
111
118
(cl-defmethod elsa-message-format ((this elsa-message))
112
119
" Format an `elsa-message' ."
113
- (with-ansi
114
- (bright-green " %s" (oref this line))
115
- " :"
116
- (green " %s" (or (oref this column) " ?" ))
117
- " :"
118
- (elsa-message-type-ansi this)
119
- " :"
120
- (format " %s " (replace-regexp-in-string " %" " %%" (oref this message)))))
120
+ (let ((expr (elsa--message-resolve (oref this expression))))
121
+ (with-ansi
122
+ (bright-green " %s" (oref expr line))
123
+ " :"
124
+ (green " %s" (or (oref expr column) " ?" ))
125
+ " :"
126
+ (elsa-message-type-ansi this)
127
+ " :"
128
+ (format " %s " (replace-regexp-in-string " %" " %%" (oref this message))))))
121
129
122
130
(cl-defmethod elsa-message-to-lsp ((this elsa-message))
123
- (lsp-make-diagnostic
124
- :code (oref this code)
125
- :range (lsp-make-range
126
- :start (lsp-make-position
127
- :line (1- (oref this line))
128
- :character (oref this column))
129
- :end (lsp-make-position
130
- :line (1- (oref this line))
131
- :character (let ((expr (oref this expression)))
132
- (if (and (elsa-form-sequence-p expr)
133
- (elsa-car expr))
134
- (oref (elsa-car expr) end-column)
135
- (+ (oref this column)
136
- (if (or (elsa-form-symbol-p expr)
137
- (elsa-get-name expr))
138
- (length (symbol-name (elsa-get-name expr)))
139
- 1 ))))))
140
- :severity (elsa-message-to-lsp-severity this)
141
- :message (oref this message)))
131
+ (let ((expression (elsa--message-resolve (oref this expression))))
132
+ (lsp-make-diagnostic
133
+ :code (oref this code)
134
+ :range (lsp-make-range
135
+ :start (lsp-make-position
136
+ :line (1- (oref expression line))
137
+ :character (oref expression column))
138
+ :end (lsp-make-position
139
+ :line (1- (oref expression line))
140
+ :character (let ((expr expression))
141
+ (if (and (elsa-form-sequence-p expr)
142
+ (elsa-car expr))
143
+ (oref (elsa-car expr) end-column)
144
+ (+ (oref expression column)
145
+ (if (or (elsa-form-symbol-p expr)
146
+ (elsa-get-name expr))
147
+ (length (symbol-name (elsa-get-name expr)))
148
+ 1 ))))))
149
+ :severity (elsa-message-to-lsp-severity this)
150
+ :message (oref this message))))
142
151
143
152
(defun elsa--make-message (constructor expression format args )
144
153
(let (code)
0 commit comments