all messages for Emacs-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* treesit-range-settings with ':local' : I missed something or it's a bug?
@ 2024-01-11 11:15 Vincenzo Pupillo
  2024-01-25 12:21 ` Vincenzo Pupillo
  2024-01-27  4:32 ` Yuan Fu
  0 siblings, 2 replies; 9+ messages in thread
From: Vincenzo Pupillo @ 2024-01-11 11:15 UTC (permalink / raw)
  To: emacs-devel

Hi, 
in the php-ts-mode I am writing, I am trying to use the tree-sitter-phpdoc parser 
(I had tried before but without success, and I currently use a font block based 
on regular expressions). 
tree-sitter-phpdoc requires a single doc block (a single /** */ doc block and 
nothing else, no /* */ or #). I wrote these range rules:
(setq-local treesit-range-settings
		      (treesit-range-rules
		       :embed 'phpdoc
		       :host 'php
		       :local t
		       '(((comment) @cap
			 (:match "/\\*\\*" @cap)))

		       :embed 'html
		       :host 'php
		       '((program (text) @cap)
			 (text_interpolation (text) @cap))

		       :embed 'javascript
		       :host 'html
		       :offset '(1 . -1)
		       '((script_element
			  (start_tag (tag_name))
			  (raw_text) @cap))

		       :embed 'css
		       :host 'html
		       :offset '(1 . -1)
		       '((style_element
			  (start_tag (tag_name))
			  (raw_text) @cap))))

With html, js and css it works fine. With phpdoc I tried with or without :local. 
Without :local the parse intervals are all null. Without :local on the other hand they are correct.
With this simple php snippet:
<?php

/**
 * Test class
 * @author v <v.pupillo@gmail.com>
 */
class Test {
    /** @see http://example.com the lib */
    function test() {
	echo "prova";
    }
}

Without :local the field rules are:
((#<treesit-parser for phpdoc> ((1 . 1) (8 . 64) (82 . 120))) (#<treesit-
parser for html> ((1 . 1) (1 . 2))) (#<treesit-parser for css> ((1 . 1))) 
(#<treesit-parser for javascript> ((1 . 1))) (#<treesit-parser for php> nil))

With :local the result is:
((#<treesit-parser for phpdoc> nil) (#<treesit-parser for html> nil) 
(#<treesit-parser for css> nil) (#<treesit-parser for javascript> nil) 
(#<treesit-parser for php> nil))


With :local the treesit-language-at breaks, and js or css rules 
are also applied to php code :-(

I tried tracking the node location sent from the parser to the font-lock-rules I wrote for phpdoc, 
with :local the result is:

phpdoc-block node-start= 8 node-end= 64 start= 1 end= 166
phpdoc-block node-start= 82 node-end= 120 start= 1 end= 166
phpdoc-block node-start= 1 node-end= 166 start= 1 end= 166

the first two are right, the last one is not.

Any idea?
Tested with:
GNU Emacs 30.0.50 (build 3, x86_64-pc-linux-gnu, GTK+ Version 3.24.39, cairo version 1.18.0) of 2024-01-11


Thanks

p.s. the function I wrote to get the ranges is:
(defun php-ts-mode--get-parser-ranges ()
  "Return the ranges covered by the parsers.

`php-ts-mode' use 5 parsers, this function returns, for the
current buffer, the ranges covered by each parser.
Usefull for debugging."
  (let ((ranges))
    (if (not (treesit-parser-list))
	(message "At least one parser must be initialized"))
    (cl-loop
     for parser in (treesit-parser-list)
     do (push (list parser (treesit-parser-included-ranges parser)) ranges)
     finally return ranges)))






^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2024-01-31 20:24 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-01-11 11:15 treesit-range-settings with ':local' : I missed something or it's a bug? Vincenzo Pupillo
2024-01-25 12:21 ` Vincenzo Pupillo
2024-01-27  4:32 ` Yuan Fu
2024-01-27 10:23   ` Vincenzo Pupillo
2024-01-28  7:09     ` Yuan Fu
2024-01-29 14:04       ` Vincenzo Pupillo
2024-01-31  6:32         ` Yuan Fu
2024-01-31 20:05           ` Vincenzo Pupillo
2024-01-31 20:24             ` Yuan Fu

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/emacs.git
	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.