@@ -108,37 +108,46 @@ In general, we recognize three states: error, warning, notice
108108(cl-defmethod elsa-message-to-lsp-severity ((_this elsa-notice))
109109 lsp/diagnostic-severity-information)
110110
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+
111118(cl-defmethod elsa-message-format ((this elsa-message))
112119 " 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))))))
121129
122130(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))))
142151
143152(defun elsa--make-message (constructor expression format args )
144153 (let (code)
0 commit comments