~ruther/guix-local

babd39e84389c544e8dab44be8ddec57e52709c9 — Herman Rimm 2 years ago a1d0610
utils: Add insert-expression procedure.

* guix/utils.scm (define-module): Use (guix read-print) and export
(insert-expression).
(insert-expression): Add procedure.
* tests/utils.scm ("insert-expression"): Add test.

Change-Id: I971a43a78aa6ecaaef33c1a7a0db4b287eb85036
Signed-off-by: Ludovic Courtès <ludo@gnu.org>
2 files changed, 25 insertions(+), 0 deletions(-)

M guix/utils.scm
M tests/utils.scm
M guix/utils.scm => guix/utils.scm +11 -0
@@ 20,6 20,7 @@
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
;;; Copyright © 2024 Herman Rimm <herman@rimm.ee>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 38,6 39,7 @@

(define-module (guix utils)
  #:use-module (guix config)
  #:autoload   (guix read-print) (object->string*)
  #:use-module (srfi srfi-1)
  #:use-module (srfi srfi-11)
  #:use-module (srfi srfi-26)


@@ 145,6 147,7 @@
            go-to-location
            edit-expression
            delete-expression
            insert-expression

            filtered-port
            decompressed-port


@@ 502,6 505,14 @@ the trailing line is included in the edited expression."
  "Delete the expression specified by SOURCE-PROPERTIES."
  (edit-expression source-properties (const "") #:include-trailing-newline? #t))

(define (insert-expression source-properties expr)
  "Insert EXPR before the top-level expression specified by
SOURCE-PROPERTIES."
  (let* ((expr (object->string* expr 0))
         (insert (lambda (str)
                   (string-append expr "\n\n" str))))
    (edit-expression source-properties insert)))


;;;
;;; Keyword arguments.

M tests/utils.scm => tests/utils.scm +14 -0
@@ 5,6 5,7 @@
;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
;;; Copyright © 2024 Herman Rimm <herman@rimm.ee>
;;;
;;; This file is part of GNU Guix.
;;;


@@ 274,6 275,19 @@ skip these tests."
                     string-reverse)
    (call-with-input-file temp-file get-string-all)))

(test-equal "insert-expression"
  "(define-public package-1\n  'package)\n
(define-public package-2\n  'package)\n"
  (begin
    (call-with-output-file temp-file
      (lambda (port)
        (display "(define-public package-2\n  'package)\n" port)))
    (insert-expression `((filename . ,temp-file)
                         (line     . 0)
                         (column   . 0))
                       `(define-public package-1 'package))
    (call-with-input-file temp-file get-string-all)))

(test-equal "string-distance"
  '(0 1 1 5 5)
  (list