aboutsummaryrefslogtreecommitdiffstats
path: root/lisp/treesit.el (follow)
Commit message (Collapse)AuthorAgeFilesLines
* Make tree-sitter thing navigation handle nested parsersYuan Fu10 days1-130/+203
| | | | | | | | | | | | | | | | | | | | | | | Not a bug report, but this is from the emacs-devel thread "Tree-sitter: Transcendental things". Improve tree-sitter thing navigation functions to handle the case where there are multiple nested parsers in the buffer. Previously these functions just grab the node at point and are limited to the parser of that node. Now these functions will thoUrouly search through all parsers that covers point before giving up. * doc/lispref/parsing.texi: Mention the change. * lisp/treesit.el (treesit--some): New macro. (treesit--thing-sibling): Use the new macro, add a new PARSER parameter. (treesit-thing-prev): (treesit-thing-next): Add PARSER parameter. (treesit-thing-at): (treesit-navigate-thing): Use the new macro, add a new PARSER parameter. Also pass the PARSER arg to recursive calls and calls to treesit-thing-prev, etc.
* Fix treesit-show-paren-data to match only 2 children nodes or moreJuri Linkov2026-02-231-0/+2
| | | | | | * lisp/treesit.el (treesit-show-paren-data--categorize): Ignore parent that has less than two children (bug#80475). This ensures the distinct first and last node.
* ; * lisp/treesit.el (treesit-hs-find-next-block): Add guard (bug#80422).Juri Linkov2026-02-171-1/+1
|
* * lisp/treesit.el (treesit-hs-find-next-block): Fix infloop. (bug#80232)Elias Gabriel Perez2026-02-161-0/+2
|
* hideshow: Reword documentation (bug#80116)Elías Gabriel Pérez2026-01-101-3/+1
| | | | | | | | | | | | | | | | | | | | | | | | * etc/NEWS: Reword entry. * lisp/progmodes/hideshow.el: Reword Commentary Header. (hs-block-start-mdata-select, hs-block-end-regexp) (hs-c-start-regexp, hs-forward-sexp-function) (hs-adjust-block-beginning-function) (hs-adjust-block-end-function, hs-find-block-beginning-function) (hs-find-next-block-function) (hs-looking-at-block-start-predicate) (hs-inside-comment-predicate): Reword docstrings. (hs-block-positions): Reword docstring, and move 'hs-adjust-block-beginning-function' so that it is not affected by 'pos-eol'. (hs-find-block-beg-fn--default): Use 0 instead of 'hs-block-start-mdata-select'. * lisp/treesit.el (treesit-hs-find-block-beginning): Update code.
* ; Add new functions to treesit-declare-unavailable-functionsYuan Fu2026-01-051-5/+6
| | | | | * lisp/treesit.el (treesit-declare-unavailable-functions): Add missing functions.
* ; * lisp/treesit.el (treesit-font-lock-recompute-features): Fix doc.Yuan Fu2026-01-051-6/+7
|
* ; * lisp/treesit.el (treesit-font-lock-level): Doc fix. (Bug#80136)Eli Zaretskii2026-01-051-1/+4
|
* Compile queries in treesit-f-l-recompute-features (bug#80108)Yuan Fu2026-01-011-17/+38
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The direct cause of the problem in the bug report is that when user runs treesit-font-lock-recompute-features to add the emacs-devel feature in c-ts-mode's mode hook, the added query for emacs-devel aren't compiled. This change consists of two parts: 1. The immediate fix: validate and compile queries in treesit-font-lock-recompute-features. 2. To make it more fool-proof, change treesit-font-lock-rules back to compile the queries and make treesit--compile-query-with-cache support compiled queries. This way, as long as the query goes through treesit-font-lock-rules, it'll be compiled eventually and not cause slow-down. I had to add some c-level functions, but they're kind of overdue anyway, so I don't have any problem adding them to the API. * lisp/treesit.el (treesit--compile-query-with-cache): Support compiled queries. (treesit-font-lock-rules): Compile the queries (but not eagerly). (treesit-font-lock-recompute-features): Validate and compile queries. (treesit-major-mode-setup): Remove call to treesit-validate-and-compile-font-lock-rules since it's now called in treesit-font-lock-recompute-features. * src/treesit.c (Ftreesit_query_eagerly_compiled_p): (Ftreesit_query_source): New functions. * doc/lispref/parsing.texi (Pattern Matching): Add manual entries for the new functions.
* ; Add 2026 to copyright years.Sean Whitton2026-01-011-1/+1
|
* December 2025 spelling fixesPaul Eggert2025-12-261-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Some of the fixes are to continue to use American rather than British spelling. * doc/misc/modus-themes.org (my-modus-themes-engraved-faces): Fix misspelled ‘:foreground’s. * etc/themes/modus-themes.el (modus-themes-faces): Fix misspelled ‘modus-themes-bold’. * lisp/emacs-lisp/rx.el (rx--normalize-char-pattern): Rename from rx--normalise-char-pattern. (rx--optimize-or-args): Rename from rx--optimise-or-args. * lisp/frame.el (frame--special-parameters): Fix misspelled "right-divider-width". * lisp/net/tramp.el (tramp-fingerprint-prompt-regexp): Use American spelling “centered”, to match current libfprintf. * lisp/org/org-fold-core.el (org-fold-core--optimize-for-huge-buffers): Rename from org-fold-core--optimise-for-huge-buffers. (org-fold-core-update-optimization): Rename from org-fold-core-update-optimisation, leaving an alias behind. (org-fold-core-remove-optimization): Rename from org-fold-core-remove-optimisation, leaving an alias behind. * lisp/org/org.el (org-advertized-archive-subtree): This alias is now obsolete. * lisp/play/zone.el (zone-ignored-buffers): Fix misspelling of ‘zone--buffer-encrypted-p’. * lisp/progmodes/csharp-mode.el (csharp-ts-mode-faces): Fix misspelling of ‘csharp’ group. * lisp/vc/vc.el (vc-clonable-backends-custom-type): Rename from vc-cloneable-backends-custom-type, leaving an alias behind. * test/lisp/emacs-lisp/bytecomp-tests.el: (bytecomp-tests--warn-arity-non-compiled-callee): Rename from bytecomp-tests--warn-arity-noncompiled-callee. (bytecomp-test-defface-spec): Reword a deliberate misspelling of “default” that is so common I don’t want it to pollute the spelling dictionary. * test/lisp/emacs-lisp/package-vc-tests.el: (package-vc-tests-preserve-artifacts): Rename from package-vc-tests-preserve-artifacts. * test/lisp/eshell/em-prompt-tests.el: (em-prompt-test/forward-backward-paragraph-1): Reword a deliberate misspelling of “goodbye” that is so common I don’t want it to pollute the spelling dictionary.
* Fix 'treesit-hs-block-end' and 'treesit-hs-inside-comment-p' (Bug#79934)Elías Gabriel Pérez2025-12-081-10/+24
| | | | | | | * lisp/treesit.el (treesit-hs-block-end): Properly get the block end. (treesit-hs-inside-comment-p): Add support for single-line comments.
* Use treesit-extra-load-path for more values of treesit-auto-install-grammarJuri Linkov2025-11-301-17/+23
| | | | | | | | * lisp/treesit.el (treesit-auto-install-grammar): Use the first writable directory from 'treesit-extra-load-path' for values 'always', 'ask', 'ask-dir' (bug#79862). * src/treesit.c (syms_of_treesit): Extend docstring.
* ; Fix byte-compiler warning in treesit.elEli Zaretskii2025-11-291-1/+2
| | | | | * lisp/treesit.el (treesit-declare-unavailable-functions): Declare 'treesit-extra-load-path'.
* * lisp/cus-start.el: Make 'treesit-extra-load-path' customizable.Juri Linkov2025-11-281-10/+30
| | | | | | | | | | | * lisp/treesit.el (treesit-auto-install-grammar): Add the value 'ask-dir'. (treesit-ensure-installed): When 'treesit-auto-install-grammar' is 'ask' or 'ask-dir', ask for the directory to install the grammar library using the first writable directory of 'treesit-extra-load-path' as default. Also add the provided directory to 'treesit-extra-load-path' afterwards. * src/treesit.c (treesit-extra-load-path): In the docstring mention the fact that the first directory is special (bug#79862).
* hideshow: Rework previous changesElías Gabriel Pérez2025-11-081-9/+9
| | | | | | | | | | | | | | | | | | | | | | | | * lisp/progmodes/hideshow.el: Set default values of buffer-local variables. (hs-inside-comment-p): Restore. (hs--set-variable): Rename from 'hs--get-mode-value'. (hs-grok-mode-type): Rework. * lisp/nxml/nxml-mode.el: * lisp/progmodes/f90.el: * lisp/progmodes/fortran.el: * lisp/progmodes/icon.el: * lisp/progmodes/lua-mode.el: * lisp/progmodes/python.el: * lisp/progmodes/verilog-mode.el: * lisp/progmodes/vhdl-mode.el: * lisp/textmodes/mhtml-mode.el: * lisp/textmodes/sgml-mode.el: * lisp/treesit.el (treesit-major-mode-setup): Rename 'hs-forward-sexp-func' to 'hs-forward-sexp-function', 'hs-adjust-block-beginning' to 'hs-adjust-block-beginning-function', 'hs-find-block-beginning-func' to 'hs-find-block-beginning-function', 'hs-find-next-block-func' to 'hs-find-next-block-function', 'hs-looking-at-block-start-p-func' to 'hs-looking-at-block-start-predicate', 'hs-inside-comment-p-func' to 'hs-inside-comment-predicate'.
* hideshow: Rework previous changesElías Gabriel Pérez2025-11-061-2/+0
| | | | | | | | | | | | | | | | | | | | | | | | | * doc/emacs/programs.texi (Hideshow): * etc/NEWS: Fix doc. * lisp/progmodes/hideshow.el: Update Commentary Header. (hs-modes-alist): Remove. (hs--get-mode-value, hs-grok-mode-type): Rework. * lisp/treesit.el (treesit-major-mode-setup): * lisp/emacs-lisp/lisp-mode.el: * lisp/nxml/nxml-mode.el: * lisp/progmodes/cc-mode.el: * lisp/progmodes/f90.el: * lisp/progmodes/fortran.el: * lisp/progmodes/hideshow.el: * lisp/progmodes/icon.el: * lisp/progmodes/js.el: * lisp/progmodes/lua-mode.el: * lisp/progmodes/python.el: * lisp/progmodes/verilog-mode.el: * lisp/progmodes/vhdl-mode.el: * lisp/textmodes/bibtex.el: * lisp/textmodes/mhtml-mode.el: * lisp/textmodes/sgml-mode.el: * lisp/treesit.el: Fix and rework previous changes.
* hideshow: Rewrite 'hs-special-modes-alist'Elías Gabriel Pérez2025-11-041-7/+8
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Rewrite the format in 'hs-special-modes-alist' to make easier to exclude some values, add support for settings inheritance according to current major mode and parents, and support string hiding for lisp modes. Bug#79671 * lisp/progmodes/hideshow.el (hs-modes-alist): New variable. (hs-special-modes-alist): Mark as obsolete. (hs-forward-sexp-func, hs-adjust-block-beginning) (hs-find-block-beginning-func, hs-find-next-block-func) (hs-looking-at-block-start-p-func): Set default values to nil. (hs-inside-comment-p): Remove function. (hs-adjust-block-end, hs-treesit-things): New buffer-local variables. (hs-block-positions): Minor updates. (hs--get-mode-value): New function. (hs-grok-mode-type): Rewrite. * lisp/progmodes/f90.el (hs-special-modes-alist): * lisp/progmodes/fortran.el (hs-special-modes-alist): * lisp/progmodes/icon.el (icon-mode): * lisp/progmodes/lua-mode.el (lua-mode): * lisp/progmodes/python.el (python-base-mode): * lisp/progmodes/verilog-mode.el (verilog-mode): * lisp/progmodes/vhdl-mode.el (vhdl-hs-minor-mode): Rewrite settings. * lisp/progmodes/python.el (python-ts-hs-adjust-block-end-fn): New function. * lisp/treesit.el (treesit-hs-block-end) (treesit-hs-find-block-beginning, treesit-hs-find-next-block) (treesit-hs-looking-at-block-start-p): Minor updates. * doc/emacs/programs.texi (Hideshow): * etc/NEWS: Document changes.
* Revert "Use cached compiled tree-sitter queries for range settings"Yuan Fu2025-10-301-1/+16
| | | | | | This reverts commit e28ec7627148e523e215ee672b3dda40f1a6ad44. * lisp/treesit.el (treesit-range-rules): Use treesit-query-compile.
* ; Fix typos and wording of recently-modified doc stringsEli Zaretskii2025-10-301-8/+8
| | | | | * lisp/treesit.el (treesit-query-range-by-language) (treesit-range-rules): Doc fixes.
* Tree-sitter range language function can return nil (bug#79670)Yuan Fu2025-10-291-16/+20
| | | | | | * lisp/treesit.el (treesit-query-range-by-language): Allow LANGUAGE-FN to return nil. (treesit-range-rules): Update docstring.
* Use cached compiled tree-sitter queries for range settingsYuan Fu2025-10-291-3/+3
| | | | | * lisp/treesit.el (treesit-range-rules): Use treesit--compile-query-with-cache.
* ; Fix previous tree-sitter commitYuan Fu2025-10-211-1/+1
| | | | | * lisp/treesit.el (treesit-font-lock-rules): Use lang instead of current-language, lang = (or cunrrent-language default-language).
* Cache compiled tree-sitter queries (bug#79363)Yuan Fu2025-10-201-36/+102
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This way major modes can compute font-lock settings and indentation rules dynamically when the major mode is enabled. We don't want to compute it at package load time because the grammar might not be installed at that point. (Grammar might be (semi)auto-installed when the major mode is enabled.) This commit adds treesit--query-cache and changes treesit-font-lock-rules to not compile the query. Instead, the queries are compiled in treesit-validate-and-compile-font-lock-rules. Go-ts-mode is modified to use this new framework. * lisp/progmodes/go-ts-mode.el (go-ts-mode--iota-query-supported-p): (go-ts-mode--method-elem-supported-p): (go-ts-mode--font-lock-settings-cached): Removed. (go-ts-mode--font-lock-settings): Simply return the result of treesit-font-lock-rules rather than saving to go-ts-mode--font-lock-settings-cached. Use treesit-query-with-optional for computed queries. * lisp/treesit.el (treesit--query-cache): New variable. (treesit-font-lock-settings): Add new field language. (treesit-font-lock-setting-language): New function. (treesit-query-with-optional): New function. (treesit-font-lock-recompute-features): Don't compile query and store language (because we can't derive from compiled query anymore). (treesit-replace-font-lock-feature-settings): Use the new language field. (treesit-validate-and-compile-font-lock-rules): Renamed from treesit-validate-font-lock-rules, add logic to compile queries. (treesit-major-mode-setup): Use treesit-validate-and-compile-font-lock-rules.
* * lisp/treesit.el: Small fixes in navigation functions.Juri Linkov2025-10-161-1/+5
| | | | | (treesit-up-list): Better handle multi-language buffers. (treesit-hs-find-next-block): Fix off-by-one error.
* ; Improve documentation of 'treesit-enabled-modes'Eli Zaretskii2025-09-011-5/+11
| | | | | | | * lisp/treesit.el (treesit-enabled-modes): Doc fix. * doc/emacs/modes.texi (Choosing Modes): Extend and improve wording of a recently-added text.
* * lisp/treesit.el (treesit-enabled-modes): Use 'add-to-list'.Juri Linkov2025-08-241-3/+3
| | | | | Using 'add-to-list' instead of 'cons' in :set avoids adding duplicate entries to 'major-mode-remap-alist'.
* New user option 'treesit-enabled-modes' (bug#79180)Juri Linkov2025-08-141-1/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/treesit.el (treesit-enabled-modes): New user option. * src/treesit.c (treesit-major-mode-remap-alist): New variable. * lisp/progmodes/c-ts-mode.el: * lisp/progmodes/csharp-mode.el: * lisp/progmodes/java-ts-mode.el: * lisp/progmodes/js.el: * lisp/progmodes/json-ts-mode.el: * lisp/progmodes/ruby-ts-mode.el: * lisp/progmodes/sh-script.el: * lisp/textmodes/css-mode.el: * lisp/textmodes/mhtml-ts-mode.el: * lisp/textmodes/toml-ts-mode.el: Add ts-mode mapping to 'treesit-major-mode-remap-alist' for ts-modes that already have the corresponding non-ts mode association in 'auto-mode-alist'. * lisp/progmodes/cmake-ts-mode.el (cmake-ts-mode-maybe): * lisp/progmodes/dockerfile-ts-mode.el (dockerfile-ts-mode-maybe): * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode-maybe): * lisp/progmodes/go-ts-mode.el (go-ts-mode-maybe) (go-mod-ts-mode-maybe, go-work-ts-mode-maybe): * lisp/progmodes/heex-ts-mode.el (heex-ts-mode-maybe): * lisp/progmodes/lua-ts-mode.el (lua-ts-mode-maybe): * lisp/progmodes/php-ts-mode.el (php-ts-mode-maybe): * lisp/progmodes/rust-ts-mode.el (rust-ts-mode-maybe): * lisp/progmodes/typescript-ts-mode.el (typescript-ts-mode-maybe) (tsx-ts-mode-maybe): * lisp/textmodes/markdown-ts-mode.el (markdown-ts-mode-maybe): * lisp/textmodes/yaml-ts-mode.el (yaml-ts-mode-maybe): Add a wrapper function to 'auto-mode-alist' for ts-modes that have no corresponding non-ts mode. Also add a mapping to 'treesit-major-mode-remap-alist' for the case when a non-ts mode is installed from an external source to be able to customize it with 'treesit-enabled-modes'.
* 'php-ts-mode' depends on 'mhtml-ts-mode' instead of JS,CSS and HTMLVincenzo Pupillo2025-08-101-10/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The direct dependence on 'js-ts-mode', 'css-ts-mode' and html-ts-mode has now been replaced by 'mhtml-ts-mode'. Additional benefits are: 1. Imenu now exposes symbols for all of all languages, 2. navigation now works correctly for all languages, 3. outline works for all languages. Additional new features are: 1. indentation of PHP in mixed buffers with HTML now works much better and allows three different behaviors, an option allows you to choose the behavior. 2. a new feature shows where PHP ini files are both locally and remotely, if the buffer is associated with a remote PHP file. * etc/NEWS: Mention the rationale for those changes, the new command, and the new options. * admin/tree-sitter/treesit-admin.el (treesit-admin--builtin-modes): Added 'mhtml-ts-mode'. (treesit-admin--builtin-features): Added 'mhtml-ts-mode'. * lisp/textmodes/mhtml-ts-mode.el (mhtml-ts-mode--range-settings): New variable that store range settings. (mhtml-ts-mode--treesit-aggregated-outline-predicate): New variable that stores outline predicates. (mhtml-ts-mode): Use those two new variables. * lisp/progmodes/php-ts-mode.el: Update doc string. Removed old dependecies. (php-ts-mode--language-source-alist): Updated parsers version. (php-ts-mode-install-parsers): Removed old dependencies, now relies on mhtml-ts-mode-install-parsers'. Update doc string. (php-ts-mode-js-css-indent-offset): Update doc string. (php-ts-mode-css-fontify-colors): Removed option, now relies on 'php-ts-mode-css-fontify-colors'. (php-ts-mode-html-indent-offset): New user option. (php-ts-mode-html-relative-indent): New user option. (php-ts-mode-php-default-executable): Assume "php" instead of "/usr/bin/php" if 'executable-find' fails. (php-ts-mode-php-config): Fix tag. (php-ts-mode-find-sibling-rules): New user option with the rules for finding siblings of a file. (php-ts-mode-phpdoc-highlight-errors): New user option, if non-nil highlight unkown PHPDOC nodes. (php-ts-mode--indent-style-setter): Indentation fix. (php-ts-mode-indent-style): Indentation fix. (php-ts-mode-flymake-php): Indentation fix. (php-ts-mode--executable): Indentation fix. (php-ts-mode-show-ini): New command that show the locations of PHP ini files. (php-ts-mode--get-indent-style): Indentation fix. (php-ts-mode--set-indent-property): Indentation fix. (php-ts-mode-set-style): Indentation fix. (php-ts-mode--get-parser-ranges): Indentation fix. (php-ts-mode--possibly-braceless-keyword-re): Removed no longer used constant. (php-ts-mode--open-statement-group-heuristic): Removed no longer used function. (php-ts-mode--else-heuristic): Indentation fix. (php-ts-mode--first-sibling): Indentation fix. (php-ts-mode--js-css-tag-bol): Function removed, now using 'mhtml-ts-mode--js-css-tag-bol'. (php-ts-mode--parent-html-bol): Removed no longer used function. (php-ts-mode--parent-html-heuristic): Now more reliably handles the mixed indentation of PHP and HTML. The new option 'php-ts-mode-html-relative-indent' changes the behavior of the function. When 'php-ts-mode-html-relative-indent' is 't' the new option 'php-ts-mode-html-indent-offset' controls the offset of PHP code relative to HTML tags. (php-ts-mode--array-element-heuristic): Indentation fix. (php-ts-mode--anchor-prev-sibling): Indentation fix.. (php-ts-mode--indent-styles): The indentation rules for 'program' and text_interpolation' are now common to all indentation styles, thanks to the new version of 'php-ts-mode-arent-html-heuristic'. New rules for 'namespace_use_clause', 'use_declaration', 'use_list', 'attribute_group' and 'string_content'. (php-ts-mode--prettify-symbols-alist): New variable to support 'prettify-symbols-alist'. (php-ts-mode--test-visibility-modifier-operation-clause-p): Rename ... (php-ts-mode--test-visibility-modifier-operation-p): ... to this more correct name. (php-ts-mode--test-property-hook-clause-p): Rename ... (php-ts-mode--test-property-hook-p): ... to this more correct name. (php-ts-mode--test-relative-name-p): New function to test if 'relative_name' is supported by the PHP parser. (php-ts-mode--font-lock-settings): Use the new function for highlight 'relative_name'. Highlight 'error_suppression_expression'. Refactoring using the renamed functions. Indentation fix. (php-ts-mode--custom-html-font-lock-settings): Replace the rules with 'mhtml-ts-mode--treesit-font-lock-settings'. Fix docs string. (php-ts-mode--phpdoc-font-lock-settings): Added support for "array" and "list" array_type. New "phpdoc-error" feature to highlight unknown nodes via new 'php-ts-mode--phpdoc-fontify-error' function. (php-ts-mode--colorize-css-value): Removed function no longer used, now highlighting is handled directly by 'mhtml-ts-mode'. (php-ts-mode--phpdoc-fontify-error): New function used by 'php-ts-mode--phpdoc-font-lock-settings'. (php-ts-mode--parent-object): Indentation fix. (php-ts-mode--defun-name-separator): Indentation fix. (php-ts-mode--defun-object-name): Indentation fix. (php-ts-mode--defun-name): The function now also returns the defun name of 'mhtml-ts-mode'. (php-ts-mode--treesit-defun-type-regexp): New regexp for 'treesit-defun-type-regexp' support. (php-ts-mode--indent-defun): Indentation fix. (php-ts-mode--defun-valid-p): Fix indentation (php-ts-mode--comment-indent-new-line): Indentation fix. (php-ts-mode--comment-current-plist): New local variable that stores the state of the PHP comment style. (php-ts-mode--comment-setup): The function now handles changing, for different languages, comment styles, using "php-ts-mode--comment-current-plist" to store and retrieve the comment style for the PHP language. (php-ts-mode-comment-setup): Now store the PHP comment style in 'php-ts-mode--comment-current-plist'. (php-ts-mode-menu): Indentation fix. (php-ts-mode): Replace dependency from JS, CSS and HTML width 'mhtml-ts-mode'. Navigation, Imenu and Outline now support PHP, HTML, Javascript and CSS. Added support for 'prettify-symbol-mode'. Added support for 'electric-layout-rules'. (php-ts-mode-run-php-webserver, php-ts-mode--webserver-read-args) (php-ts-mode--webserver-read-args, inferior-php-ts-mode, run-php) (inferior-php-ts-mode-startup, php-ts-mode-inferior--write-history) (php-ts-mode-send-region): Indentation fixes. * lisp/treesit.el (treesit-range-rules): Check if treesit is available before compiling a query. (treesit-ensure-installed): Check if treesit is available before trying to ensure if a grammar library is installed. (Bug#78994)
* ; * lisp/treesit.el (treesit-parser-changed-regions): Declare.Sean Whitton2025-07-091-0/+2
|
* Ditch the async range update in tree-sitter (bug#78402)Yuan Fu2025-07-081-20/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Right now in treesit-outline-search -> treesit-navigate-thing, a freshly created tree-sitter node becomes outdated within the function. I'm not sure _exactly_ how it happend, but it might look like this: we first get a node from, say, html parser, then get another node from, say, liquid parser. Creating the node from liquid parser causes a reparse which updated the range of the html parser, which rendered the html node outdated. There're several problems with the current design, let's start with the most obvious one: we add treesit--font-lock-mark-ranges-to-fontify as a notifier of the primar parser in treesit-major-mode-setup. Now, if a ts major mode inherits another major mode, treesit-major-mode-setup will be called twice, once in the parent mode and once in the child node, and two parsers will have the notifier. But treesit--font-lock-mark-ranges-to-fontify is designed to run only once. I believe this bug, together with some mysterious async execution order, led to the problems we saw in the bug report. My solution is to just make everything synchronous. So I added treesit-parser-changed-regions, and modified treesit--font-lock-mark-ranges-to-fontify to use it. Now we don't need to add the notifier to the primary parser anymore. I also applied the tree-sitter-outline change we discussed in the bug report. (Change to treesit-outline-search, and remove treesit--after-change.) * lisp/treesit.el: (treesit--font-lock-mark-ranges-to-fontify): Remove the unused PARSER arg. (treesit--pre-redisplay): Make use of treesit-parser-changed-regions. (treesit-outline-search): Call treesit--pre-redisplay in the beginning. (treesit--after-change): Remove function. (treesit-major-mode-setup): Don't add notifier to primary parser.
* Add a synchronous way to get parser change ranges (bug#78402)Yuan Fu2025-07-081-0/+13
| | | | | | | | | | | | | | This commit only adds the new function, the fix for the bug is in the next commit. * doc/lispref/parsing.texi (Using Parser): Add docs. * lisp/treesit.el (treesit): Add shortdoc. * src/treesit.c (treesit_get_affected_ranges): New function extracted from treesit_call_after_change_functions. (treesit_call_after_change_functions): Extract out. (treesit_ensure_parsed): Return affected regions. (Ftreesit_parser_changed_regions): New function that returns the affected regions.
* ; Fix compilation warning in docstring of new function in treesit.el.Juri Linkov2025-06-231-1/+1
|
* New function treesit--language-git-version-tagsPeter Oliver2025-06-231-0/+12
| | | | | * lisp/treesit.el (treesit--language-git-version-tags): New function to list version tags for a Tree-sitter parser Git repository (bug#78848).
* Use keyword :commit with full hashes for treesit-language-source-alist.Juri Linkov2025-06-201-8/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | * lisp/treesit.el (treesit-language-source-alist): Document the format that uses keywords. (treesit--install-language-grammar-1): Remove args 'revision', 'source-dir', 'cc', 'c++', 'commit'. Use 'args' to process the keywords, and use the remaining list as the previous list of arguments. (treesit--install-language-grammar-1): Let-bind 'treesit--install-language-grammar-full-clone' and 'treesit--install-language-grammar-blobless' to t when 'commit' is non-nil (bug#78542). * lisp/progmodes/c-ts-mode.el: * lisp/progmodes/cmake-ts-mode.el: * lisp/progmodes/csharp-mode.el: * lisp/progmodes/dockerfile-ts-mode.el: * lisp/progmodes/elixir-ts-mode.el: * lisp/progmodes/go-ts-mode.el: * lisp/progmodes/heex-ts-mode.el: * lisp/progmodes/java-ts-mode.el: * lisp/progmodes/js.el: * lisp/progmodes/json-ts-mode.el: * lisp/progmodes/php-ts-mode.el: * lisp/progmodes/python.el: * lisp/progmodes/ruby-ts-mode.el: * lisp/progmodes/rust-ts-mode.el: * lisp/progmodes/sh-script.el: * lisp/progmodes/typescript-ts-mode.el: * lisp/textmodes/css-mode.el: * lisp/textmodes/html-ts-mode.el: * lisp/textmodes/markdown-ts-mode.el: * lisp/textmodes/toml-ts-mode.el: * lisp/textmodes/yaml-ts-mode.el: Use the keyword :commit with full hashes instead of tags in 'treesit-language-source-alist'. * lisp/treesit-x.el (define-treesit-generic-mode): Simplify the keyword :copy-queries. (gitattributes-generic-ts-mode, liquid-generic-ts-mode): Add keywords :commit and :copy-queries to :source. * admin/tree-sitter/treesit-admin.el (treesit-admin--unversioned-treesit-language-source-alist): Handle :revision and :commit as well. (treesit-admin--find-latest-compatible-revision): Process the keywords in the recipe.
* Remove obsolete tree-sitter type-regexp varsYuan Fu2025-06-171-34/+0
| | | | | | * lisp/treesit.el (treesit-text-type-regexp): (treesit-sexp-type-regexp): (treesit-sentence-type-regexp): Remove variables.
* Add 'treesit-sexp-thing' to use instead of 'treesit-sexp-type-regexp'.Juri Linkov2025-06-121-20/+24
| | | | | | | | | | | | | | | | | | | | | * lisp/treesit.el (treesit-sexp-thing): New variable to use instead of 'treesit-sexp-type-regexp'. (treesit-sexp-thing-down-list): Rename from 'treesit-sexp-type-down-list'. (treesit-sexp-thing-up-list): Rename from 'treesit-sexp-type-up-list'. (treesit-forward-sexp, treesit--forward-list-with-default) (treesit-down-list, treesit-up-list): Update references to the above variables. (treesit-cycle-sexp-thing): Rename from 'treesit-cycle-sexp-type'. * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode): Update same variables. * lisp/progmodes/heex-ts-mode.el (heex-ts-mode): Set these variables instead of calling the function that sets them. * lisp/progmodes/python.el (python-ts-mode): Check if variables 'treesit-sentence-type-regexp' and 'treesit-sexp-type-regexp' are bound. https://lists.gnu.org/archive/html/emacs-devel/2025-06/msg00182.html
* Add tree-sitter version of prog-fill-reindent-defun (bug#78703)Yuan Fu2025-06-091-3/+28
| | | | | | | | | | | | | | | Add a tree-sitter version of prog-fill-reindent-defun that indents the defun that encloses point, rather than the sibling defun after point when there is one. * lisp/progmodes/prog-mode.el: (prog-fill-reindent-defun): Turns into a wrapper function. (prog-fill-reindent-defun-function): New variable. (prog-fill-reindent-defun-default): Old prog-fill-reindent-defun becomes this function. * lisp/treesit.el (treesit-fill-reindent-defun): New function. (treesit-major-mode-setup): Setup prog-fill-reindent-defun-function.
* ; Create a new section for sexp functions in treesit.el.Yuan Fu2025-06-091-0/+2
|
* Add new tactic to treesit-navigate-thing (bug#78703)Yuan Fu2025-06-091-9/+14
| | | | | | | * doc/emacs/programs.texi (Moving by Defuns): * doc/lispref/parsing.texi (User-defined Things): Describe the new tactic. * lisp/treesit.el (treesit-navigate-thing): Add new tactic.
* Merge from origin/emacs-30Eli Zaretskii2025-06-071-1/+4
|\ | | | | | | | | e4ba279b014 ; * doc/emacs/misc.texi (Network Security): Fix typo. 8fdb2d19b49 ; * lisp/treesit.el (treesit-beginning-of-defun): Doc fix...
| * ; * lisp/treesit.el (treesit-beginning-of-defun): Doc fix (bug#78703).Eli Zaretskii2025-06-061-1/+4
| |
* | Improve documentation of treesit "thing"Eli Zaretskii2025-06-051-13/+18
| | | | | | | | | | | | | | | | | | | | * src/treesit.c (syms_of_treesit): * lisp/treesit.el (treesit-cycle-sexp-type): (treesit-thing-at, treesit-thing-at-point): Doc fixes. * doc/lispref/parsing.texi (User-defined Things): Improve documentation of treesit "thing" and related functions; add cross-references and indexing.
* | * lisp/treesit.el: New variables for 'down-list' and 'up-list'.Juri Linkov2025-05-211-4/+18
| | | | | | | | | | | | | | | | | | | | | | (treesit-sexp-type-down-list, treesit-sexp-type-up-list): New buffer-local variables. (treesit-down-list): Use 'treesit-sexp-type-down-list'. (treesit-up-list): Use 'treesit-sexp-type-up-list'. * lisp/progmodes/elixir-ts-mode.el (elixir-ts-mode): Set 'treesit-sexp-type-down-list' and 'treesit-sexp-type-up-list' to 'list'.
* | Improve reporting of language-grammar library ABI version mismatchEli Zaretskii2025-05-181-1/+1
| | | | | | | | | | | | | | | | | | * lisp/treesit.el (treesit-ready-p): More accurate wording of message when grammar library fails to load. * src/treesit.c (treesit_load_language): Improve message when reporting library ABI version mismatch. Suggested by Soham Gumaste <sohamg2@gmail.com>.
* | * lisp/treesit.el (treesit-simple-imenu): Restore the previous behavior.Juri Linkov2025-05-161-2/+3
| | | | | | | | | | Use 'treesit-parser-list' again to not depend on the cursor's position (bug#78456).
* | * lisp/treesit.el (treesit--parser-overlay-offset): New variable.Juri Linkov2025-05-121-2/+11
| | | | | | | | | | | | (treesit-parsers-at): Use it (bug#77906). (treesit-forward-sexp, treesit--forward-list-with-default) (treesit-up-list): Let-bind 'treesit--parser-overlay-offset'.
* | Merge from origin/emacs-30Eli Zaretskii2025-05-101-8/+6
|\ \ | |/ | | | | | | | | | | | | | | | | 0d493864cee Fix indentation of XML comments 1a2c29b5317 Improve Tramp's make-process handling for Solaris a7dffc2ea38 Document 'time-stamp-time-zone' in Emacs Manual 0b4eb525b69 Make treesit--simple-indent-eval more permissive (bug#78065) ed7b55f6bf1 Adapt Tramp tests b172a1478c1 ; * doc/lispref/tips.texi (Library Headers): Fix wording ... 81629b2b2ba ; * lisp/gnus/mail-source.el (mail-sources): Fix a typo (...
| * Make treesit--simple-indent-eval more permissive (bug#78065)Yuan Fu2025-05-061-8/+6
| | | | | | | | | | | | * lisp/treesit.el (treesit--simple-indent-eval): Allow EXP to be anything, so higher-order indent presets can take anything as an argument: t, nil, symbols, keywords, etc.
| * Handle offset in treesit--update-ranges-local (bug#77848)Yuan Fu2025-04-181-5/+11
| | | | | | | | | | | | | | * lisp/treesit.el: (treesit--update-ranges-local): Add OFFSET parameter. (treesit-update-ranges): Pass offset to treesit--update-ranges-local.