GNU bug report logs -
#63323
c-ts-mode does not know about `restrict'
Previous Next
Reported by: Po Lu <luangruo <at> yahoo.com>
Date: Sat, 6 May 2023 08:20:02 UTC
Severity: normal
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #14 received at 63323 <at> debbugs.gnu.org (full text, mbox):
> On May 6, 2023, at 5:19 AM, Eli Zaretskii <eliz <at> gnu.org> wrote:
>
>> Cc: 63323 <at> debbugs.gnu.org
>> Date: Sat, 06 May 2023 13:31:03 +0300
>> From: Eli Zaretskii <eliz <at> gnu.org>
>>
>> It looks like c-ts-mode thinks type qualifiers are possible only in
>> C++?
>>
>> :feature 'type
>> `((primitive_type) @font-lock-type-face
>> (type_identifier) @font-lock-type-face
>> (sized_type_specifier) @font-lock-type-face
>> ,@(when (eq mode 'cpp) <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
>> '((type_qualifier) @font-lock-type-face
>>
>> (qualified_identifier
>> scope: (namespace_identifier) @font-lock-type-face)
>>
>> (operator_cast) type: (type_identifier) @font-lock-type-face))
>> [,@c-ts-mode--type-keywords] @font-lock-type-face)
>>
>> The tree-sitter library returns a type_qualifier node for 'restrict':
>>
>> (parameter_declaration type: (type_identifier)
>> declarator:
>> (pointer_declarator *
>> (type_qualifier restrict)
>> declarator: (identifier)))
>>
>> Yuan, can you look into fixing this, please?
>
> Actually, it looks like we recognize the type qualifiers in C as
> keywords, via a separate list. So I've just added to that list the
> two missing qualifiers: 'restrict' and '_Atomic', and that fixes this
> bug for me.
>
> Yuan, is that the right fix? I've installed it on the emacs-29
> branch.
I check tree-sitter-c’s grammar and it defines type_qualifier [1], so if you move (type_qualifier) @font-lock-type-face out of the check for cpp, if would work. Recognizing them as keywords also works. So both are technically correct. C-mode uses keyword face, so I think your fix is a-ok.
[1] you probably know this, but for completeness:
type_qualifier: $ => choice(
'const',
'volatile',
'restrict',
'_Atomic'
),
Yuan
This bug report was last modified 2 years and 95 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.