~ruther/guix-local

4bb54cc42ff5653fe59f5a8ebf39515ba1840a6d — Ludovic Courtès 9 years ago 4534d85
lint: Suggest @code instead of quotes.

* guix/scripts/lint.scm (%quoted-identifier-rx): New variable.
(check-description-style)[check-quotes]: New procedure.
Use it.
* tests/lint.scm ("description: suggest ornament instead of quotes"):
New test.
2 files changed, 23 insertions(+), 0 deletions(-)

M guix/scripts/lint.scm
M tests/lint.scm
M guix/scripts/lint.scm => guix/scripts/lint.scm +15 -0
@@ 142,6 142,10 @@ monad."
  "Return #t if S starts with what looks like an abbreviation or acronym."
  (string-match "^[A-Z][A-Z0-9]+\\>" s))

(define %quoted-identifier-rx
  ;; A quoted identifier, like 'this'.
  (make-regexp "['`][[:graph:]]+'"))

(define (check-description-style package)
  ;; Emit a warning if stylistic issues are found in the description of PACKAGE.
  (define (check-not-empty description)


@@ 173,6 177,16 @@ trademark sign '~a' at ~d")
                     'description))
      (else #t)))

  (define (check-quotes description)
    "Check whether DESCRIPTION contains single quotes and suggest @code."
    (when (regexp-exec %quoted-identifier-rx description)
      (emit-warning package

                    ;; TRANSLATORS: '@code' is Texinfo markup and must be kept
                    ;; as is.
                    (_ "use @code or similar ornament instead of quotes")
                    'description)))

  (define (check-proper-start description)
    (unless (or (properly-starts-sentence? description)
                (string-prefix-ci? (package-name package) description))


@@ 203,6 217,7 @@ by two spaces; possible infraction~p at ~{~a~^, ~}")
    (if (string? description)
        (begin
          (check-not-empty description)
          (check-quotes description)
          (check-trademarks description)
          ;; Use raw description for this because Texinfo rendering
          ;; automatically fixes end of sentence space.

M tests/lint.scm => tests/lint.scm +8 -0
@@ 218,6 218,14 @@ string) on HTTP requests."
                             (check-description-style pkg)))
                         "should not contain trademark sign"))))

(test-assert "description: suggest ornament instead of quotes"
  (->bool
   (string-contains (with-warnings
                      (let ((pkg (dummy-package "x"
                                   (description "This is a 'quoted' thing."))))
                        (check-description-style pkg)))
                    "use @code")))

(test-assert "synopsis: not a string"
  (->bool
   (string-contains (with-warnings