From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mark H Weaver Subject: Re: [PATCH 3/5] guix: lint: Check for proper end-of-sentence space. Date: Fri, 24 Oct 2014 13:40:13 -0400 Message-ID: <87oat15ptu.fsf@yeeloong.lan> References: <87wq7qxdj5.fsf@member.fsf.org> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55760) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Xhira-0004SO-An for guix-devel@gnu.org; Fri, 24 Oct 2014 13:41:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XhirT-0006pe-D6 for guix-devel@gnu.org; Fri, 24 Oct 2014 13:41:22 -0400 Received: from world.peace.net ([96.39.62.75]:46511) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XhirT-0006pS-9Q for guix-devel@gnu.org; Fri, 24 Oct 2014 13:41:15 -0400 In-Reply-To: <87wq7qxdj5.fsf@member.fsf.org> (Eric Bavier's message of "Fri, 24 Oct 2014 00:06:06 -0500") List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org To: Eric Bavier Cc: guix-devel@gnu.org Eric Bavier writes: > From 88d05ece4bf30bbed6de51f076cde0301c493123 Mon Sep 17 00:00:00 2001 > From: Eric Bavier > Date: Wed, 22 Oct 2014 13:47:01 -0500 > Subject: [PATCH 3/5] 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 ++++++++++++++++++++++++++++++++++-------- > tests/lint.scm | 9 +++++++++ > 2 files changed, 43 insertions(+), 8 deletions(-) > > diff --git a/guix/scripts/lint.scm b/guix/scripts/lint.scm > index 84d9fe9..e8cc853 100644 > --- a/guix/scripts/lint.scm > +++ b/guix/scripts/lint.scm > @@ -25,6 +25,8 @@ > #: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 @@ > (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 (filter-map > + (lambda (m) > + (and (not > + ;; Filter out matches of common abbrevs. > + (find (lambda (s) > + (string-suffix? s (match:prefix m))) > + '("i.e" "e.g" "a.k.a" "resp"))) > + (match:start m))) > + (list-matches "\\. [A-Z]" description)))) > + (when (not (null? infractions)) (unless (null? infractions)). Also, this should be indented one more column. > + (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))))) 'begin' is not needed here. 'when' and 'unless' include an implicit 'begin'. > > (define (check-inputs-should-be-native package) > ;; Emit a warning if some inputs of PACKAGE are likely to belong to its > diff --git a/tests/lint.scm b/tests/lint.scm > index 62a9df9..2c2a179 100644 > --- a/tests/lint.scm > +++ b/tests/lint.scm > @@ -53,6 +53,15 @@ > (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 > + (lambda () > + (let ((pkg (dummy-package "x" > + (description "Bad. Quite bad.")))) > + (check-description-style pkg)))) > + "sentences in description should be followed by two spaces"))) > + It would be good to add some tests for the "common abbrevs" logic above. Otherwise looks good to me, thanks! Mark