1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2025-12-07 23:10:28 -08:00
Commit graph

62 commits

Author SHA1 Message Date
Stefan Kangas
5f923ff1a6 ; Fix typos 2023-12-03 23:31:30 +01:00
Eli Zaretskii
5f882f4ee9 ; Fix doc string punctuation in ruby-ts-mode.el. 2023-12-02 16:49:55 +02:00
Basil L. Contovounesios
ba60070b81 Backport: Fix some tree-sitter :match regexps
This was originally installed on 2023-06-17 in the emacs-29 release
branch and later reverted.  This backport follows the Emacs 29.1
release (bug#64019).

The shy groups were caught by modified versions of the GNU ELPA
packages xr and relint:
- https://github.com/mattiase/xr/pull/6
- https://github.com/mattiase/relint/pull/14

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--s-p-query): Quote special
character in regexp.
* lisp/progmodes/java-ts-mode.el (java-ts-mode--font-lock-settings):
* lisp/progmodes/js.el (js--plain-method-re):
(js--treesit-font-lock-settings):
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode--font-lock-settings):
* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--font-lock-settings): Replace character
alternative [\\d], which matches '\' or 'd', with the most likely
intention [0-9].  Fix shy groups mistyped as optional colons.
Remove unneeded numbered :match group in rust-ts-mode.

(cherry picked from commit cd8d3f3379)
2023-07-30 17:39:34 +02:00
Basil L. Contovounesios
02f0be0301 Revert "Fix some tree-sitter :match regexps"
This reverts commit 95091b77f0
of 2023-06-17, mistakenly pushed to emacs-29.

The patch will be installed on master instead, and backported later,
after Emacs 29.1 is released (bug#64019).

Do not merge to master.
2023-06-17 20:39:16 +01:00
Basil L. Contovounesios
95091b77f0 Fix some tree-sitter :match regexps
The shy groups were caught by modified versions of the GNU ELPA
packages xr and relint:
- https://github.com/mattiase/xr/pull/6
- https://github.com/mattiase/relint/pull/14

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--s-p-query): Quote special
character in regexp.
* lisp/progmodes/java-ts-mode.el (java-ts-mode--font-lock-settings):
* lisp/progmodes/js.el (js--plain-method-re):
(js--treesit-font-lock-settings):
* lisp/progmodes/rust-ts-mode.el (rust-ts-mode--font-lock-settings):
* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--font-lock-settings): Replace character
alternative [\\d], which matches '\' or 'd', with the most likely
intention [0-9].  Fix shy groups mistyped as optional colons.
Remove unneeded numbered :match group in rust-ts-mode (bug#64019).
2023-06-17 16:41:35 +01:00
Dmitry Gutov
cbef1422fe ruby-ts-mode: Fix/simplify Imenu index generation
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--full-name): Drop '#'
from the end of resulting string when the node is not a method.
Support 'singleton_method' nodes.
(ruby-ts--imenu-helper): Simplify, to create a "flat" list of
entries, rather than a nested one.  The previous implementation
had problems (like producing a nested structure of full-qualified
names, thus creating a lot of textual repetition), seems easier to
just follow ruby-mode's example here, at least for Emacs 29's
release.

* test/lisp/progmodes/ruby-ts-mode-tests.el (ruby-ts-imenu-index):
New test.
2023-03-27 03:49:13 +03:00
Dmitry Gutov
a0d5fba74a (ruby-ts--align-chain): Use 'equal' to check for an exact match
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--align-chain): Use
'equal' to check for an exact match rather than substring.
2023-03-27 02:11:16 +03:00
Mattias Engdegård
f631c90e79 ; Use string-search instead of string-match[-p] in ruby-ts-mode.el
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--align-chain):
Use the much faster string-search when just searching for a substring.

(cherry picked from commit 0724c6dbda)
2023-03-27 02:08:48 +03:00
Dmitry Gutov
ecdfd584a5 ruby-ts-mode: Fine-tune s-p-f on symbols (bug#62086)
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--s-p-query):
Don't match ':' in symbol node text.  Or '_', I suppose.
(ruby-ts--syntax-propertize): Make sure to only put the '_' syntax
on punctuation syntax characters, and not on the whole symbol (to
e.g. have symbols like :foo? include text recognized as word).

* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-syntax-propertize-symbol): New test.
2023-03-09 23:49:39 +02:00
Dmitry Gutov
246f5b541c Update ts modes missed in 4c16fd3a51 to use column-0
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
* lisp/progmodes/go-ts-mode.el (go-ts-mode--indent-rules):
Change point-min anchor to column-0.
2023-03-04 19:45:39 +02:00
Dmitry Gutov
613de66281 Rename the newly added -ref- faces to -use-
* lisp/font-lock.el (font-lock-variable-use-face)
(font-lock-property-use-face): Rename from font-lock-variable-ref-face
and font-lock-property-ref-face.  Update all references (bug#61655).
2023-02-28 04:08:55 +02:00
Dmitry Gutov
a795c51f60 Add more/finer faces for tree-sitter
* doc/lispref/modes.texi (Faces for Font Lock):
Update the list of faces (bug#61655).

* etc/NEWS: Update the list of new faces.

* lisp/cus-theme.el (custom-theme--listed-faces): Update.

* lisp/font-lock.el (font-lock-function-call-face)
(font-lock-variable-ref-face, font-lock-property-ref-face):
New faces.
(font-lock-property-name-face):
Rename from 'font-lock-property-face'.

* lisp/progmodes/c-ts-mode.el (c-ts-mode--font-lock-settings):
Use new faces.  More 'enumerator' query to 'definition' feature.
(c-ts-mode--fontify-declarator, c-ts-mode--fontify-variable):
Use new faces.

* lisp/progmodes/cmake-ts-mode.el
(cmake-ts-mode--font-lock-settings): Use new faces.

* lisp/progmodes/csharp-mode.el
(csharp-ts-mode--font-lock-settings): Use new faces.

* lisp/progmodes/go-ts-mode.el (go-ts-mode--font-lock-settings):
Use new faces.

* lisp/progmodes/java-ts-mode.el
(java-ts-mode--font-lock-settings): Use new faces.

* lisp/progmodes/js.el (js--treesit-fontify-assignment-lhs)
(js--treesit-font-lock-settings): Use new faces.  Highlight
variable definitions inside array and object destructuring
patterns.

* lisp/progmodes/python.el (python--treesit-variable-p):
Exclude identifiers in parameters.
(python--treesit-settings): Use new faces.  Highlight function
parameters.  Move 'keyword' up to still highlight 'self' as
keyword.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
Use new faces.

* lisp/progmodes/rust-ts-mode.el
(rust-ts-mode--font-lock-settings): Use new faces.

* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--font-lock-settings): Use new faces.

* lisp/textmodes/css-mode.el (css--treesit-settings):
Use font-lock-property-ref-face.

* lisp/textmodes/toml-ts-mode.el
(toml-ts-mode--font-lock-settings):
Use font-lock-property-ref-face.

* lisp/textmodes/yaml-ts-mode.el
(yaml-ts-mode--font-lock-settings): Same.
2023-02-25 03:35:08 +02:00
Dmitry Gutov
973c1d24c6 ruby-ts-mode: Also don't reindent 'identifier' when inside ERROR
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Also don't reindent 'identifier' when inside ERROR.
2023-02-09 04:48:25 +02:00
Dmitry Gutov
a5651c0c40 ruby-ts-mode: Fix indentation inside empty if/unless/case/def
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Add new rule.

* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-indent-empty-if-else): New test.
2023-02-09 04:16:15 +02:00
Dmitry Gutov
b40a929a3f ; ruby-ts--syntax-propertize: Amend commentary 2023-02-05 02:43:05 +02:00
Dmitry Gutov
4c765d93ab Refine the previous change
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--s-p-query): Fix a typo.
(ruby-ts--syntax-propertize): Use pcase-exhaustive to avoid typos.
Put the last s-t property after heredoc's end (apparently
parse-partial-sexp likes that more).  Move first s-t property on
percent literals to the very beginning (to be refined later).
Differentiate the %r{} literals from /.../ ones -- tree-sitter
parses them exactly the same.
2023-02-04 04:16:55 +02:00
Dmitry Gutov
d99b5151f8 Add syntax-propertize-function to ruby-ts-mode
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--s-p-query):
New variable.
(ruby-ts--syntax-propertize): New function.
(ruby-ts--parser-after-change): New function.
(ruby-ts-mode): Use both of them.
2023-02-04 03:34:40 +02:00
Dmitry Gutov
3b3c47d977 (treesit_predicate_match): Match node text against regexp without consing
* src/treesit.c (treesit_predicate_match): Match node text against
regexp without creating a new string object (bug#60953).

* src/search.c (search_buffer): Make not static.
Delete declaration near the beginning of the file.

* src/lisp.h: Declare it here.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--builtin-method-p):
Remove function.
(ruby-ts--font-lock-settings): Use the regexp with :match directly.
2023-02-02 21:38:59 +02:00
Dmitry Gutov
cfb180329b ruby-ts-mode: Don't reindent when "class" or "def" is under "ERROR"
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Don't reindent when "class" or "def" is under "ERROR" (bug#61017).
2023-01-25 17:22:31 +02:00
Dmitry Gutov
b3814b43f6 (ruby-ts--predefined-variables): Fix the $` and $' entries
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--predefined-variables):
Fix the $` and $' entries, somehow replaced by curly quote.

