diff options
-rw-r--r-- | guix/scripts/lint.scm | 42 | ||||
-rw-r--r-- | tests/lint.scm | 18 |
2 files changed, 37 insertions, 23 deletions
diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm index 5f1675f83f..5432069858 100644 --- a/guix/scripts/lint.scm +++ b/guix/scripts/lint.scm @@ -76,9 +76,8 @@ %checkers) (exit 0)) -(define (start-with-capital-letter? s) - (and (not (string-null? s)) - (char-set-contains? char-set:upper-case (string-ref s 0)))) +(define (properly-starts-sentence? s) + (string-match "^[[:upper:][:digit:]]" s)) (define (check-description-style package) ;; Emit a warning if stylistic issues are found in the description of PACKAGE. @@ -88,10 +87,10 @@ "description should not be empty" 'description))) - (define (check-starts-with-upper-case description) - (unless (start-with-capital-letter? description) + (define (check-proper-start description) + (unless (properly-starts-sentence? description) (emit-warning package - "description should start with an upper-case letter" + "description should start with an upper-case letter or digit" '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))) (when (string? description) - (begin - (check-not-empty description) - (check-starts-with-upper-case description) - (check-end-of-sentence-space description))))) + (check-not-empty description) + (check-proper-start description) + (check-end-of-sentence-space description)))) (define (check-inputs-should-be-native package) ;; Emit a warning if some inputs of PACKAGE are likely to belong to its @@ -162,12 +160,11 @@ by two spaces; possible infraction~p at ~{~a~^, ~}" "synopsis should be less than 80 characters long" 'synopsis))) - (define (check-synopsis-start-upper-case synopsis) - (when (and (not (string-null? synopsis)) - (not (start-with-capital-letter? synopsis))) - (emit-warning package - "synopsis should start with an upper-case letter" - 'synopsis))) + (define (check-proper-start synopsis) + (unless (properly-starts-sentence? synopsis) + (emit-warning package + "synopsis should start with an upper-case letter or digit" + 'synopsis))) (define (check-start-with-package-name synopsis) (when (string-prefix-ci? (package-name package) synopsis) @@ -176,14 +173,13 @@ by two spaces; possible infraction~p at ~{~a~^, ~}" 'synopsis))) (let ((synopsis (package-synopsis package))) - (begin - (check-not-empty synopsis) - (check-synopsis-start-upper-case synopsis) - (check-final-period synopsis) - (check-start-article synopsis) - (check-start-with-package-name synopsis) - (check-synopsis-length synopsis))))) (when (string? synopsis) + (check-not-empty synopsis) + (check-proper-start synopsis) + (check-final-period synopsis) + (check-start-article synopsis) + (check-start-with-package-name synopsis) + (check-synopsis-length synopsis)))) (define (check-patches package) ;; Emit a warning if the patches requires by PACKAGE are badly named. diff --git a/tests/lint.scm b/tests/lint.scm index b732a1826a..9557887e4f 100644 --- a/tests/lint.scm +++ b/tests/lint.scm @@ -63,6 +63,15 @@ (check-description-style pkg)))) "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" (->bool (string-contains (call-with-warnings @@ -100,6 +109,15 @@ (check-synopsis-style pkg)))) "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" (->bool (string-contains (call-with-warnings |