lint: Warn about underscores in package names.

As per section '16.4.2 Package Naming' in the manual, use hyphens
instead of underscores in package names.

* guix/lint.scm (check-name): Check whether the package name contains
underscores.
* tests/lint.scm ("name: use underscore in package name"): New test.

Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Xinglu Chen 2021-04-15 20:31:44 +02:00 committed by Ludovic Courtès
parent 5b35c9adc8
commit c68070e4ee
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 23 additions and 8 deletions

View file

@ -11,6 +11,7 @@
;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com> ;;; Copyright © 2020 Chris Marusich <cmmarusich@gmail.com>
;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com> ;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -81,6 +82,7 @@ (define-module (guix lint)
check-synopsis-style check-synopsis-style
check-derivation check-derivation
check-home-page check-home-page
check-name
check-source check-source
check-source-file-name check-source-file-name
check-source-unstable-tarball check-source-unstable-tarball
@ -173,14 +175,20 @@ (define-record-type* <lint-checker>
(define (check-name package) (define (check-name package)
"Check whether PACKAGE's name matches our guidelines." "Check whether PACKAGE's name matches our guidelines."
(let ((name (package-name package))) (let ((name (package-name package)))
;; Currently checks only whether the name is too short. (cond
(if (and (<= (string-length name) 1) ;; Currently checks only whether the name is too short.
(not (string=? name "r"))) ; common-sense exception ((and (<= (string-length name) 1)
(list (not (string=? name "r"))) ; common-sense exception
(make-warning package (list
(G_ "name should be longer than a single character") (make-warning package
#:field 'name)) (G_ "name should be longer than a single character")
'()))) #:field 'name)))
((string-index name #\_)
(list
(make-warning package
(G_ "name should use hyphens instead of underscores")
#:field 'name)))
(else '()))))
(define (properly-starts-sentence? s) (define (properly-starts-sentence? s)
(string-match "^[(\"'`[:upper:][:digit:]]" s)) (string-match "^[(\"'`[:upper:][:digit:]]" s))

View file

@ -8,6 +8,7 @@
;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il> ;;; Copyright © 2017 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net> ;;; Copyright © 2018, 2019 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com> ;;; Copyright © 2020 Timothy Sample <samplet@ngyro.com>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; ;;;
;;; This file is part of GNU Guix. ;;; This file is part of GNU Guix.
;;; ;;;
@ -270,6 +271,12 @@ (define (warning-contains? str warnings)
(description "Imagine this is Taylor UUCP.")))) (description "Imagine this is Taylor UUCP."))))
(check-synopsis-style pkg))) (check-synopsis-style pkg)))
(test-equal "name: use underscore in package name"
"name should use hyphens instead of underscores"
(single-lint-warning-message
(let ((pkg (dummy-package "under_score")))
(check-name pkg))))
(test-equal "inputs: pkg-config is probably a native input" (test-equal "inputs: pkg-config is probably a native input"
"'pkg-config' should probably be a native input" "'pkg-config' should probably be a native input"
(single-lint-warning-message (single-lint-warning-message