Reported by Mattias Engdegård.
2023-01-22 20:51:21 +02:00
Dmitry Gutov
e74ba72a6a ruby-ts-mode: Fix two additional cases with ruby-method-call-indent=nil
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Fix two additional cases with ruby-method-call-indent=nil.

* test/lisp/progmodes/ruby-mode-resources/ruby-method-call-indent.rb:
Add examples.
2023-01-22 04:55:13 +02:00
Theodor Thornhill
d63e1a8951 Use point-min to anchor top-level constructs (bug#60602)
* lisp/progmodes/c-ts-mode.el (c-ts-mode--indent-styles): New anchor.
* lisp/progmodes/java-ts-mode.el (java-ts-mode--indent-rules): New
anchor.
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules): New anchor.
* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--indent-rules): New anchor.
2023-01-20 22:54:09 +01:00
Dmitry Gutov
472f142598 ; ruby-ts-mode: Add a Version tag 2023-01-20 19:25:12 +02:00
Dmitry Gutov
0cf053648a ; ruby-ts-mode: Update font-lock features list in Commentary 2023-01-20 19:08:22 +02:00
Eli Zaretskii
6b2f85caa6 Make tree-sitter based modes optional
* lisp/progmodes/c-ts-mode.el: Update Commentary.  Make
'auto-mode-alist' update conditional on the tree-sitter and
grammar libraries being available.
* lisp/progmodes/cmake-ts-mode.el:
* lisp/progmodes/csharp-mode.el:
* lisp/progmodes/dockerfile-ts-mode.el:
* lisp/progmodes/go-ts-mode.el:
* lisp/progmodes/java-ts-mode.el:
* lisp/progmodes/js.el:
* lisp/progmodes/json-ts-mode.el:
* lisp/progmodes/python.el:
* lisp/progmodes/ruby-ts-mode.el:
* lisp/progmodes/typescript-ts-mode.el:
* lisp/textmodes/css-mode.el:
* lisp/textmodes/toml-ts-mode.el:
* lisp/textmodes/yaml-ts-mode.el: Make 'auto-mode-alist' update
for tree-sitter based modes be conditional on the tree-sitter and
grammar libraries being available.  (Bug#60559)
2023-01-20 10:28:26 +02:00
Dmitry Gutov
b56cf28b32 ; (ruby-ts--predefined-variables): Make it a little shorter 2023-01-20 05:41:39 +02:00
Dmitry Gutov
d94dc606a0 ruby-ts-mode: Claw back half of the performance drop from last change
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--builtin-method-p):
New function.
(ruby-ts--font-lock-settings): Use it instead of :match.
2023-01-20 05:35:12 +02:00
Dmitry Gutov
d0d3451409 (ruby-ts-mode): Rename 'builtin-functions' to 'builtin-function'
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings)
(ruby-ts-mode): Rename 'builtin-functions' to 'builtin-function',
for consistency with similar features.
2023-01-20 04:14:38 +02:00
Dmitry Gutov
d66ac5285f ruby-ts-mode: Highlight builtin methods
* lisp/progmodes/ruby-mode.el (ruby-builtin-methods-with-reqs)
(ruby-builtin-methods-no-reqs): New constants, extracted.
(ruby-font-lock-keywords): Replace values with references.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--builtin-methods): New
variable.  Construct regexp from aforementioned constants' values.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
Use it.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts-mode):
Add new font-lock feature: builtin-functions.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--predefined-constants)
(ruby-ts--predefined-variables): Unrelated to the rest of the
patch, add string-start and string-end anchors.
2023-01-20 03:58:03 +02:00
Dmitry Gutov
370b1ac99e ; ruby-ts-mode.el: Add customize-group mention to commentary 2023-01-20 03:58:03 +02:00
Dmitry Gutov
25ddb3f7d9 ; ruby-ts--indent-rules: Minor cleanup
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules): Remove
the (match "begin" "assignment") rule.  The catch-all has the same
effect.  Update a comment referring to rules removed previously.
2023-01-19 19:44:10 +02:00
Dmitry Gutov
0d3b6518e3 (ruby-ts--indent-rules): Indent inside empty parens properly
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Consider the case when there are no arguments inside the call yet.

