Subject: bug#15219: Emacs Lisp mode and Lisp mode font-locking

From: Bozhidar Batsov <[email-masked]>
Date: Fri, 30 Aug 2013 16:23:37 +0300

On Friday, August 30, 2013 at 3:45 PM, Stefan Monnier wrote:
> > I've noticed something odd about the font-locking in Emacs Lisp mode and
> > Lisp mode - keyword args are highlighted using the font-lock-builtin-face
> > and constructs like &optional are highlighted using
> > font-lock-type-face. I guess this was was done way back and hasn't been
> > updated in a while, but I think it might a good idea to revise this. Pretty
> > sure those font faces are intended for different usage. I think it would be
> > great if all Emacs programming modes used the built-in font-lock faces
> > consistently, so that the meaning of certain faces doesn't change from mode
> > to mode. I guess that the two modes might also start using the
> > font-lock-built-in face to highlight their core functions (like car, cdr,
> > mapcar, mapc, etc) - as Clojure mode does. Personally I feel that uses of
> > the keyword face for things that are not special forms (like the when macro)
> > should be replaced with uses of the built-in face.
> > 
> 
> 
> Which things are special forms and which things are macros is
> somewhat arbitrary. The important thing to know about them is that
> they're not functions, so their arguments may not be evaluated in the
> usual way.
> 
> 

Fair point. I guess it makes sense to some extend to consider some macros to be "keywords". 
> Also macros are used to introduce new syntactic constructs: in normal
> programming languages, something like `when' would be highlighted as
> a `keyword', not as a `builtin'.
> 
> I'm not completely sure what the `builtin' is used for, usually.
> What information is it meant to provide? 
> 
> 

Generally the idea behind fontifying built-ins (AFAIK) is to remind programmers that something is part of the core of the language and it'd be unwise to redefine or shadow it. For instance in Clojure mode all methods from the clojure.core namespace are font-locked with the built-in face.
> I mean, do you consider
> `mapcar' "builtin" because it's fast? Because it's implemented in C?
> Because it's predefined (no need for any kind of autoloading/require)?
> Is `car' builtin because "if you didn't have it, you'd have to invent
> it" (IOW can't be implemented in Elisp)?
> 
Normally built-in functions would be those that came with the standard library of the language and are pretty generic in nature.  I guess in Emacs Lisp that would be functions like mapcar, mapc, vector, car, cdr - the building blocks on which everything else rests upon. I guess there are not that much of those and they haven't changed much in a long while. And as the Emacs manual itself states "font-lock-builtin-face is for the names of built-in functions". 
> Stefan
Anyways, I'd be happy to get just a fix for the keywords and &optional (and related) faces, since those are definitely off.