guix: lint: Allow digits at start of synopsis or description.

* guix/scripts/lint.scm (start-with-capital-letter?): Rename too...
  (properly-starts-sentence?): Rewrite with regex and add digits.
  (check-description-style, check-synopsis-style): Use it.
* tests/lint.scm: Add tests.
This commit is contained in:
Eric Bavier 2014-10-25 11:29:34 -05:00
parent 334c43e354
commit 903581f971
2 changed files with 37 additions and 23 deletions

View File

@ -76,9 +76,8 @@
%checkers) %checkers)
(exit 0)) (exit 0))
(define (start-with-capital-letter? s) (define (properly-starts-sentence? s)
(and (not (string-null? s)) (string-match "^[[:upper:][:digit:]]" s))
(char-set-contains? char-set:upper-case (string-ref s 0))))
(define (check-description-style package) (define (check-description-style package)
;; Emit a warning if stylistic issues are found in the description of PACKAGE. ;; Emit a warning if stylistic issues are found in the description of PACKAGE.
@ -88,10 +87,10 @@
"description should not be empty" "description should not be empty"
'description))) 'description)))
(define (check-starts-with-upper-case description) (define (check-proper-start description)
(unless (start-with-capital-letter? description) (unless (properly-starts-sentence? description)
(emit-warning package (emit-warning package
"description should start with an upper-case letter" "description should start with an upper-case letter or digit"
'description))) 'description)))
(define (check-end-of-sentence-space description) (define (check-end-of-sentence-space description)
@ -115,10 +114,9 @@ by two spaces; possible infraction~p at ~{~a~^, ~}"
(let ((description (package-description package))) (let ((description (package-description package)))
(when (string? description) (when (string? description)
(begin
(check-not-empty description) (check-not-empty description)
(check-starts-with-upper-case description) (check-proper-start description)
(check-end-of-sentence-space description))))) (check-end-of-sentence-space description))))
(define (check-inputs-should-be-native package) (define (check-inputs-should-be-native package)
;; Emit a warning if some inputs of PACKAGE are likely to belong to its ;; Emit a warning if some inputs of PACKAGE are likely to belong to its
@ -162,11 +160,10 @@ by two spaces; possible infraction~p at ~{~a~^, ~}"
"synopsis should be less than 80 characters long" "synopsis should be less than 80 characters long"
'synopsis))) 'synopsis)))
(define (check-synopsis-start-upper-case synopsis) (define (check-proper-start synopsis)
(when (and (not (string-null? synopsis)) (unless (properly-starts-sentence? synopsis)
(not (start-with-capital-letter? synopsis)))
(emit-warning package (emit-warning package
"synopsis should start with an upper-case letter" "synopsis should start with an upper-case letter or digit"
'synopsis))) 'synopsis)))
(define (check-start-with-package-name synopsis) (define (check-start-with-package-name synopsis)
@ -176,14 +173,13 @@ by two spaces; possible infraction~p at ~{~a~^, ~}"
'synopsis))) 'synopsis)))
(let ((synopsis (package-synopsis package))) (let ((synopsis (package-synopsis package)))
(begin (when (string? synopsis)
(check-not-empty synopsis) (check-not-empty synopsis)
(check-synopsis-start-upper-case synopsis) (check-proper-start synopsis)
(check-final-period synopsis) (check-final-period synopsis)
(check-start-article synopsis) (check-start-article synopsis)
(check-start-with-package-name synopsis) (check-start-with-package-name synopsis)
(check-synopsis-length synopsis))))) (check-synopsis-length synopsis))))
(when (string? synopsis)
(define (check-patches package) (define (check-patches package)
;; Emit a warning if the patches requires by PACKAGE are badly named. ;; Emit a warning if the patches requires by PACKAGE are badly named.

View File

@ -63,6 +63,15 @@
(check-description-style pkg)))) (check-description-style pkg))))
"description should start with an upper-case letter"))) "description should start with an upper-case letter")))
(test-assert "description: may start with a digit"
(not
(string-contains (call-with-warnings
(lambda ()
(let ((pkg (dummy-package "x"
(description "2-component library."))))
(check-description-style pkg))))
"description should start with an upper-case letter")))
(test-assert "description: two spaces after end of sentence" (test-assert "description: two spaces after end of sentence"
(->bool (->bool
(string-contains (call-with-warnings (string-contains (call-with-warnings
@ -100,6 +109,15 @@
(check-synopsis-style pkg)))) (check-synopsis-style pkg))))
"synopsis should start with an upper-case letter"))) "synopsis should start with an upper-case letter")))
(test-assert "synopsis: may start with a digit"
(not
(string-contains (call-with-warnings
(lambda ()
(let ((pkg (dummy-package "x"
(synopsis "5-dimensional frobnicator"))))
(check-synopsis-style pkg))))
"synopsis should start with an upper-case letter")))
(test-assert "synopsis: ends with a period" (test-assert "synopsis: ends with a period"
(->bool (->bool
(string-contains (call-with-warnings (string-contains (call-with-warnings