X-Git-Url: https://code.delx.au/gnu-emacs-elpa/blobdiff_plain/24078157b6a5b0b7dbb830e4242dd715dcf89e32..95865f28b0f0b6386b8dcdf2b084f1cd79ffab0d:/validate.el diff --git a/validate.el b/validate.el index ef628e954..8408b63c3 100644 --- a/validate.el +++ b/validate.el @@ -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 ;; 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 . +;; 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. @@ -45,6 +32,26 @@ ;; 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 . ;;; 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