bug#59234: CC Mode 5.35.2 (ObjC//l); Random fontification of nsterm.m
Alan Mackenzie <[email protected]> Mon, 23 Jan 2023 21:34:51 +0000
| Newsgroups | gmane.emacs.cc-mode.general |
|---|---|
| Message-ID | <Y879ey7Sdz63QM+D@ACM> |
Hello, Po. On Mon, Nov 14, 2022 at 08:20:45 +0800, Po Lu wrote: > Alan Mackenzie <[email protected]> writes: > > Hello, Po. > > > > On Sun, Nov 13, 2022 at 11:13:02 +0800, Po Lu via CC-Mode-help wrote: > >> Package: cc-mode > > > >> If you go to src/nsterm.m, around line 4020 there should be the > >> following code: > > > >> static void > >> ns_draw_stretch_glyph_string (struct glyph_string *s) > >> { > >> struct face *face; > >> NSColor *fg_color; > > > >> if (s->hl == DRAW_CURSOR > >> && !x_stretch_cursor_p) > >> { > >> /* If `x-stretch-cursor' is nil, don't draw a block cursor as > >> wide as the stretch glyph. */ > >> int width, background_width = s->background_width; > >> int x = s->x; > > > >> if (!s->row->reversed_p) > >> { > >> int left_x = window_box_left_offset (s->w, TEXT_AREA); > > > >> if (x < left_x) > >> { > >> background_width -= left_x - x; > >> x = left_x; > >> } > >> } > >> else > >> { > > > >> in it, "width" and "background_width" are seemingly randomly fontified > >> as types. Then, if you scroll up to line 3658, you will see the > >> following code: > > > > > >> if (left_p && top_p) > >> [NSBezierPath fillRect: NSMakeRect (NSMinX (outer), > >> NSMinY (outer), > >> 1, 1)]; > > > >> if (right_p && top_p) > >> [NSBezierPath fillRect: NSMakeRect (NSMaxX (outer) - 1, > >> NSMinY (outer), > >> 1, 1)]; > > > >> if (right_p && bottom_p) > >> [NSBezierPath fillRect: NSMakeRect (NSMaxX (outer) - 1, > >> NSMaxY (outer) - 1, > >> 1, 1)]; > > > >> if (left_p && bottom_p) > >> [NSBezierPath fillRect: NSMakeRect (NSMinX (outer), > >> NSMaxY (outer) - 1, > >> 1, 1)]; > > > >> NSBezierPath is a type, and is correctly fontified, but NSMinX and > >> NSMaxX (and their Y variants) are functions, yet are fontified as types. > > > > The problem here is the setting of the customisable variable > > objc-font-lock-extra-types. In Objective C's case, it causes all > > identifiers beginning with an upper case letter and containing a lower > > case letter to be recognised as types. > > > > This is clearly not satisfactory, even if it was OK a long time ago. > > > > I would recommend you to customize this variable to nil. Note that CC > > Mode internal stuff gets set up at an early stage of Objective C Mode's > > initialisation, before buffer local variables or .dir-local.el get > > processed. So trying to change it in these places won't work (believe > > me, I've tried ;-). > > > > I'll try and think up a more satisfactory solution. > > > >> Thanks. > > > >> Emacs : GNU Emacs 29.0.50 (build 1, x86_64-pc-linux-gnu) > >> of 2022-11-12 > >> Package: CC Mode 5.35.2 (ObjC//l) > >> Buffer Style: GNU > >> c-emacs-features: (pps-extended-state col-0-paren posix-char-classes gen-string-delim gen-comment-delim syntax-properties category-properties 1-bit) > > > > [ .... ] > Thank you. I've set the default value of objc-font-lock-extra-types to nil, and committed the fix to the release branch. I'm closing the bug with this post. -- Alan Mackenzie (Nuremberg, Germany).