From 574e847b8ea692aeea051d487cc95cec1257aba7 Mon Sep 17 00:00:00 2001 From: Eric Bavier Date: Wed, 22 Oct 2014 13:47:01 -0500 Subject: guix: lint: Check for proper end-of-sentence space. * guix/scripts/lint.scm (start-with-capital-letter?): Handle empty strings. (check-description-style): New check for end-of-sentence space. * tests/lint.scm: Test it. --- guix/scripts/lint.scm | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'guix/scripts') diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm index edd5bb9c9a..7b530fa5ac 100644 --- a/guix/scripts/lint.scm +++ b/guix/scripts/lint.scm @@ -25,6 +25,8 @@ (define-module (guix scripts lint) #:use-module (guix utils) #:use-module (gnu packages) #:use-module (ice-9 match) + #:use-module (ice-9 regex) + #:use-module (ice-9 format) #:use-module (srfi srfi-1) #:use-module (srfi srfi-9) #:use-module (srfi srfi-11) @@ -75,17 +77,41 @@ (define (list-checkers-and-exit) (exit 0)) (define (start-with-capital-letter? s) - (char-set-contains? char-set:upper-case (string-ref s 0))) + (and (not (string-null? s)) + (char-set-contains? char-set:upper-case (string-ref s 0)))) (define (check-description-style package) ;; Emit a warning if stylistic issues are found in the description of PACKAGE. - (let ((description (package-description package))) - (when (and (string? description) - (not (string-null? description)) - (not (start-with-capital-letter? description))) - (emit-warning package - "description should start with an upper-case letter" - 'description)))) + (define (check-starts-with-upper-case description) + (unless (start-with-capital-letter? description) + (emit-warning package + "description should start with an upper-case letter" + 'description))) + + (define (check-end-of-sentence-space description) + "Check that an end-of-sentence period is followed by two spaces." + (let ((infractions + (reverse (fold-matches + "\\. [A-Z]" description '() + (lambda (m r) + ;; Filter out matches of common abbreviations. + (if (find (lambda (s) + (string-suffix-ci? s (match:prefix m))) + '("i.e" "e.g" "a.k.a" "resp")) + r (cons (match:start m) r))))))) + (unless (null? infractions) + (emit-warning package + (format #f "sentences in description should be followed ~ +by two spaces; possible infraction~p at ~{~a~^, ~}" + (length infractions) + infractions) + 'description)))) + + (let ((description (package-description package))) + (when (string? description) + (begin + (check-starts-with-upper-case 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 -- cgit v1.2.3