~ruther/guix-local

8202a513138d7b7f57878bf8f50b928e2d4094c5 — Cyril Roelandt 11 years ago 5622953
guix lint: check whether descriptions and synopses start with an upper-case letter.

* guix/scripts/lint.scm (check-description-style,
  check-synopsis-start-upper-case): New methods.
* tests/lint.scm ("description: does not start with an upper-case letter",
  "synopsis: does not start with an upper-case letter"): New tests.
2 files changed, 44 insertions(+), 0 deletions(-)

M guix/scripts/lint.scm
M tests/lint.scm
M guix/scripts/lint.scm => guix/scripts/lint.scm +26 -0
@@ 29,6 29,7 @@
  #:use-module (srfi srfi-11)
  #:use-module (srfi srfi-37)
  #:export (guix-lint
            check-description-style
            check-inputs-should-be-native
            check-patches
            check-synopsis-style))


@@ 110,6 111,19 @@ Run a set of checkers on the specified package; if none is specified, run the ch
            %checkers)
  (exit 0))

(define (start-with-capital-letter? 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-inputs-should-be-native package)
  ;; Emit a warning if some inputs of PACKAGE are likely to belong to its
  ;; native inputs.


@@ 146,9 160,17 @@ Run a set of checkers on the specified package; if none is specified, run the ch
                     "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)))

 (let ((synopsis (package-synopsis package)))
   (if (string? synopsis)
       (begin
        (check-synopsis-start-upper-case synopsis)
        (check-final-period synopsis)
        (check-start-article synopsis)
        (check-synopsis-length synopsis)))))


@@ 176,6 198,10 @@ Run a set of checkers on the specified package; if none is specified, run the ch
(define %checkers
  (list
   (lint-checker
     (name        "description")
     (description "Validate package descriptions")
     (check       check-description-style))
   (lint-checker
     (name        "inputs-should-be-native")
     (description "Identify inputs that should be native inputs")
     (check       check-inputs-should-be-native))

M tests/lint.scm => tests/lint.scm +18 -0
@@ 44,6 44,24 @@
      (thunk))
    (get-output-string port)))

(test-assert "description: does not start with an upper-case letter"
  (->bool
   (string-contains (call-with-warnings
                      (lambda ()
                        (let ((pkg (dummy-package "x"
                                     (description "bad description."))))
                          (check-description-style pkg))))
                    "description should start with an upper-case letter")))

(test-assert "synopsis: does not start with an upper-case letter"
  (->bool
   (string-contains (call-with-warnings
                      (lambda ()
                        (let ((pkg (dummy-package "x"
                                     (synopsis "bad synopsis."))))
                          (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