* test/lisp/progmodes/ruby-ts-mode-tests.el
(ruby-ts-indent-call-no-args): Add test.
2023-01-19 19:44:10 +02:00
Dmitry Gutov
db72787380 ruby-ts-mode: Use font-lock-constant-face for true/false/nil
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
Use font-lock-constant-face for true/false/nil.
2023-01-19 05:43:10 +02:00
Dmitry Gutov
819719330a (ruby-ts--indent-rules): Add a rule for continuation of a hash pair
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Add a rule for continuation of a hash pair.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb: Add examples.
2023-01-19 05:27:43 +02:00
Dmitry Gutov
94b9cbf96f (ruby-ts--parent-call-or-bol): Handle more cases with nested literals
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--parent-call-or-bol):
Handle more cases with nested literals.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb: Add examples.
2023-01-19 05:27:43 +02:00
Dmitry Gutov
ba33b83ce4 (ruby-ts--statement-container-regexp): Remove "parenthesized_statements"
* lisp/progmodes/ruby-ts-mode.el
(ruby-ts--statement-container-regexp): Remove
"parenthesized_statements", it's not really a statement container,
not one we'd use for indentation alignment anyway.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb: Add examples.
2023-01-19 05:27:43 +02:00
Dmitry Gutov
f2bedf695c ruby-ts-mode: Handle indent in parenless calls much closer to ruby-mode
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--parent-call-or-bol):
New function.
(ruby-ts--indent-rules): Use it for cases which need special
anchoring logic when inside a parenless method call.
Remove the ad-hoc handling of pair-hash-pair etc indentation,
which was there only for the parenless cases, apparently.
Have "No paren, ruby-parenless-call-arguments-indent is nil" case
align to the statement, if only because ruby-mode does that.

* test/lisp/progmodes/ruby-ts-mode-tests.el:
Run indent test for ruby-parenless-call-arguments-indent.rb.
2023-01-19 05:27:43 +02:00
Dmitry Gutov
343b9b3dfe ruby-ts-mode: Obey the option ruby-method-call-indent
* lisp/progmodes/ruby-ts-mode.el
(ruby-ts--method-call-indent-p): New function.
(ruby-ts--indent-rules): Use it.

* test/lisp/progmodes/ruby-ts-mode-tests.el:
Run indent test for ruby-method-call-indent.rb.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb:
Add explicit value for ruby-method-call-indent.
2023-01-18 03:27:37 +02:00
Dmitry Gutov
045404d1aa ruby-ts-mode: Obey the option ruby-after-operator-indent
* lisp/progmodes/ruby-ts-mode.el
(ruby-ts--after-op-indent-p): New function.
(ruby-ts--indent-rules): Use it.

