[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/08: import: hackage: Make parsing of tests and fields more flexible.
From: |
Federico Beffa |
Subject: |
04/08: import: hackage: Make parsing of tests and fields more flexible. |
Date: |
Thu, 26 Nov 2015 17:18:53 +0000 |
beffa pushed a commit to branch master
in repository guix.
commit 94abc84887ddbb56c0428a4ad783318845fcb281
Author: Federico Beffa <address@hidden>
Date: Wed Nov 11 16:20:45 2015 +0100
import: hackage: Make parsing of tests and fields more flexible.
* guix/import/cabal.scm (is-test): Allow spaces between keyword and
parentheses.
(is-id): Add argument 'port'. Allow spaces between keyword and column.
(lex-word): Adjust call to 'is-id'.
---
guix/import/cabal.scm | 19 +++++++++++++------
1 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/guix/import/cabal.scm b/guix/import/cabal.scm
index 63de74a..c20e074 100644
--- a/guix/import/cabal.scm
+++ b/guix/import/cabal.scm
@@ -333,7 +333,7 @@ matching a string against the created regexp."
(make-regexp pat))))
(cut regexp-exec rx <>)))
-(define is-property (make-rx-matcher "([a-z0-9-]+):[ \t]*(\\w?.*)$"
+(define is-property (make-rx-matcher "([a-z0-9-]+)[ \t]*:[ \t]*(\\w?.*)$"
regexp/icase))
(define is-flag (make-rx-matcher "^flag +([a-z0-9_-]+)"
@@ -366,17 +366,24 @@ matching a string against the created regexp."
(define (is-or s) (string=? s "||"))
-(define (is-id s)
+(define (is-id s port)
(let ((cabal-reserved-words
'("if" "else" "library" "flag" "executable" "test-suite"
- "source-repository" "benchmark")))
+ "source-repository" "benchmark"))
+ (spaces (read-while (cut char-set-contains? char-set:blank <>) port))
+ (c (peek-char port)))
+ (unread-string spaces port)
(and (every (cut string-ci<> s <>) cabal-reserved-words)
- (not (char=? (last (string->list s)) #\:)))))
+ (and (not (char=? (last (string->list s)) #\:))
+ (not (char=? #\: c))))))
(define (is-test s port)
(let ((tests-rx (make-regexp "os|arch|flag|impl"))
+ (spaces (read-while (cut char-set-contains? char-set:blank <>) port))
(c (peek-char port)))
- (and (regexp-exec tests-rx s) (char=? #\( c))))
+ (if (and (regexp-exec tests-rx s) (char=? #\( c))
+ #t
+ (begin (unread-string spaces port) #f))))
;; Lexers for individual tokens.
@@ -509,7 +516,7 @@ LOC is the current port location."
((is-false w) (lex-false loc))
((is-and w) (lex-and loc))
((is-or w) (lex-or loc))
- ((is-id w) (lex-id w loc))
+ ((is-id w port) (lex-id w loc))
(else (unread-string w port) #f))))
(define (lex-line port loc)
- 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, 2015/11/26
- 04/08: import: hackage: Make parsing of tests and fields more flexible.,
Federico Beffa <=
- 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