GNU bug report logs -
#71784
31.0.50; Inconsistent fontification for field_identifier in c++-ts-mode
Previous Next
Reported by: Ergus <spacibba <at> aol.com>
Date: Wed, 26 Jun 2024 14:15:02 UTC
Severity: normal
Tags: wontfix
Found in version 31.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
On Wed, Jun 26, 2024 at 06:46:04PM GMT, Eli Zaretskii wrote:
>> Date: Wed, 26 Jun 2024 16:13:47 +0200
>> From: Ergus via "Bug reports for GNU Emacs,
>> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>>
>> Using the c++-ts-mode I found that there is some inconsistent
>> fontification for the `fields_identifier`:
>>
>> See the fontification in this example with `emacs -Q`.
>>
>> ```test.cpp
>>
>> std::string key;
>> bool inserted;
>>
>> struct name_t {
>> std::string key;
>> bool inserted;
>> };
>>
>> name_t keys = {"aaa", true};
>>
>> keys.inserted = false;
>> bool a = keys.inserted;
>> ```
>>
>> 1. The `keys.inserted` values are shown differently before or after the
>> = (the inserted word is fontified is some cases, but not in all)
>>
>> 2. The variable names are fontified differently outside or
>> inside the struct.
>>
>> 3. The escape sequence (\t) is fontified differently to the rest of the
>> text inside the string. I don't know if that is intentional or not. If
>> it is intentional, just ignore this comment.
>>
>> The inconsistencies 1 and 2 are not only different to c++-mode but they
>> are semantically incorrect.
>
>What does treesit-explore-mode tell you about these instances of
>keys.inserted?
This is the whole explorer buffer for the example code:
(translation_unit
(declaration
type: (qualified_identifier scope: (namespace_identifier) :: name: (type_identifier))
declarator: (identifier) ;)
(declaration type: (primitive_type) declarator: (identifier) ;)
(struct_specifier struct name: (type_identifier)
body:
(field_declaration_list {
(field_declaration
type: (qualified_identifier scope: (namespace_identifier) :: name: (type_identifier))
declarator: (field_identifier) ;)
(field_declaration type: (primitive_type) declarator: (field_identifier) ;)
}))
;
(declaration type: (type_identifier)
declarator:
(init_declarator declarator: (identifier) =
value:
(initializer_list {
(string_literal " (string_content) ")
, (true) }))
;)
(expression_statement
(assignment_expression
left: (field_expression argument: (identifier) operator: . field: (field_identifier))
operator: = right: (false))
;)
(declaration type: (primitive_type)
declarator:
(init_declarator declarator: (identifier) =
value: (field_expression argument: (identifier) operator: . field: (field_identifier)))
;))
The faces are:
1. Inside the struct insert has: font-lock-property-name-face
It says `declarator: (field_identifier)` and I thin is applying the
function c-ts-mode--fontify-declarator.
2. In `keys.inserted = false;` the `insert` words has: font-lock-property-use-face
It says `field: (field_identifier)` and applies (I think) :feature 'property
3. In `bool a = keys.inserted;` is not fontified.
But it says `field: (field_identifier)` like in 2.
Hope this helps.
Ergus
This bug report was last modified 294 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.