From mboxrd@z Thu Jan 1 00:00:00 1970 From: Eric Bavier Subject: [PATCH 3/5] guix: lint: Check for proper end-of-sentence space. Date: Fri, 24 Oct 2014 00:06:06 -0500 Message-ID: <87wq7qxdj5.fsf@member.fsf.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36636) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XhX2E-0001AV-Nh for guix-devel@gnu.org; Fri, 24 Oct 2014 01:03:40 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XhX29-0003SN-0M for guix-devel@gnu.org; Fri, 24 Oct 2014 01:03:34 -0400 Received: from mail-yh0-x236.google.com ([2607:f8b0:4002:c01::236]:60304) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XhX28-0003SH-RU for guix-devel@gnu.org; Fri, 24 Oct 2014 01:03:28 -0400 Received: by mail-yh0-f54.google.com with SMTP id 29so2852880yhl.41 for ; Thu, 23 Oct 2014 22:03:28 -0700 (PDT) Received: from cooper.gmail.com (chippewa-nat.cray.com. [136.162.34.1]) by mx.google.com with ESMTPSA id d5sm1865931ioj.30.2014.10.23.22.03.27 for (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 23 Oct 2014 22:03:27 -0700 (PDT) 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: guix-devel@gnu.org --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=0003-guix-lint-Check-for-proper-end-of-sentence-space.patch >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)) + (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 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"))) + (test-assert "synopsis: does not start with an upper-case letter" (->bool (string-contains (call-with-warnings -- 1.7.9.5 --=-=-= -- Eric Bavier --=-=-=--