lint: Suggest @code instead of quotes.
authorLudovic Courtès <ludo@gnu.org>
Wed, 19 Oct 2016 11:55:25 +0000 (13:55 +0200)
committerLudovic Courtès <ludo@gnu.org>
Wed, 19 Oct 2016 13:54:10 +0000 (15:54 +0200)
* 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.

guix/scripts/lint.scm
tests/lint.scm

index b3ec6d6..d6281ea 100644 (file)
@@ -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.
index d692b42..fa2d19b 100644 (file)
@@ -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