]> code.delx.au - gnu-emacs-elpa/blobdiff - validate.el
Fix copyright
[gnu-emacs-elpa] / validate.el
index ef628e954fc9d6ba8090c33c4650e49f3ab8296a..8408b63c3919a16a72708dd9d27ab718b8f0955f 100644 (file)
@@ -1,27 +1,14 @@
 ;;; validate.el --- Schema validation for Emacs-lisp  -*- lexical-binding: t; -*-
 
-;; Copyright (C) 2016  Artur Malabarba
+;; Copyright (C) 2016  Free Software Foundation, Inc.
 
 ;; Author: Artur Malabarba <emacs@endlessparentheses.com>
 ;; Keywords: lisp
 ;; Package-Requires: ((emacs "24.1") (cl-lib "0.5"))
-;; Version: 0.1
-
-;; This program is free software; you can redistribute it and/or modify
-;; it under the terms of the GNU General Public License as published by
-;; the Free Software Foundation, either version 3 of the License, or
-;; (at your option) any later version.
-
-;; This program is distributed in the hope that it will be useful,
-;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-;; GNU General Public License for more details.
-
-;; You should have received a copy of the GNU General Public License
-;; along with this program.  If not, see <http://www.gnu.org/licenses/>.
+;; Version: 0.2
 
 ;;; Commentary:
-
+;;
 ;; This library offers two functions that perform schema validation.
 ;; Use this is your Elisp packages to provide very informative error
 ;; messages when your users accidentally misconfigure a variable.
 ;; matches.  The function `validate-variable' verifies whether the value of a
 ;; custom variable matches its custom-type, while `validate-value' checks an
 ;; arbitrary value against an arbitrary schema.
+;;
+;; Missing features: `:inline', `plist', `coding-system', `color',
+;; `hook', `restricted-sexp'.
+
+;;; License:
+;;
+;; This file is part of GNU Emacs.
+;;
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <http://www.gnu.org/licenses/>.
 
 ;;; Code:
 (require 'cl-lib)
@@ -68,7 +75,7 @@ If they don't match, return an explanation."
     (setq args (or (plist-get props :args)
                    args))
     (let ((r
-           (cl-labels ((wtype ;wrong-type
+           (cl-labels ((wtype           ;wrong-type
                         (tt) (unless (funcall (intern (format "%sp" tt)) value)
                                (format "not a %s" tt))))
              ;; TODO: hook (top-level only).
@@ -168,5 +175,12 @@ with `validate-value'. NOERROR is passed to `validate-value'."
       (if noerror val
         (error "Variable `%s' has no custom-type." symbol)))))
 
+;;;###autoload
+(defun validate-mark-safe-local (symbol)
+  "Mark SYMBOL as a safe local if its custom type is obeyed."
+  (put symbol 'safe-local-variable
+       (lambda (val)
+         (validate-value val (custom-variable-type symbol) 'noerror))))
+
 (provide 'validate)
 ;;; validate.el ends here