From 8bee3a59108f09d362be46e25f91e86e6b918d84 Mon Sep 17 00:00:00 2001 From: Ricardo Wurmus Date: Wed, 27 Nov 2024 14:08:34 +0100 Subject: [PATCH] import: utils: Wrap function names in @code. * guix/import/utils.scm (beautify-description): Adjust to include "()" in @code wrapper. * tests/import-utils.scm ("beautify-description: wrap function names in @code"): New test. Change-Id: I2b58728571a18ce8302c1b6f98b0c16dbe5931c3 --- guix/import/utils.scm | 18 ++++++++++++------ tests/import-utils.scm | 6 +++++- 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/guix/import/utils.scm b/guix/import/utils.scm index faeec60845..ccf18a7bf9 100644 --- a/guix/import/utils.scm +++ b/guix/import/utils.scm @@ -2,7 +2,7 @@ ;;; Copyright © 2012, 2013, 2018, 2019, 2020, 2023 Ludovic Courtès ;;; Copyright © 2016 Jelle Licht ;;; Copyright © 2016 David Craven -;;; Copyright © 2017, 2019, 2020, 2022, 2023 Ricardo Wurmus +;;; Copyright © 2017, 2019, 2020, 2022, 2023, 2024 Ricardo Wurmus ;;; Copyright © 2018 Oleg Pykhalov ;;; Copyright © 2019 Robert Vollmert ;;; Copyright © 2020 Helio Machado <0x2b3bfa0+guix@googlemail.com> @@ -338,15 +338,21 @@ (define* (beautify-description description #:optional (length 80)) ;; Escape single @ to prevent it from being understood as ;; invalid Texinfo syntax. (cut regexp-substitute/global #f "@" <> 'pre "@@" 'post) - ;; Wrap camelCase or PascalCase words in @code{...}. + ;; Wrap camelCase or PascalCase words or text followed + ;; immediately by "()" in @code{...}. (lambda (word) - (let ((pattern (make-regexp "([A-Z][a-z]+[A-Z]|[a-z]+[A-Z])"))) + (let ((pattern + (make-regexp + "([A-Z][a-z]+[A-Z]|[a-z]+[A-Z]|.+\\(\\))"))) (match (list-matches pattern word) (() word) ((m . rest) - ;; Do not include leading or trailing punctuation. - (let* ((last-text (or (and=> (string-skip-right word char-set:punctuation) 1+) - (string-length word))) + ;; Do not include leading or trailing punctuation, + ;; unless its "()". + (let* ((last-text (if (string-suffix? "()" (match:substring m 1)) + (string-length (match:substring m 1)) + (or (and=> (string-skip-right word char-set:punctuation) 1+) + (string-length word)))) (inner (substring word (match:start m) last-text)) (pre (string-take word (match:start m))) (post (substring word last-text (string-length word)))) diff --git a/tests/import-utils.scm b/tests/import-utils.scm index bec38b0c30..607349203c 100644 --- a/tests/import-utils.scm +++ b/tests/import-utils.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2015, 2017, 2022, 2023 Ricardo Wurmus +;;; Copyright © 2015, 2017, 2022, 2023, 2024 Ricardo Wurmus ;;; Copyright © 2016 Ben Woodcroft ;;; Copyright © 2020 Martin Becze ;;; Copyright © 2021 Sarah Morgensen @@ -65,6 +65,10 @@ (define-module (test-import-utils) "Code (@code{DelayedMatrix}, @code{MaMa}, or @code{MeMe}) should be wrapped." (beautify-description "Code (DelayedMatrix, MaMa, or MeMe) should be wrapped.")) +(test-equal "beautify-description: wrap function names in @code" + "The main functions are: @code{haplo.em()} and @code{haplo.power()}; FYI." + (beautify-description "The main functions are: haplo.em() and haplo.power(); FYI.")) + (test-equal "license->symbol" 'license:lgpl2.0 (license->symbol license:lgpl2.0))