]> git.eshelyaron.com Git - emacs.git/commitdiff
Use lexical-binding in almost all of play/*.el
authorStefan Kangas <stefan@marxist.se>
Wed, 10 Feb 2021 00:23:41 +0000 (01:23 +0100)
committerStefan Kangas <stefan@marxist.se>
Wed, 10 Feb 2021 05:25:28 +0000 (06:25 +0100)
* lisp/play/5x5.el: Use lexical-binding.
(5x5-draw-grid-end, 5x5-draw-grid, 5x5-solver)
(5x5-solve-suggest): Silence byte-compiler.

* lisp/play/cookie1.el: Use lexical-binding.
(cookie-shuffle-vector, cookie-apropos): Silence byte-compiler.

* lisp/play/zone.el: Use lexical-binding.
(zone): Convert lambda to proper lexical closure.
(zone-replace-char, zone-fill-out-screen): Silence byte-compiler.

* lisp/play/blackbox.el:
* lisp/play/doctor.el:
* lisp/play/gametree.el:
* lisp/play/hanoi.el: Use lexical-binding.

* test/lisp/play/cookie1-resources/cookies:
* test/lisp/play/cookie1-tests.el: New files.

lisp/play/5x5.el
lisp/play/blackbox.el
lisp/play/cookie1.el
lisp/play/doctor.el
lisp/play/gametree.el
lisp/play/hanoi.el
lisp/play/zone.el
test/lisp/play/cookie1-resources/cookies [new file with mode: 0644]
test/lisp/play/cookie1-tests.el [new file with mode: 0644]

index 05e61dfe40178aa702f18d1dd33cafa9c349ab33..891a5f6cbaa568f698e27f4deb91c6d272ef5f3d 100644 (file)
@@ -1,4 +1,4 @@
-;;; 5x5.el --- simple little puzzle game
+;;; 5x5.el --- simple little puzzle game  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
@@ -289,7 +289,7 @@ Quit current game           \\[5x5-quit-game]"
 (defun 5x5-draw-grid-end ()
   "Draw the top/bottom of the grid."
   (insert "+")
-  (dotimes (x 5x5-grid-size)
+  (dotimes (_ 5x5-grid-size)
     (insert "-" (make-string 5x5-x-scale ?-)))
   (insert "-+ "))
 
@@ -297,11 +297,11 @@ Quit current game           \\[5x5-quit-game]"
   "Draw the grids GRIDS into the current buffer."
   (let ((inhibit-read-only t) grid-org)
     (erase-buffer)
-    (dolist (grid grids) (5x5-draw-grid-end))
+    (dolist (_ grids) (5x5-draw-grid-end))
     (insert "\n")
     (setq grid-org (point))
     (dotimes (y 5x5-grid-size)
-      (dotimes (lines 5x5-y-scale)
+      (dotimes (_lines 5x5-y-scale)
         (dolist (grid grids)
           (dotimes (x 5x5-grid-size)
             (insert (if (zerop x) "| " " ")
@@ -331,7 +331,7 @@ Quit current game           \\[5x5-quit-game]"
                    (forward-char  (1+ 5x5-x-scale))))
                (forward-line  5x5-y-scale))))
        (setq 5x5-solver-output nil)))
-    (dolist (grid grids) (5x5-draw-grid-end))
+    (dolist (_grid grids) (5x5-draw-grid-end))
     (insert "\n")
     (insert (format "On: %d  Moves: %d" (5x5-grid-value (car grids)) 5x5-moves))))
 
@@ -475,11 +475,11 @@ position."
   "Convert a grid matrix GRID-MATRIX in Calc format to a grid in
 5x5 format.  See function `5x5-grid-to-vec'."
   (apply
-   'vector
+   #'vector
    (mapcar
     (lambda (x)
       (apply
-       'vector
+       #'vector
        (mapcar
        (lambda (y) (/= (cadr y) 0))
        (cdr x))))
@@ -503,7 +503,9 @@ position."
 Log a matrix VALUE of (mod B 2) forms, only B is output and
 Scilab matrix notation is used.  VALUE is returned so that it is
 easy to log a value with minimal rewrite of code."
-       (when (buffer-live-p 5x5-log-buffer)
+        (when (buffer-live-p 5x5-log-buffer)
+          (defvar calc-matrix-brackets)
+          (defvar calc-vector-commas)
          (let* ((unpacked-value
                  (math-map-vec
                   (lambda (row) (math-map-vec 'cadr row))
@@ -515,7 +517,7 @@ easy to log a value with minimal rewrite of code."
              (insert name ?= value-to-log ?\n))))
        value))
   (defsubst 5x5-log-init ())
-  (defsubst 5x5-log (name value) value)))
+  (defsubst 5x5-log (_name value) value)))
 
 (declare-function math-map-vec "calc-vec" (f a))
 (declare-function math-sub "calc" (a b))
@@ -533,6 +535,10 @@ easy to log a value with minimal rewrite of code."
 (declare-function calcFunc-mcol "calc-vec" (mat n))
 (declare-function calcFunc-vconcat "calc-vec" (a b))
 (declare-function calcFunc-index "calc-vec" (n &optional start incr))
+(defvar calc-word-size)
+(defvar calc-leading-zeros)
+(defvar calc-number-radix)
+(defvar calc-command-flags)
 
 (defun 5x5-solver (grid)
   "Return a list of solutions for GRID.
@@ -671,16 +677,16 @@ Solutions are sorted from least to greatest Hamming weight."
            (5x5-log
             "cb"
             (math-mul inv-base-change targetv))); CB
-          (row-1  (math-make-intv 3  1 transferm-kernel-size)) ; 1..2
+           ;; (row-1  (math-make-intv 3  1 transferm-kernel-size)) ; 1..2
           (row-2   (math-make-intv 1 transferm-kernel-size
                                    grid-size-squared)); 3..25
           (col-1 (math-make-intv 3 1  (- grid-size-squared
                                          transferm-kernel-size))); 1..23
-          (col-2 (math-make-intv 1 (- grid-size-squared
-                                      transferm-kernel-size)
-                                 grid-size-squared)); 24..25
-          (ctransferm-1-: (calcFunc-mrow ctransferm row-1))
-          (ctransferm-1-1 (calcFunc-mcol ctransferm-1-: col-1))
+           ;; (col-2 (math-make-intv 1 (- grid-size-squared
+           ;;                         transferm-kernel-size)
+           ;;                    grid-size-squared)) ; 24..25
+           ;; (ctransferm-1-: (calcFunc-mrow ctransferm row-1))
+           ;; (ctransferm-1-1 (calcFunc-mcol ctransferm-1-: col-1))
 
           ;; By construction ctransferm-:-2 = 0, so ctransferm-1-2 = 0
           ;; and ctransferm-2-2 = 0.
@@ -696,8 +702,8 @@ Solutions are sorted from least to greatest Hamming weight."
           ;;
           ;;(ctransferm-2-2 (calcFunc-mcol ctransferm-2-: col-2))
 
-          (ctarget-1 (calcFunc-mrow ctarget row-1))
-          (ctarget-2 (calcFunc-mrow ctarget row-2))
+           ;; (ctarget-1 (calcFunc-mrow ctarget row-1))
+           (ctarget-2 (calcFunc-mrow ctarget row-2))
 
           ;;   ctarget-1(2x1)  =   ctransferm-1-1(2x23) *cx-1(23x1)
           ;;                     + ctransferm-1-2(2x2) *cx-2(2x1);
@@ -770,7 +776,7 @@ Solutions are sorted from least to greatest Hamming weight."
       (message "5x5 Solution computation done.")
       solution-list)))
 
-(defun 5x5-solve-suggest (&optional n)
+(defun 5x5-solve-suggest (&optional _n)
   "Suggest to the user where to click.
 
 Argument N is ignored."
index e3854b55a1448244d72e9cc487fc737a08c7d16b..61b0878b1c55b51125771324394703394141b342 100644 (file)
@@ -1,4 +1,4 @@
-;;; blackbox.el --- blackbox game in Emacs Lisp
+;;; blackbox.el --- blackbox game in Emacs Lisp  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1985-1987, 1992, 2001-2021 Free Software Foundation,
 ;; Inc.
index 5255d81e5b1d5a9f1907af6cdefdbf03fe92bd79..be35daf4da85f1dc7425b0832df85f5231429cd2 100644 (file)
@@ -1,4 +1,4 @@
-;;; cookie1.el --- retrieve random phrases from fortune cookie files
+;;; cookie1.el --- retrieve random phrases from fortune cookie files  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1993, 2001-2021 Free Software Foundation, Inc.
 
@@ -177,11 +177,12 @@ Argument REQUIRE-MATCH non-nil forces a matching cookie."
   "Randomly permute the elements of VECTOR (all permutations equally likely)."
   (let ((len (length vector))
        j temp)
-    (dotimes (i len vector)
+    (dotimes (i len)
       (setq j (+ i (random (- len i)))
            temp (aref vector i))
       (aset vector i (aref vector j))
-      (aset vector j temp))))
+      (aset vector j temp))
+    vector))
 
 (define-obsolete-function-alias 'shuffle-vector 'cookie-shuffle-vector "24.4")
 
@@ -204,9 +205,10 @@ If called interactively, or if DISPLAY is non-nil, display a list of matches."
          (cookie-table-symbol (intern phrase-file cookie-cache))
          (string-table (symbol-value cookie-table-symbol))
          (matches nil))
-    (and (dotimes (i (length string-table) matches)
-           (and (string-match-p regexp (aref string-table i))
-                (setq matches (cons (aref string-table i) matches))))
+    (dotimes (i (length string-table))
+      (and (string-match-p regexp (aref string-table i))
+           (setq matches (cons (aref string-table i) matches))))
+    (and matches
          (setq matches (sort matches 'string-lessp)))
     (and display
          (if matches
index 028f04c325b677b4a03696fc6ce9a119cf08c2b1..46fd852b4c5b53f74bf17149763d565198126eb0 100644 (file)
@@ -1,4 +1,4 @@
-;;; doctor.el --- psychological help for frustrated users
+;;; doctor.el --- psychological help for frustrated users  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1985, 1987, 1994, 1996, 2000-2021 Free Software
 ;; Foundation, Inc.
index 1c2c24ad75af1f6f6d671132f6aa9a80d57f2bec..c6aef027e5f84d843bc3b8a91016f181a9b39fa3 100644 (file)
@@ -1,4 +1,4 @@
-;;; gametree.el --- manage game analysis trees in Emacs
+;;; gametree.el --- manage game analysis trees in Emacs  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1997, 1999, 2001-2021 Free Software Foundation, Inc.
 
index f6e5fcd36759870775e28500c7179638f5126bac..ac28fba10a495e0768b631b72451b9700854cffa 100644 (file)
@@ -1,4 +1,4 @@
-;;; hanoi.el --- towers of hanoi in Emacs
+;;; hanoi.el --- towers of hanoi in Emacs  -*- lexical-binding: t -*-
 
 ;; Author: Damon Anton Permezel
 ;; Maintainer: emacs-devel@gnu.org
index 70b6a01a01705939ad1a7b6dd9d7bb8cc16e648a..19e4e399ff37e5f3d0a2fe3421adf683010e709a 100644 (file)
@@ -1,4 +1,4 @@
-;;; zone.el --- idle display hacks
+;;; zone.el --- idle display hacks  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2000-2021 Free Software Foundation, Inc.
 
@@ -128,14 +128,17 @@ If the element is a function or a list of a function and a number,
       (let ((pgm (elt zone-programs (random (length zone-programs))))
             (ct (and f (frame-parameter f 'cursor-type)))
             (show-trailing-whitespace nil)
-            (restore (list '(kill-buffer outbuf))))
+            restore)
         (when ct
-          (modify-frame-parameters f '((cursor-type . (bar . 0))))
-          (setq restore (cons '(modify-frame-parameters
-                                f (list (cons 'cursor-type ct)))
-                              restore)))
+          (modify-frame-parameters f '((cursor-type . (bar . 0)))))
         ;; Make `restore' a self-disabling one-shot thunk.
-        (setq restore `(lambda () ,@restore (setq restore nil)))
+        (setq restore
+              (lambda ()
+                (when ct
+                  (modify-frame-parameters
+                   f (list (cons 'cursor-type ct))))
+                (kill-buffer outbuf)
+                (setq restore nil)))
         (condition-case nil
             (progn
               (message "Zoning... (%s)" pgm)
@@ -419,7 +422,7 @@ If the element is a function or a list of a function and a number,
 (defsubst zone-replace-char (count del-count char-as-string new-value)
   (delete-char (or del-count (- count)))
   (aset char-as-string 0 new-value)
-  (dotimes (i count) (insert char-as-string)))
+  (dotimes (_ count) (insert char-as-string)))
 
 (defsubst zone-park/sit-for (pos seconds)
   (let ((p (point)))
@@ -460,7 +463,7 @@ If the element is a function or a list of a function and a number,
     (let ((nl (- height (count-lines (point-min) (point)))))
       (when (> nl 0)
        (setq line (concat line "\n"))
-        (dotimes (i nl)
+        (dotimes (_ nl)
          (insert line))))
     (goto-char start)
     (recenter 0)
diff --git a/test/lisp/play/cookie1-resources/cookies b/test/lisp/play/cookie1-resources/cookies
new file mode 100644 (file)
index 0000000..7bf569f
--- /dev/null
@@ -0,0 +1,8 @@
+This fortune intentionally left blank.
+%
+This fortune intentionally not included.
+%
+This fortune intentionally says nothing.
+%
+This fortune is false.
+%
diff --git a/test/lisp/play/cookie1-tests.el b/test/lisp/play/cookie1-tests.el
new file mode 100644 (file)
index 0000000..d63ecb9
--- /dev/null
@@ -0,0 +1,40 @@
+;;; fortune-tests.el --- Tests for fortune.el  -*- lexical-binding: t -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;;; Code:
+
+(require 'ert)
+(require 'ert-x)
+(require 'cookie1)
+
+(ert-deftest cookie1-tests-cookie ()
+  (let ((fortune-file (ert-resource-file "cookies")))
+    (should (string-match "\\`This fortune"
+                          (cookie fortune-file)))))
+
+(ert-deftest cookie1-testss-cookie-apropos ()
+  (let ((fortune-file (ert-resource-file "cookies")))
+    (should (string-match "\\`This fortune"
+                          (car (cookie-apropos "false" fortune-file))))
+    (should (= (length (cookie-apropos "false" fortune-file)) 1))))
+
+(provide 'fortune-tests)
+;;; fortune-tests.el ends here