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>
This commit is contained in:
Herman Rimm 2024-02-20 21:45:11 +01:00 committed by Ludovic Courtès
parent a1d0610f83
commit babd39e843
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
2 changed files with 25 additions and 0 deletions

View File

@ -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.

View File

@ -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