lint: Refine description start check logic.

Fix linter warnings for the following:

 - packages that belong to some programming language or ecosystem,
 e.g. python-foo or texlive-bar,
 - packages whose names end in a version distinction, e.g. wlroots-0.16 and
 - packages where the software's real name contains an underscore `_'
 character where our package name replaced that with a hyphen `-',
 e.g. wpa_supplicant and wpa-supplicant-minimal.

* guix/lint.scm (check-description-style)[check-proper-start]: Add conditions.
* tests/lint.scm: New tests.

Change-Id: Ifc9f5cda04db59e460e287cd93afae89c7f17e3c
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
Gabriel Wicki 2024-12-02 23:35:09 +01:00 committed by Ludovic Courtès
parent dac3011477
commit 00879f94ee
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
2 changed files with 43 additions and 9 deletions

View file

@ -14,6 +14,7 @@
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2021-2023 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 Brice Waegeneire <brice@waegenei.re>
;;; Copyright © 2024 Gabriel Wicki <gabriel@erlikon.ch>
;;;
;;; This file is part of GNU Guix.
;;;
@ -437,15 +438,23 @@ (define (check-quotes description)
'()))
(define (check-proper-start description)
(if (or (string-null? description)
(properly-starts-sentence? description)
(string-prefix-ci? (package-name package) description))
'()
(list
(make-warning
package
(G_ "description should start with an upper-case letter or digit")
#:field 'description))))
(let* ((initial
(string-take description
(or (string-index description #\space)
0)))
(first-word
(regexp-substitute/global #f "_" initial
'pre "-" 'post)))
(if (or (string-null? description)
(properly-starts-sentence? description)
(string-prefix-ci? first-word (package-name package))
(string-suffix-ci? first-word (package-name package)))
'()
(list
(make-warning
package
(G_ "description should start with an upper-case letter or digit")
#:field 'description)))))
(define (check-end-of-sentence-space description)
"Check that an end-of-sentence period is followed by two spaces."

View file

@ -11,6 +11,7 @@
;;; Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2021 Xinglu Chen <public@yoctocell.xyz>
;;; Copyright © 2021, 2023 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2024 Gabriel Wicki <gabriel@erlikon.ch>
;;;
;;; This file is part of GNU Guix.
;;;
@ -132,6 +133,30 @@ (define (warning-contains? str warnings)
(description "x is a dummy package."))))
(check-description-style pkg)))
(test-equal "description: may start with beginning of package name"
'()
(let ((pkg (dummy-package "xyz-0.1"
(description "xyz is a dummy package."))))
(check-description-style pkg)))
(test-equal "description: may start with end of package name"
'()
(let ((pkg (dummy-package "foobar-xyz"
(description "xyz is a dummy package."))))
(check-description-style pkg)))
(test-equal "description: may start with non-hyphenated package name"
'()
(let ((pkg (dummy-package "foobar-xyz-minimal"
(description "foobar_xyz is a dummy package."))))
(check-description-style pkg)))
(test-equal "description: may start with end of package name"
'()
(let ((pkg (dummy-package "foo-bar"
(description "bar is some thing in foo."))))
(check-description-style pkg)))
(test-equal "description: two spaces after end of sentence"
"sentences in description should be followed by two spaces; possible infraction at 3"
(single-lint-warning-message