summaryrefslogtreecommitdiff
path: root/guix/lint.scm
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-08-23 22:48:19 +0200
committerLudovic Courtès <ludo@gnu.org>2020-08-23 23:05:16 +0200
commitd10474c38d58bdc676e64336769dc2e00cdfa8ed (patch)
tree9cf8d02f2a892d2e6ad4087cf9e296f9804d3326 /guix/lint.scm
parent68193624d1428836b18e93306f96e78706e082c3 (diff)
downloadguix-patches-d10474c38d58bdc676e64336769dc2e00cdfa8ed.tar
guix-patches-d10474c38d58bdc676e64336769dc2e00cdfa8ed.tar.gz
lint: formatting: Gracefully handle relative file names.
Fixes <https://bugs.gnu.org/42543>. Reported by Jack Hill <jackhill@jackhill.us>. * guix/lint.scm (check-formatting): Always return a list (previously we would return #f when 'search-path' returns #f). Check whether LOCATION's file is a relative file name. Return a warning if not. * tests/guix-lint.sh: Add test.
Diffstat (limited to 'guix/lint.scm')
-rw-r--r--guix/lint.scm20
1 files changed, 14 insertions, 6 deletions
diff --git a/guix/lint.scm b/guix/lint.scm
index 4a6abe4275..ec43a4dcad 100644
--- a/guix/lint.scm
+++ b/guix/lint.scm
@@ -1355,12 +1355,20 @@ them for PACKAGE."
"Check the formatting of the source code of PACKAGE."
(let ((location (package-location package)))
(if location
- (and=> (search-path %load-path (location-file location))
- (lambda (file)
- ;; Report issues starting from the line before the 'package'
- ;; form, which usually contains the 'define' form.
- (report-formatting-issues package file
- (- (location-line location) 1))))
+ ;; Report issues starting from the line before the 'package'
+ ;; form, which usually contains the 'define' form.
+ (let ((line (- (location-line location) 1)))
+ (match (search-path %load-path (location-file location))
+ ((? string? file)
+ (report-formatting-issues package file line))
+ (#f
+ ;; It could be that LOCATION lists a "true" relative file
+ ;; name--i.e., not relative to an element of %LOAD-PATH.
+ (let ((file (location-file location)))
+ (if (file-exists? file)
+ (report-formatting-issues package file line)
+ (list (make-warning package
+ (G_ "source file not found"))))))))
'())))