From 68fa28b3c3f6cca4485575b6dfa418be656443e7 Mon Sep 17 00:00:00 2001 From: Ludovic Courtès Date: Thu, 4 May 2023 16:41:40 +0200 Subject: style: Make 'safe' policy less conservative. Previously, a mere (arguments '(#:tests? #f)) would lead guix style -S inputs --input-simplification=safe to bail out. It now recognizes such trivial argument lists and proceeds. * guix/scripts/style.scm (trivial-package-arguments?): New procedure. (simplify-package-inputs): Use it in the 'safe case instead of 'null?'. * tests/style.scm ("input labels, 'safe' policy, trivial arguments"): New test. --- guix/scripts/style.scm | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'guix/scripts') diff --git a/guix/scripts/style.scm b/guix/scripts/style.scm index 8e89a58948..00c7d3f90c 100644 --- a/guix/scripts/style.scm +++ b/guix/scripts/style.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2021-2022 Ludovic Courtès +;;; Copyright © 2021-2023 Ludovic Courtès ;;; ;;; This file is part of GNU Guix. ;;; @@ -242,6 +242,17 @@ (define (absolute-location loc) (location-line loc) (location-column loc))) +(define (trivial-package-arguments? package) + "Return true if PACKAGE has zero arguments or only \"trivial\" arguments +guaranteed not to refer to input labels." + (let loop ((arguments (package-arguments package))) + (match arguments + (() + #t) + (((? keyword?) value rest ...) + (and (or (boolean? value) (number? value) (string? value)) + (loop rest)))))) + (define* (simplify-package-inputs package #:key (policy 'silent) (edit-expression edit-expression)) @@ -276,7 +287,7 @@ (define matches? ;; If PACKAGE has no arguments, labels are known ;; to have no effect: this is a "safe" change, but ;; it may change the derivation. - (if (null? (package-arguments package)) + (if (trivial-package-arguments? package) (const #t) label-matches?)) ('always -- cgit v1.2.3