* bug#59816: [PATCH]: bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-04 12:58 bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly Herman, Géza
@ 2022-12-05 12:44 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-05 13:01 ` Eli Zaretskii
2022-12-05 16:44 ` Alan Mackenzie
2022-12-07 19:36 ` Yuan Fu
2 siblings, 1 reply; 9+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-05 12:44 UTC (permalink / raw)
To: 59816; +Cc: eliz, geza.herman
[-- Attachment #1: Type: text/plain, Size: 923 bytes --]
Herman, Géza <geza.herman@gmail.com> writes:
> With the following simple program, emacs reports that "int a;" is in a comment:
>
> ---------------------
> void foo() {
> // c
> int a;
> }
> ---------------------
>
> Repro steps:
> - install tree-sitter-cpp available at
> https://github.com/tree-sitter/tree-sitter-cpp
> - copy the program above into a buffer
> - switch to c++-ts-mode
> - at the line "int a;", put the cursor at the 'i' (or anywhere in the line,
> exact position doesn't seem to matter)
> - M-: (nth 4 (syntax-ppss (point)))
>
> For me, this incorrectly returns "t". In c++-mode (without tree sitter), this
> correctly returns "nil".
>
You're right. This is my bad. This patch addresses it. What do you
think, Eli? BTW - I see that many modes in general don't refer to their
syntax-tables in their define-derived-mode form. Is that intentional?
Theo
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: 0001-Fix-syntax-table-for-tree-sitter-modes.patch --]
[-- Type: text/x-diff, Size: 5571 bytes --]
From b59c4cf3b238291fab57e6de47c60c5bdca3bc4f Mon Sep 17 00:00:00 2001
From: Theodor Thornhill <theo@thornhill.no>
Date: Mon, 5 Dec 2022 13:37:58 +0100
Subject: [PATCH] Fix syntax-table for tree-sitter modes
When adapting the 'c-populate-syntax-table' for tree-sitter, I misread
the code, and thus some crucial entries were missing. For the
relevant modes we use the same table as specified in the
non-tree-sitter major mode.
* lisp/progmodes/c-ts-mode.el (c-ts-mode--syntax-table): Add new
entries.
* lisp/progmodes/csharp-mode.el (csharp-ts-mode): Add new entries.
* lisp/progmodes/java-ts-mode.el (java-ts-mode--syntax-table): Add new
entries.
* lisp/progmodes/json-ts-mode.el (json-ts-mode--syntax-table): Add new
entries.
* lisp/progmodes/typescript-ts-mode.el
(typescript-ts-mode--syntax-table): Add new entries.
* lisp/textmodes/css-mode.el (css-ts-mode): Add new entries.
---
lisp/progmodes/c-ts-mode.el | 2 ++
lisp/progmodes/csharp-mode.el | 1 +
lisp/progmodes/java-ts-mode.el | 5 +++++
lisp/progmodes/json-ts-mode.el | 8 +++++---
lisp/progmodes/typescript-ts-mode.el | 9 +++++++--
lisp/textmodes/css-mode.el | 1 +
6 files changed, 21 insertions(+), 5 deletions(-)
diff --git a/lisp/progmodes/c-ts-mode.el b/lisp/progmodes/c-ts-mode.el
index 1bd093cfa2..0fcc9b9fe4 100644
--- a/lisp/progmodes/c-ts-mode.el
+++ b/lisp/progmodes/c-ts-mode.el
@@ -79,6 +79,8 @@ c-ts-mode--syntax-table
(modify-syntax-entry ?\240 "." table)
(modify-syntax-entry ?/ ". 124b" table)
(modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
table)
"Syntax table for `c-ts-mode'.")
diff --git a/lisp/progmodes/csharp-mode.el b/lisp/progmodes/csharp-mode.el
index 054dabfed0..bb721e248a 100644
--- a/lisp/progmodes/csharp-mode.el
+++ b/lisp/progmodes/csharp-mode.el
@@ -890,6 +890,7 @@ csharp-mode
;;;###autoload
(define-derived-mode csharp-ts-mode prog-mode "C#"
"Major mode for editing C# code."
+ :syntax-table (csharp--make-mode-syntax-table)
(unless (treesit-ready-p 'c-sharp)
(error "Tree-sitter for C# isn't available"))
diff --git a/lisp/progmodes/java-ts-mode.el b/lisp/progmodes/java-ts-mode.el
index 2c42505ac9..f947efc5a4 100644
--- a/lisp/progmodes/java-ts-mode.el
+++ b/lisp/progmodes/java-ts-mode.el
@@ -58,6 +58,11 @@ java-ts-mode--syntax-table
(modify-syntax-entry ?| "." table)
(modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\240 "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
+ (modify-syntax-entry ?@ "'" table)
table)
"Syntax table for `java-ts-mode'.")
diff --git a/lisp/progmodes/json-ts-mode.el b/lisp/progmodes/json-ts-mode.el
index 101e873cf6..cd96b139be 100644
--- a/lisp/progmodes/json-ts-mode.el
+++ b/lisp/progmodes/json-ts-mode.el
@@ -46,9 +46,7 @@ json-ts-mode-indent-offset
(defvar json-ts-mode--syntax-table
(let ((table (make-syntax-table)))
- ;; Taken from the cc-langs version
(modify-syntax-entry ?_ "_" table)
- (modify-syntax-entry ?$ "_" table)
(modify-syntax-entry ?\\ "\\" table)
(modify-syntax-entry ?+ "." table)
(modify-syntax-entry ?- "." table)
@@ -58,8 +56,12 @@ json-ts-mode--syntax-table
(modify-syntax-entry ?> "." table)
(modify-syntax-entry ?& "." table)
(modify-syntax-entry ?| "." table)
- (modify-syntax-entry ?` "\"" table)
+ (modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\240 "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
table)
"Syntax table for `json-ts-mode'.")
diff --git a/lisp/progmodes/typescript-ts-mode.el b/lisp/progmodes/typescript-ts-mode.el
index 48ac1169fe..c7edbb40f8 100644
--- a/lisp/progmodes/typescript-ts-mode.el
+++ b/lisp/progmodes/typescript-ts-mode.el
@@ -45,7 +45,6 @@ typescript-ts-mode--syntax-table
(let ((table (make-syntax-table)))
;; Taken from the cc-langs version
(modify-syntax-entry ?_ "_" table)
- (modify-syntax-entry ?$ "_" table)
(modify-syntax-entry ?\\ "\\" table)
(modify-syntax-entry ?+ "." table)
(modify-syntax-entry ?- "." table)
@@ -55,8 +54,14 @@ typescript-ts-mode--syntax-table
(modify-syntax-entry ?> "." table)
(modify-syntax-entry ?& "." table)
(modify-syntax-entry ?| "." table)
- (modify-syntax-entry ?` "\"" table)
+ (modify-syntax-entry ?\' "\"" table)
(modify-syntax-entry ?\240 "." table)
+ (modify-syntax-entry ?/ ". 124b" table)
+ (modify-syntax-entry ?* ". 23" table)
+ (modify-syntax-entry ?\n "> b" table)
+ (modify-syntax-entry ?\^m "> b" table)
+ (modify-syntax-entry ?$ "_" table)
+ (modify-syntax-entry ?` "\"" table)
table)
"Syntax table for `typescript-ts-mode'.")
diff --git a/lisp/textmodes/css-mode.el b/lisp/textmodes/css-mode.el
index b82886e397..b3654eaa7f 100644
--- a/lisp/textmodes/css-mode.el
+++ b/lisp/textmodes/css-mode.el
@@ -1822,6 +1822,7 @@ css-ts-mode
can also be used to fill comments.
\\{css-mode-map}"
+ :syntax-table css-mode-syntax-table
(when (treesit-ready-p 'css)
;; Borrowed from `css-mode'.
(add-hook 'completion-at-point-functions
--
2.34.1
^ permalink raw reply related [flat|nested] 9+ messages in thread
* bug#59816: [PATCH]: bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-05 12:44 ` bug#59816: [PATCH]: " Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-05 13:01 ` Eli Zaretskii
2022-12-05 13:21 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 9+ messages in thread
From: Eli Zaretskii @ 2022-12-05 13:01 UTC (permalink / raw)
To: Theodor Thornhill; +Cc: 59816, geza.herman
> From: Theodor Thornhill <theo@thornhill.no>
> Cc: geza.herman@gmail.com, eliz@gnu.org
> Date: Mon, 05 Dec 2022 13:44:49 +0100
>
> You're right. This is my bad. This patch addresses it. What do you
> think, Eli?
I'll defer to people who know more than I do about these modes.
> BTW - I see that many modes in general don't refer to their
> syntax-tables in their define-derived-mode form. Is that intentional?
The ELisp manual says:
-- Macro: define-derived-mode variant parent name docstring
keyword-args... body...
This macro defines VARIANT as a major mode command, using NAME as
the string form of the mode name. VARIANT and PARENT should be
unquoted symbols.
The new command VARIANT is defined to call the function PARENT,
then override certain aspects of that parent mode:
[...]
• The new mode has its own syntax table, kept in the variable
‘VARIANT-syntax-table’, unless you override this using the
‘:syntax-table’ keyword (see below). ‘define-derived-mode’
makes the parent mode’s syntax-table the parent of
‘VARIANT-syntax-table’, unless the latter is already set and
already has a parent different from the standard syntax table.
So there's no need to mention it because it happens automatically.
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#59816: [PATCH]: bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-05 13:01 ` Eli Zaretskii
@ 2022-12-05 13:21 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-05 23:16 ` Herman, Géza
0 siblings, 1 reply; 9+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-05 13:21 UTC (permalink / raw)
To: Eli Zaretskii; +Cc: casuri, 59816, geza.herman
Eli Zaretskii <eliz@gnu.org> writes:
>> From: Theodor Thornhill <theo@thornhill.no>
>> Cc: geza.herman@gmail.com, eliz@gnu.org
>> Date: Mon, 05 Dec 2022 13:44:49 +0100
>>
>> You're right. This is my bad. This patch addresses it. What do you
>> think, Eli?
>
> I'll defer to people who know more than I do about these modes.
>
Sure, added Yuan to CC.
>> BTW - I see that many modes in general don't refer to their
>> syntax-tables in their define-derived-mode form. Is that intentional?
>
> The ELisp manual says:
>
> -- Macro: define-derived-mode variant parent name docstring
> keyword-args... body...
> This macro defines VARIANT as a major mode command, using NAME as
> the string form of the mode name. VARIANT and PARENT should be
> unquoted symbols.
>
> The new command VARIANT is defined to call the function PARENT,
> then override certain aspects of that parent mode:
>
> [...]
>
> • The new mode has its own syntax table, kept in the variable
> ‘VARIANT-syntax-table’, unless you override this using the
> ‘:syntax-table’ keyword (see below). ‘define-derived-mode’
> makes the parent mode’s syntax-table the parent of
> ‘VARIANT-syntax-table’, unless the latter is already set and
> already has a parent different from the standard syntax table.
>
> So there's no need to mention it because it happens automatically.
Right, thanks!
Can you test this patch, Herman, and see if it works for you now?
Theo
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#59816: [PATCH]: bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-05 13:21 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-05 23:16 ` Herman, Géza
2022-12-06 7:00 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 1 reply; 9+ messages in thread
From: Herman, Géza @ 2022-12-05 23:16 UTC (permalink / raw)
To: Theodor Thornhill, Eli Zaretskii; +Cc: casuri, 59816
Hi Theo, yes, it works correctly with your patch, thanks!
On 12/5/22 14:21, Theodor Thornhill wrote:
> Eli Zaretskii <eliz@gnu.org> writes:
>
>>> From: Theodor Thornhill <theo@thornhill.no>
>>> Cc: geza.herman@gmail.com, eliz@gnu.org
>>> Date: Mon, 05 Dec 2022 13:44:49 +0100
>>>
>>> You're right. This is my bad. This patch addresses it. What do you
>>> think, Eli?
>> I'll defer to people who know more than I do about these modes.
>>
> Sure, added Yuan to CC.
>
>>> BTW - I see that many modes in general don't refer to their
>>> syntax-tables in their define-derived-mode form. Is that intentional?
>> The ELisp manual says:
>>
>> -- Macro: define-derived-mode variant parent name docstring
>> keyword-args... body...
>> This macro defines VARIANT as a major mode command, using NAME as
>> the string form of the mode name. VARIANT and PARENT should be
>> unquoted symbols.
>>
>> The new command VARIANT is defined to call the function PARENT,
>> then override certain aspects of that parent mode:
>>
>> [...]
>>
>> • The new mode has its own syntax table, kept in the variable
>> ‘VARIANT-syntax-table’, unless you override this using the
>> ‘:syntax-table’ keyword (see below). ‘define-derived-mode’
>> makes the parent mode’s syntax-table the parent of
>> ‘VARIANT-syntax-table’, unless the latter is already set and
>> already has a parent different from the standard syntax table.
>>
>> So there's no need to mention it because it happens automatically.
> Right, thanks!
>
> Can you test this patch, Herman, and see if it works for you now?
>
> Theo
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#59816: [PATCH]: bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-05 23:16 ` Herman, Géza
@ 2022-12-06 7:00 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 9+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-06 7:00 UTC (permalink / raw)
To: Herman, Géza, Eli Zaretskii; +Cc: casuri, 59816
On 6 December 2022 00:16:53 CET, "Herman, Géza" <geza.herman@gmail.com> wrote:
>Hi Theo, yes, it works correctly with your patch, thanks!
>
>On 12/5/22 14:21, Theodor Thornhill wrote:
>> Eli Zaretskii <eliz@gnu.org> writes:
>>
>>>> From: Theodor Thornhill <theo@thornhill.no>
>>>> Cc: geza.herman@gmail.com, eliz@gnu.org
>>>> Date: Mon, 05 Dec 2022 13:44:49 +0100
>>>>
>>>> You're right. This is my bad. This patch addresses it. What do you
>>>> think, Eli?
>>> I'll defer to people who know more than I do about these modes.
>>>
>> Sure, added Yuan to CC.
>>
>>>> BTW - I see that many modes in general don't refer to their
>>>> syntax-tables in their define-derived-mode form. Is that intentional?
>>> The ELisp manual says:
>>>
>>> -- Macro: define-derived-mode variant parent name docstring
>>> keyword-args... body...
>>> This macro defines VARIANT as a major mode command, using NAME as
>>> the string form of the mode name. VARIANT and PARENT should be
>>> unquoted symbols.
>>>
>>> The new command VARIANT is defined to call the function PARENT,
>>> then override certain aspects of that parent mode:
>>>
>>> [...]
>>>
>>> • The new mode has its own syntax table, kept in the variable
>>> ‘VARIANT-syntax-table’, unless you override this using the
>>> ‘:syntax-table’ keyword (see below). ‘define-derived-mode’
>>> makes the parent mode’s syntax-table the parent of
>>> ‘VARIANT-syntax-table’, unless the latter is already set and
>>> already has a parent different from the standard syntax table.
>>>
>>> So there's no need to mention it because it happens automatically.
>> Right, thanks!
>>
>> Can you test this patch, Herman, and see if it works for you now?
>>
>> Theo
>
Nice, thanks for testing!
Yuan, will you apply this patch?
Theo
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-04 12:58 bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly Herman, Géza
2022-12-05 12:44 ` bug#59816: [PATCH]: " Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
@ 2022-12-05 16:44 ` Alan Mackenzie
2022-12-05 17:07 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-07 19:36 ` Yuan Fu
2 siblings, 1 reply; 9+ messages in thread
From: Alan Mackenzie @ 2022-12-05 16:44 UTC (permalink / raw)
To: Theodor Thornhill; +Cc: 59816
Hello, Theodor,
Perhaps a little different from the original bug report, but while you're
at it, you may want to handle continued C++ line comments (I haven't
checked whether you've done this already, so apologies if so).
Here, in a comment, if the last character on the comment line is a \,
this continues the comment onto the next line. This backslash cannot
itself be escaped, so a comment line ending in \\ continues on to the
next line, too.
All the best with it!
--
Alan Mackenzie (Nuremberg, Germany).
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-05 16:44 ` Alan Mackenzie
@ 2022-12-05 17:07 ` Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
0 siblings, 0 replies; 9+ messages in thread
From: Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors @ 2022-12-05 17:07 UTC (permalink / raw)
To: Alan Mackenzie; +Cc: 59816
On 5 December 2022 17:44:14 CET, Alan Mackenzie <acm@muc.de> wrote:
>Hello, Theodor,
>
>Perhaps a little different from the original bug report, but while you're
>at it, you may want to handle continued C++ line comments (I haven't
>checked whether you've done this already, so apologies if so).
>
>Here, in a comment, if the last character on the comment line is a \,
>this continues the comment onto the next line. This backslash cannot
>itself be escaped, so a comment line ending in \\ continues on to the
>next line, too.
>
Do you mean fontlock-wise or syntax-wise? Maybe both?
>All the best with it!
>
Thanks, and thanks for the tip!
Theo :)
^ permalink raw reply [flat|nested] 9+ messages in thread
* bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly
2022-12-04 12:58 bug#59816: 29.0.60; c++-ts-mode handles one-line comments badly Herman, Géza
2022-12-05 12:44 ` bug#59816: [PATCH]: " Theodor Thornhill via Bug reports for GNU Emacs, the Swiss army knife of text editors
2022-12-05 16:44 ` Alan Mackenzie
@ 2022-12-07 19:36 ` Yuan Fu
2 siblings, 0 replies; 9+ messages in thread
From: Yuan Fu @ 2022-12-07 19:36 UTC (permalink / raw)
To: Theodor Thornhill; +Cc: 59816-done, Eli Zaretskii, casuri, geza.herman
Theodor Thornhill <theo@thornhill.no> writes:
> On 6 December 2022 00:16:53 CET, "Herman, Géza" <geza.herman@gmail.com> wrote:
>>Hi Theo, yes, it works correctly with your patch, thanks!
>>
>>On 12/5/22 14:21, Theodor Thornhill wrote:
>>> Eli Zaretskii <eliz@gnu.org> writes:
>>>
>>>>> From: Theodor Thornhill <theo@thornhill.no>
>>>>> Cc: geza.herman@gmail.com, eliz@gnu.org
>>>>> Date: Mon, 05 Dec 2022 13:44:49 +0100
>>>>>
>>>>> You're right. This is my bad. This patch addresses it. What do you
>>>>> think, Eli?
>>>> I'll defer to people who know more than I do about these modes.
>>>>
>>> Sure, added Yuan to CC.
>>>
>>>>> BTW - I see that many modes in general don't refer to their
>>>>> syntax-tables in their define-derived-mode form. Is that intentional?
>>>> The ELisp manual says:
>>>>
>>>> -- Macro: define-derived-mode variant parent name docstring
>>>> keyword-args... body...
>>>> This macro defines VARIANT as a major mode command, using NAME as
>>>> the string form of the mode name. VARIANT and PARENT should be
>>>> unquoted symbols.
>>>>
>>>> The new command VARIANT is defined to call the function PARENT,
>>>> then override certain aspects of that parent mode:
>>>>
>>>> [...]
>>>>
>>>> • The new mode has its own syntax table, kept in the variable
>>>> ‘VARIANT-syntax-table’, unless you override this using the
>>>> ‘:syntax-table’ keyword (see below). ‘define-derived-mode’
>>>> makes the parent mode’s syntax-table the parent of
>>>> ‘VARIANT-syntax-table’, unless the latter is already set and
>>>> already has a parent different from the standard syntax table.
>>>>
>>>> So there's no need to mention it because it happens automatically.
>>> Right, thanks!
>>>
>>> Can you test this patch, Herman, and see if it works for you now?
>>>
>>> Theo
>>
>
> Nice, thanks for testing!
> Yuan, will you apply this patch?
> Theo
Applied the patch, Thanks!
Yuan
^ permalink raw reply [flat|nested] 9+ messages in thread