* test/lisp/progmodes/ruby-ts-mode-tests.el:
Run indent test for ruby-after-operator-indent.rb.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb:
Make sure indentation vars are at their default values.
2023-01-18 03:27:37 +02:00
Dmitry Gutov
300ca6ac37 ruby-ts-mode: Fix indent after operator or conditional
Make it match ruby-mode's indentation behavior.

* lisp/progmodes/ruby-ts-mode.el (ruby-ts--binary-indent-anchor):
New function.
(ruby-ts--indent-rules): Use it instead of a composite matcher.
Add a rule for 'conditional'.
(ruby-ts--assignment-ancestor, ruby-ts--is-in-condition)
(ruby-ts--endless-method): Remove.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb:
Add examples.
2023-01-18 03:27:37 +02:00
Dmitry Gutov
ac5516bd7d ruby-ts-mode: Fix/change indentation of a continuation method call
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Fix/change indentation of a continuation method call.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb:
New examples.
2023-01-18 03:27:37 +02:00
Dmitry Gutov
5e2e68a0c2 ruby-ts-mode: Fix indent inside parenthesized_expr and else/end after unless
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Fix indentation for parenthesized_expression and else/end after
'unless'.

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb:
New examples.
2023-01-18 03:27:37 +02:00
Dmitry Gutov
9ed9ff4690 ruby-ts-mode: Fix the rules for hanging arrays and hashes
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--indent-rules):
Fix the rules for hanging arrays and hashes (to line up to
parent-bol instead of the opening brace).

* test/lisp/progmodes/ruby-mode-resources/ruby-ts.rb:
New file with examples.

* test/lisp/progmodes/ruby-ts-mode-tests.el: Use it here.
2023-01-18 03:27:37 +02:00
Dmitry Gutov
352e41016b ruby-ts-mode: Support the option ruby-block-indent
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--block-indent-anchor):
New function.
(ruby-ts--indent-rules): Use it.

* test/lisp/progmodes/ruby-ts-mode-tests.el:
Run indent test for ruby-block-indent.rb.
2023-01-16 05:50:28 +02:00
Eli Zaretskii
b1aa720671 ; * lisp/progmodes/ruby-ts-mode.el: Fix compilation warnings (bug#60647). 2023-01-08 12:56:13 +02:00
Dmitry Gutov
ee3e8d3f92 (ruby-ts--font-lock-settings): Improve highlighting in patterns
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
Improve highlighting in patterns: highlight values not keys as
variable in the usual case; highlight keys when no value;
highlight the "as pattern" variable.
2023-01-08 03:59:36 +02:00
Dmitry Gutov
2ea6ee5cbf (font-lock-regexp-face): New face
* lisp/font-lock.el (font-lock-regexp-face): New face.

* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--font-lock-settings):
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
* lisp/progmodes/js.el (js--treesit-font-lock-settings):
Use it for regexps.

* etc/NEWS: Mention the addition.
2023-01-06 19:56:20 +02:00
Dmitry Gutov
5ab03bcc43 Unify the string interpolation delimiters face across ts modes
* lisp/progmodes/js.el (js--treesit-font-lock-settings):
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--font-lock-settings):
Use font-lock-misc-punctuation-face for string interpolation
delimiters.
2023-01-06 16:17:50 +02:00
Dmitry Gutov
92e8c0c091 ruby-ts-mode: Highlight more kinds of parameters
* lisp/progmodes/ruby-ts-mode.el
(ruby-ts--font-lock-settings): Highlight destructured parameters,
lambda parameters, identifiers in pattern matching clauses
(array/hash) and exception variables.
Move the 'symbol' matchers lower to make 'hash_key_symbol' lower
priority than hash keys in match patterns.
2023-01-06 15:38:13 +02:00
Dmitry Gutov
0f5e74f173 ruby-ts-mode: Highlight method and block parameters
* lisp/progmodes/ruby-ts-mode.el (ruby-ts--font-lock-settings):
Add rules for method and block parameters.
(ruby-ts-mode): Add corresponding feature.
2023-01-06 04:48:35 +02:00