javascript-mode is an alias for js-mode, and some third-party modes (e.g. json-mode) derive from it. (provided-mode-derived-p 'js-mode 'prog-mode) == t but (provided-mode-derived-p 'javascript-mode 'prog-mode) == nil Hence in json-mode, (derived-mode-p 'prog-mode) evaluates to nil, which seems unfortunate. -- https://rrt.sc3d.org