@@ -311,6 +311,28 @@ Use `treesit-font-lock-level' or `treesit-font-lock-feature-list'
311
311
t
312
312
nil )))
313
313
314
+ (defvar erlang-ts--syntax-propertize-query
315
+ (when (treesit-available-p)
316
+ (treesit-query-compile
317
+ 'erlang
318
+ '(((atom ) @node-atom)
319
+ ((string ) @node-string)))))
320
+
321
+ (defun erlang-ts--process-node (node )
322
+ " Apply syntax-descriptor as `w' for atom or normal string NODE."
323
+ (let* ((string-start (1+ (treesit-node-start node)))
324
+ (string-end (1- (treesit-node-end node))))
325
+ (put-text-property string-start string-end 'syntax-table (string-to-syntax " w" ))))
326
+
327
+ (defun erlang-ts--syntax-propertize (start end )
328
+ " Apply syntax properties for Erlang specific patterns from START to END."
329
+ (let ((captures
330
+ (treesit-query-capture 'erlang erlang-ts--syntax-propertize-query start end)))
331
+ (pcase-dolist (`(, name . , node ) captures)
332
+ (pcase name
333
+ ('node-atom (erlang-ts--process-node node))
334
+ ('node-string (erlang-ts--process-node node))))))
335
+
314
336
(defun erlang-ts-setup ()
315
337
" Setup treesit for erlang."
316
338
@@ -367,7 +389,8 @@ Use `treesit-font-lock-level' or `treesit-font-lock-feature-list'
367
389
(advice-add #'erlang-font-lock-level-3 :around #'erlang-ts--font-lock-level-3 )
368
390
(advice-add #'erlang-font-lock-level-4 :around #'erlang-ts--font-lock-level-4 )
369
391
370
- (treesit-major-mode-setup))
392
+ (treesit-major-mode-setup)
393
+ (setq-local syntax-propertize-function #'erlang-ts--syntax-propertize ))
371
394
372
395
373
396
(defun erlang-ts-unload-function ()
0 commit comments