@@ -233,6 +233,33 @@ Only intended for use at development time.")
233
233
(rx line-start (or " defprotocol" " definterface" ) line-end))
234
234
" A regular expression matching a symbol used to define an interface." )
235
235
236
+ (defun clojure-ts--docstring-query (capture-symbol )
237
+ " Return a query that captures docstrings with CAPTURE-SYMBOL."
238
+ `(; ; Captures docstrings in def, defonce
239
+ ((list_lit :anchor (sym_lit) @def_symbol
240
+ :anchor (sym_lit) ; variable name
241
+ :anchor (str_lit) , capture-symbol
242
+ :anchor (_)) ; the variable's value
243
+ (:match , clojure-ts--variable-definition-symbol-regexp @def_symbol))
244
+ ; ; Captures docstrings defn, defmacro, ns, and things like that
245
+ ((list_lit :anchor (sym_lit) @def_symbol
246
+ :anchor (sym_lit) ; function_name
247
+ :anchor (str_lit) , capture-symbol )
248
+ (:match , clojure-ts--definition-symbol-regexp @def_symbol))
249
+ ; ; Captures docstrings in defprotcol, definterface
250
+ ((list_lit :anchor (sym_lit) @def_symbol
251
+ (list_lit
252
+ :anchor (sym_lit) (vec_lit) :*
253
+ (str_lit) , capture-symbol :anchor )
254
+ :* )
255
+ (:match , clojure-ts--interface-def-symbol-regexp @def_symbol))))
256
+
257
+ (defvar clojure-ts--treesit-range-settings
258
+ (treesit-range-rules
259
+ :embed 'markdown_inline
260
+ :host 'clojure
261
+ (clojure-ts--docstring-query '@capture )))
262
+
236
263
(defun clojure-ts--font-lock-settings ()
237
264
" Return font lock settings suitable for use in `treesit-font-lock-settings' ."
238
265
(treesit-font-lock-rules
@@ -333,29 +360,17 @@ Only intended for use at development time.")
333
360
'((tagged_or_ctor_lit marker: " #" @font-lock-preprocessor-face
334
361
tag: (sym_lit) @font-lock-preprocessor-face))
335
362
336
- ; ; Figure out how to highlight symbols in docstrings.
337
- ; ; Might require a markdown grammar
338
363
:feature 'doc
339
364
:language 'clojure
340
365
:override t
341
- `(; ; Captures docstrings in def, defonce
342
- ((list_lit :anchor (sym_lit) @def_symbol
343
- :anchor (sym_lit) ; variable name
344
- :anchor (str_lit) @font-lock-doc-face
345
- :anchor (_)) ; the variable's value
346
- (:match , clojure-ts--variable-definition-symbol-regexp @def_symbol))
347
- ; ; Captures docstrings defn, defmacro, ns, and things like that
348
- ((list_lit :anchor (sym_lit) @def_symbol
349
- :anchor (sym_lit) ; function_name
350
- :anchor (str_lit) @font-lock-doc-face)
351
- (:match , clojure-ts--definition-symbol-regexp @def_symbol))
352
- ; ; Captures docstrings in defprotcol, definterface
353
- ((list_lit :anchor (sym_lit) @def_symbol
354
- (list_lit
355
- :anchor (sym_lit) (vec_lit) :*
356
- (str_lit) @font-lock-doc-face :anchor )
357
- :* )
358
- (:match , clojure-ts--interface-def-symbol-regexp @def_symbol)))
366
+ (clojure-ts--docstring-query '@font-lock-doc-face )
367
+
368
+ :feature 'markdown-doc
369
+ :language 'markdown_inline
370
+ :override t
371
+ `((inline (code_span
372
+ (code_span_delimiter) :* @font-lock-delimiter-face)
373
+ @font-lock-constant-face))
359
374
360
375
:feature 'quote
361
376
:language 'clojure
@@ -786,6 +801,9 @@ forms like deftype, defrecord, reify, proxy, etc."
786
801
(unless (treesit-language-available-p 'clojure nil )
787
802
(treesit-install-language-grammar 'clojure ))
788
803
(setq-local comment-start " ;" )
804
+ (when (treesit-ready-p 'markdown_inline 'message )
805
+ (treesit-parser-create 'markdown_inline )
806
+ (setq-local treesit-range-settings clojure-ts--treesit-range-settings))
789
807
(when (treesit-ready-p 'clojure )
790
808
(treesit-parser-create 'clojure )
791
809
(setq-local treesit-font-lock-settings (clojure-ts--font-lock-settings)
@@ -798,7 +816,7 @@ forms like deftype, defrecord, reify, proxy, etc."
798
816
treesit-font-lock-feature-list
799
817
'((comment definition variable)
800
818
(keyword string char symbol builtin type)
801
- (constant number quote metadata doc)
819
+ (constant number quote metadata doc markdown-doc )
802
820
(bracket deref function regex tagged-literals)))
803
821
(when (boundp 'treesit-thing-settings ) ; ; Emacs 30+
804
822
(setq-local treesit-thing-settings clojure-ts--thing-settings))
0 commit comments