~ruther/guix-local

689db38e3467f66725e8841eac72225110a75a17 — Alex Kost 9 years ago 2fccc0d
ui: Support Texinfo markup in package synopses.

* guix/ui.scm (package-field-string): New procedure.
(package-description-string): Use it.
(package-synopsis-string): New procedure.
(package->recutils): Use it.
* guix/scripts/lint.scm (check-synopsis-style)[check-texinfo-markup]:
New procedure.  Use it in checks.
* tests/lint.scm: Test it.
* gnu/packages/perl.scm (perl-try-tiny)[synopsis]: Adjust for the
Texinfo markup.
4 files changed, 41 insertions(+), 8 deletions(-)

M gnu/packages/perl.scm
M guix/scripts/lint.scm
M guix/ui.scm
M tests/lint.scm
M gnu/packages/perl.scm => gnu/packages/perl.scm +1 -1
@@ 7684,7 7684,7 @@ Tree::Simple::Visitor::* objects.")
         "068vdbpacfawc3lkfs0b82xxl27h3l0gj14iada3vlwk8rps9yv0"))))
    (build-system perl-build-system)
    (home-page "http://search.cpan.org/dist/Try-Tiny")
    (synopsis "Minimal try/catch with proper preservation of $@")
    (synopsis "Minimal try/catch with proper preservation of $@@")
    (description "This module provides bare bones try/catch/finally statements
that are designed to minimize common mistakes with eval blocks, and nothing
else.")

M guix/scripts/lint.scm => guix/scripts/lint.scm +19 -3
@@ 5,6 5,7 @@
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2016 Danny Milosavljevic <dannym+a@scratchpost.org>
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 347,10 348,25 @@ the synopsis")
                    (_ "synopsis should not start with the package name")
                    'synopsis)))

  (define (check-texinfo-markup synopsis)
    "Check that SYNOPSIS can be parsed as a Texinfo fragment.  If the
markup is valid return a plain-text version of SYNOPSIS, otherwise #f."
    (catch #t
      (lambda () (texi->plain-text synopsis))
      (lambda (keys . args)
        (emit-warning package
                      (_ "Texinfo markup in synopsis is invalid")
                      'synopsis)
        #f)))

  (define checks
    (list check-not-empty check-proper-start check-final-period
          check-start-article check-start-with-package-name
          check-synopsis-length))
    (list check-not-empty
          check-proper-start
          check-final-period
          check-start-article
          check-start-with-package-name
          check-synopsis-length
          check-texinfo-markup))

  (match (package-synopsis package)
    ((? string? synopsis)

M guix/ui.scm => guix/ui.scm +13 -4
@@ 4,7 4,7 @@
;;; Copyright © 2013 Nikita Karetnikov <nikita@karetnikov.org>
;;; Copyright © 2014 Cyril Roelandt <tipecaml@gmail.com>
;;; Copyright © 2014 Cyrill Schenkel <cyrill.schenkel@gmail.com>
;;; Copyright © 2014, 2015 Alex Kost <alezost@gmail.com>
;;; Copyright © 2014, 2015, 2017 Alex Kost <alezost@gmail.com>
;;; Copyright © 2015 David Thompson <davet@gnu.org>
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2016 Roel Janssen <roel@gnu.org>


@@ 81,6 81,7 @@
            fill-paragraph
            texi->plain-text
            package-description-string
            package-synopsis-string
            string->recutils
            package->recutils
            package-specification->name+version+output


@@ 848,10 849,18 @@ converted to a space; sequences of more than one line break are preserved."
  (with-fluids ((%default-port-encoding "UTF-8"))
    (stexi->plain-text (texi-fragment->stexi str))))

(define (package-field-string package field-accessor)
  "Return a plain-text representation of PACKAGE field."
  (and=> (field-accessor package)
         (compose texi->plain-text P_)))

(define (package-description-string package)
  "Return a plain-text representation of PACKAGE description field."
  (and=> (package-description package)
         (compose texi->plain-text P_)))
  (package-field-string package package-description))

(define (package-synopsis-string package)
  "Return a plain-text representation of PACKAGE synopsis field."
  (package-field-string package package-synopsis))

(define (string->recutils str)
  "Return a version of STR where newlines have been replaced by newlines


@@ 914,7 923,7 @@ WIDTH columns."
          (string-map (match-lambda
                       (#\newline #\space)
                       (chr       chr))
                      (or (and=> (package-synopsis p) P_)
                      (or (and=> (package-synopsis-string p) P_)
                          "")))
  (format port "~a~2%"
          (string->recutils

M tests/lint.scm => tests/lint.scm +8 -0
@@ 4,6 4,7 @@
;;; Copyright © 2014, 2015, 2016 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015, 2016 Mathieu Lirzin <mthl@gnu.org>
;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
;;; Copyright © 2017 Alex Kost <alezost@gmail.com>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 167,6 168,13 @@
                        (check-synopsis-style pkg)))
                    "synopsis should not be empty")))

(test-assert "synopsis: valid Texinfo markup"
  (->bool
   (string-contains
    (with-warnings
      (check-synopsis-style (dummy-package "x" (synopsis "Bad $@ texinfo"))))
    "Texinfo markup in synopsis is invalid")))

(test-assert "synopsis: does not start with an upper-case letter"
  (->bool
   (string-contains (with-warnings