[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
03/08: import: hackage: Make it resilient to missing final newline.
From: |
Federico Beffa |
Subject: |
03/08: import: hackage: Make it resilient to missing final newline. |
Date: |
Thu, 26 Nov 2015 17:18:53 +0000 |
beffa pushed a commit to branch master
in repository guix.
commit 876fd23ab6dd03c6d7d5d6b2494fbc0e1c5874ce
Author: Federico Beffa <address@hidden>
Date: Wed Nov 11 15:31:46 2015 +0100
import: hackage: Make it resilient to missing final newline.
* guix/import/cabal.scm (peek-next-line-indent): Check for missing final
newline.
---
guix/import/cabal.scm | 31 ++++++++++++++++++-------------
1 files changed, 18 insertions(+), 13 deletions(-)
diff --git a/guix/import/cabal.scm b/guix/import/cabal.scm
index ed6394e..63de74a 100644
--- a/guix/import/cabal.scm
+++ b/guix/import/cabal.scm
@@ -227,19 +227,24 @@ to the stack."
"This function can be called when the next character on PORT is #\newline
and returns the indentation of the line starting after the #\newline
character. Discard (and consume) empty and comment lines."
- (let ((initial-newline (string (read-char port))))
- (let loop ((char (peek-char port))
- (word ""))
- (cond ((eqv? char #\newline) (read-char port)
- (loop (peek-char port) ""))
- ((or (eqv? char #\space) (eqv? char #\tab))
- (let ((c (read-char port)))
- (loop (peek-char port) (string-append word (string c)))))
- ((comment-line port char) (loop (peek-char port) ""))
- (else
- (let ((len (string-length word)))
- (unread-string (string-append initial-newline word) port)
- len))))))
+ (if (eof-object? (peek-char port))
+ ;; If the file is missing the #\newline on the last line, add it and act
+ ;; as if it were there. This is needed for proper operation of
+ ;; indentation based block recognition (based on ‘port-column’).
+ (begin (unread-char #\newline port) (read-char port) 0)
+ (let ((initial-newline (string (read-char port))))
+ (let loop ((char (peek-char port))
+ (word ""))
+ (cond ((eqv? char #\newline) (read-char port)
+ (loop (peek-char port) ""))
+ ((or (eqv? char #\space) (eqv? char #\tab))
+ (let ((c (read-char port)))
+ (loop (peek-char port) (string-append word (string c)))))
+ ((comment-line port char) (loop (peek-char port) ""))
+ (else
+ (let ((len (string-length word)))
+ (unread-string (string-append initial-newline word) port)
+ len)))))))
(define* (read-value port value min-indent #:optional (separator " "))
"The next character on PORT must be #\newline. Append to VALUE the
- branch master updated (b72a441 -> d8c66da), Federico Beffa, 2015/11/26
- 01/08: import: hackage: Add recognition of 'true' and 'false' symbols., Federico Beffa, 2015/11/26
- 02/08: import: hackage: Imporve parsing of tests., Federico Beffa, 2015/11/26
- 03/08: import: hackage: Make it resilient to missing final newline.,
Federico Beffa <=
- 04/08: import: hackage: Make parsing of tests and fields more flexible., Federico Beffa, 2015/11/26
- 08/08: import: hackage: Assume current 'ghc' package version., Federico Beffa, 2015/11/26
- 05/08: utils: Add 'canonical-newline-port'., Federico Beffa, 2015/11/26
- 06/08: import: hackage: Handle CRLF end of line style., Federico Beffa, 2015/11/26
- 07/08: import: hackage: Add new tests., Federico Beffa, 2015/11/26