From 3fb30c8f1338ee8429411d6d36cd8ffbeb42f3cc Mon Sep 17 00:00:00 2001 From: Alan Mackenzie Date: Mon, 13 Mar 2023 16:42:02 +0000 Subject: [PATCH] CC Mode: Allow lists of strings as safe values for *-font-lock-extra-types * lisp/progmodes/cc-vars.el (c-list-of-strings): New function. (c-font-lock-extra-types, c++-font-lock-extra-types) (objc-font-lock-extra-types, java-font-lock-extra-types) (idl-font-lock-extra-types, pike-font-lock-extra-types): Add a :safe entry into each of thes defcustoms for c-list-of-string. (Top level): Add an autoload entry for each of the above. --- lisp/progmodes/cc-vars.el | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/lisp/progmodes/cc-vars.el b/lisp/progmodes/cc-vars.el index 60ed3521b8a..dbf24fbbb8b 100644 --- a/lisp/progmodes/cc-vars.el +++ b/lisp/progmodes/cc-vars.el @@ -1561,6 +1561,16 @@ also elsewhere in CC Mode to tell types from other identifiers.")) ;; (as opposed to the *-font-lock-keywords-* variables) since the old ;; values work fairly well anyway. +(defun c-list-of-strings (obj) + "Return non-nil when OBJ is a list of strings (including the empty list)." + (and + (listp obj) + (catch 'check + (dolist (elt obj) + (when (not (stringp elt)) + (throw 'check nil))) + t))) + (defcustom c-font-lock-extra-types '("\\sw+_t" ;; Defined in C99: @@ -1576,8 +1586,11 @@ also elsewhere in CC Mode to tell types from other identifiers.")) "For example, a value of (\"FILE\" \"\\\\sw+_t\") means the word \"FILE\" and words ending in \"_t\" are treated as type names.") :type 'c-extra-types-widget + :safe #'c-list-of-strings :group 'c) +;;;###autoload (put 'c-font-lock-extra-types 'safe-local-variable #'c-list-of-strings) + (defcustom c++-font-lock-extra-types '("\\sw+_t" ;; C library types (except those matched by the _t pattern): @@ -1607,8 +1620,11 @@ and words ending in \"_t\" are treated as type names.") "For example, a value of (\"string\") means the word \"string\" is treated as a type name.") :type 'c-extra-types-widget + :safe #'c-list-of-strings :group 'c) +;;;###autoload (put 'c++-font-lock-extra-types 'safe-local-variable #'c-list-of-strings) + (defcustom objc-font-lock-extra-types nil (c-make-font-lock-extra-types-blurb "ObjC" "objc-mode" (concat "For example, a value of (\"[" c-upper "]\\\\sw*[" c-lower "]\\\\sw*\") means @@ -1616,8 +1632,11 @@ capitalized words are treated as type names (the requirement for a lower case char is to avoid recognizing all-caps macro and constant names).")) :type 'c-extra-types-widget + :safe #'c-list-of-strings :group 'c) +;;;###autoload (put 'objc-font-lock-extra-types 'safe-local-variable #'c-list-of-strings) + (defcustom java-font-lock-extra-types (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw")) (c-make-font-lock-extra-types-blurb "Java" "java-mode" (concat @@ -1625,13 +1644,19 @@ names).")) capitalized words are treated as type names (the requirement for a lower case char is to avoid recognizing all-caps constant names).")) :type 'c-extra-types-widget + :safe #'c-list-of-strings :group 'c) +;;;###autoload (put 'java-font-lock-extra-types 'safe-local-variable #'c-list-of-strings) + (defcustom idl-font-lock-extra-types nil (c-make-font-lock-extra-types-blurb "IDL" "idl-mode" "") :type 'c-extra-types-widget + :safe #'c-list-of-strings :group 'c) +;;;###autoload (put 'idl-font-lock-extra-types 'safe-local-variable #'c-list-of-strings) + (defcustom pike-font-lock-extra-types (list (concat "[" c-upper "]\\sw*[" c-lower "]\\sw*")) (c-make-font-lock-extra-types-blurb "Pike" "pike-mode" (concat @@ -1640,8 +1665,11 @@ capitalized words are treated as type names (the requirement for a lower case char is to avoid recognizing all-caps macro and constant names).")) :type 'c-extra-types-widget + :safe #'c-list-of-strings :group 'c) +;;;###autoload (put 'pike-font-lock-extra-types 'safe-local-variable #'c-list-of-strings) + (defcustom c-asymmetry-fontification-flag t "Whether to fontify certain ambiguous constructs by white space asymmetry. -- 2.39.2