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>master
parent
a1d0610f83
commit
babd39e843
|
@ -20,6 +20,7 @@
|
||||||
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
|
;;; Copyright © 2023 Janneke Nieuwenhuizen <janneke@gnu.org>
|
||||||
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
|
;;; Copyright © 2023 Zheng Junjie <873216071@qq.com>
|
||||||
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
|
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
|
||||||
|
;;; Copyright © 2024 Herman Rimm <herman@rimm.ee>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -38,6 +39,7 @@
|
||||||
|
|
||||||
(define-module (guix utils)
|
(define-module (guix utils)
|
||||||
#:use-module (guix config)
|
#:use-module (guix config)
|
||||||
|
#:autoload (guix read-print) (object->string*)
|
||||||
#:use-module (srfi srfi-1)
|
#:use-module (srfi srfi-1)
|
||||||
#:use-module (srfi srfi-11)
|
#:use-module (srfi srfi-11)
|
||||||
#:use-module (srfi srfi-26)
|
#:use-module (srfi srfi-26)
|
||||||
|
@ -145,6 +147,7 @@
|
||||||
go-to-location
|
go-to-location
|
||||||
edit-expression
|
edit-expression
|
||||||
delete-expression
|
delete-expression
|
||||||
|
insert-expression
|
||||||
|
|
||||||
filtered-port
|
filtered-port
|
||||||
decompressed-port
|
decompressed-port
|
||||||
|
@ -502,6 +505,14 @@ the trailing line is included in the edited expression."
|
||||||
"Delete the expression specified by SOURCE-PROPERTIES."
|
"Delete the expression specified by SOURCE-PROPERTIES."
|
||||||
(edit-expression source-properties (const "") #:include-trailing-newline? #t))
|
(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.
|
;;; Keyword arguments.
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
|
;;; Copyright © 2021 Simon Tournier <zimon.toutoune@gmail.com>
|
||||||
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
|
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
|
||||||
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
|
;;; Copyright © 2023 Foundation Devices, Inc. <hello@foundationdevices.com>
|
||||||
|
;;; Copyright © 2024 Herman Rimm <herman@rimm.ee>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -274,6 +275,19 @@ skip these tests."
|
||||||
string-reverse)
|
string-reverse)
|
||||||
(call-with-input-file temp-file get-string-all)))
|
(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"
|
(test-equal "string-distance"
|
||||||
'(0 1 1 5 5)
|
'(0 1 1 5 5)
|
||||||
(list
|
(list
|
||||||
|
|
Reference in New Issue