(zilch lang rust cargo): track check-cfg flags in Cargo files

This commit is contained in:
puck 2025-03-02 20:29:57 +00:00
parent 6b7556be90
commit 313cca66cc

View file

@ -32,7 +32,7 @@
cargo-crate-name cargo-crate-version cargo-crate-edition cargo-crate-dependencies cargo-crate-name cargo-crate-version cargo-crate-edition cargo-crate-dependencies
cargo-crate-features cargo-crate-lib-target cargo-crate-targets cargo-crate-features cargo-crate-lib-target cargo-crate-targets
cargo-crate-build-dependencies cargo-crate-build-script cargo-crate-build-dependencies cargo-crate-build-script
cargo-crate-links cargo-crate-links cargo-crate-check-cfg-lint
<cargo-workspace> make-cargo-workspace cargo-workspace? <cargo-workspace> make-cargo-workspace cargo-workspace?
cargo-workspace-members cargo-workspace-exclude cargo-workspace-dependencies cargo-workspace-members cargo-workspace-exclude cargo-workspace-dependencies
@ -149,7 +149,7 @@
(cargo-dependency-optional entry))) (cargo-dependency-optional entry)))
(define-record-type <cargo-crate> (define-record-type <cargo-crate>
(make-cargo-crate name version edition workspace dependencies build-dependencies features lib-target build-script targets links) (make-cargo-crate name version edition workspace dependencies build-dependencies features lib-target build-script targets links check-cfg-lint)
cargo-crate? cargo-crate?
(name cargo-crate-name) (name cargo-crate-name)
(version cargo-crate-version) (version cargo-crate-version)
@ -161,7 +161,8 @@
(lib-target cargo-crate-lib-target) (lib-target cargo-crate-lib-target)
(build-script cargo-crate-build-script) (build-script cargo-crate-build-script)
(targets cargo-crate-targets) (targets cargo-crate-targets)
(links cargo-crate-links)) (links cargo-crate-links)
(check-cfg-lint cargo-crate-check-cfg-lint))
(define-record-printer (<cargo-crate> entry out) (define-record-printer (<cargo-crate> entry out)
(fprintf out "#<cargo-crate ~S ~S edition:~S dependencies:~S features:~S lib-target:~S targets:~S>" (fprintf out "#<cargo-crate ~S ~S edition:~S dependencies:~S features:~S lib-target:~S targets:~S>"
@ -174,13 +175,14 @@
(cargo-crate-targets entry))) (cargo-crate-targets entry)))
(define-record-type <cargo-workspace> (define-record-type <cargo-workspace>
(make-cargo-workspace members exclude dependencies edition version) (make-cargo-workspace members exclude dependencies edition version check-cfg-lint)
cargo-workspace? cargo-workspace?
(members cargo-workspace-members) (members cargo-workspace-members)
(exclude cargo-workspace-exclude) (exclude cargo-workspace-exclude)
(dependencies cargo-workspace-dependencies set-cargo-workspace-dependencies!) (dependencies cargo-workspace-dependencies set-cargo-workspace-dependencies!)
(edition cargo-workspace-edition) (edition cargo-workspace-edition)
(version cargo-workspace-version)) (version cargo-workspace-version)
(check-cfg-lint cargo-workspace-check-cfg-lint))
(define-record-printer (<cargo-workspace> entry out) (define-record-printer (<cargo-workspace> entry out)
(fprintf out "#<cargo-workspace members:~S exclude:~S deps:~S>" (fprintf out "#<cargo-workspace members:~S exclude:~S deps:~S>"
@ -344,6 +346,11 @@
(define package-links (and-cdr (assoc "links" package))) (define package-links (and-cdr (assoc "links" package)))
(define package-edition (or (and-cdr (assoc "edition" package)) "2015")) (define package-edition (or (and-cdr (assoc "edition" package)) "2015"))
(define lints (vector->list (or (and-cdr (assoc "lints" internals)) #())))
(define lints-rust (vector->list (or (and-cdr (assoc "rust" lints)) #())))
(define lints-rust-unexpected-cfgs (vector->list (or (and-cdr (assoc "unexpected_cfgs" lints-rust)) #())))
(define check-cfg (or (and-cdr (assoc "check-cfg" lints-rust-unexpected-cfgs)) '()))
(when (and (vector? package-edition) (and-cdr (assoc "workspace" (vector->list package-edition)))) (when (and (vector? package-edition) (and-cdr (assoc "workspace" (vector->list package-edition))))
(unless workspace (error "Package used edition.workspace = true, but no workspace provided" package-name)) (unless workspace (error "Package used edition.workspace = true, but no workspace provided" package-name))
(set! package-edition (cargo-workspace-edition workspace))) (set! package-edition (cargo-workspace-edition workspace)))
@ -406,18 +413,23 @@
(vector->list (or (and-cdr (assoc "target" internals)) #()))) (vector->list (or (and-cdr (assoc "target" internals)) #())))
(define own-features (parse-features (vector->list (or (and-cdr (assoc "features" internals)) #())) (map cargo-dependency-name dependencies) (map cargo-dependency-name build-dependencies))) (define own-features (parse-features (vector->list (or (and-cdr (assoc "features" internals)) #())) (map cargo-dependency-name dependencies) (map cargo-dependency-name build-dependencies)))
(make-cargo-crate package-name package-version package-edition workspace dependencies build-dependencies own-features lib-target build-script-target other-targets package-links)) (make-cargo-crate package-name package-version package-edition workspace dependencies build-dependencies own-features lib-target build-script-target other-targets package-links (append check-cfg (if workspace (cargo-workspace-check-cfg-lint workspace) '()))))
(define (parse-cargo-workspace internals) (define (parse-cargo-workspace internals)
(define workspace (vector->list (cdr (assoc "workspace" internals)))) (define workspace (vector->list (cdr (assoc "workspace" internals))))
(define workspace-members (or (and-cdr (assoc "members" workspace)) '())) (define workspace-members (or (and-cdr (assoc "members" workspace)) '()))
(define workspace-exclude (or (and-cdr (assoc "exclude" workspace)) '())) (define workspace-exclude (or (and-cdr (assoc "exclude" workspace)) '()))
(define lints (vector->list (or (and-cdr (assoc "lints" internals)) #())))
(define lints-rust (vector->list (or (and-cdr (assoc "rust" lints)) #())))
(define lints-rust-unexpected-cfgs (vector->list (or (and-cdr (assoc "unexpected_cfgs" lints-rust)) #())))
(define check-cfg (or (and-cdr (assoc "check-cfg" lints-rust-unexpected-cfgs)) '()))
(define package (vector->list (or (and-cdr (assoc "package" workspace)) #()))) (define package (vector->list (or (and-cdr (assoc "package" workspace)) #())))
(define package-edition (and-cdr (assoc "edition" package))) (define package-edition (and-cdr (assoc "edition" package)))
(define package-version (and-cdr (assoc "version" package))) (define package-version (and-cdr (assoc "version" package)))
(define workspace-record (make-cargo-workspace workspace-members workspace-exclude #f package-edition package-version)) (define workspace-record (make-cargo-workspace workspace-members workspace-exclude #f package-edition package-version check-cfg))
(define dependencies (define dependencies
(map (map
(lambda (kv) (lambda (kv)