@@ -10,69 +10,64 @@ use crate::{
1010 VerificationArgs ,
1111 list_args:: { CargoListArgs , StandaloneListArgs } ,
1212 } ,
13- list:: ListMetadata ,
1413 list:: output:: output_list_results,
14+ list:: { FileName , HarnessName , ListMetadata } ,
1515 project:: { Project , cargo_project, standalone_project, std_project} ,
1616 session:: KaniSession ,
1717 version:: print_kani_version,
1818} ;
1919use anyhow:: Result ;
20- use kani_metadata:: { ContractedFunction , HarnessKind , KaniMetadata } ;
20+ use kani_metadata:: { ContractedFunction , HarnessKind , HarnessMetadata , KaniMetadata } ;
2121
2222/// Process the KaniMetadata output from kani-compiler and output the list subcommand results
23- pub fn process_metadata ( metadata : Vec < KaniMetadata > ) -> ListMetadata {
24- // We use ordered maps and sets so that the output is in lexicographic order (and consistent across invocations).
25-
26- // Map each file to a vector of its harnesses.
27- let mut standard_harnesses: BTreeMap < String , BTreeSet < String > > = BTreeMap :: new ( ) ;
28- let mut contract_harnesses: BTreeMap < String , BTreeSet < String > > = BTreeMap :: new ( ) ;
23+ pub fn process_metadata ( metadata : Vec < KaniMetadata > ) -> BTreeSet < ListMetadata > {
24+ let mut list_metadata: BTreeSet < ListMetadata > = BTreeSet :: new ( ) ;
25+
26+ let insert = |harness_meta : HarnessMetadata ,
27+ map : & mut BTreeMap < FileName , BTreeSet < HarnessName > > ,
28+ count : & mut usize | {
29+ * count += 1 ;
30+ if let Some ( harnesses) = map. get_mut ( & harness_meta. original_file ) {
31+ harnesses. insert ( harness_meta. pretty_name ) ;
32+ } else {
33+ map. insert ( harness_meta. original_file , BTreeSet :: from ( [ harness_meta. pretty_name ] ) ) ;
34+ } ;
35+ } ;
2936
30- let mut contracted_functions: BTreeSet < ContractedFunction > = BTreeSet :: new ( ) ;
37+ for kani_meta in metadata {
38+ // We use ordered maps and sets so that the output is in lexicographic order (and consistent across invocations).
39+ let mut standard_harnesses: BTreeMap < FileName , BTreeSet < HarnessName > > = BTreeMap :: new ( ) ;
40+ let mut contract_harnesses: BTreeMap < FileName , BTreeSet < HarnessName > > = BTreeMap :: new ( ) ;
41+ let mut contracted_functions: BTreeSet < ContractedFunction > = BTreeSet :: new ( ) ;
3142
32- let mut standard_harnesses_count = 0 ;
33- let mut contract_harnesses_count = 0 ;
43+ let mut standard_harnesses_count = 0 ;
44+ let mut contract_harnesses_count = 0 ;
3445
35- for kani_meta in metadata {
3646 for harness_meta in kani_meta. proof_harnesses {
3747 match harness_meta. attributes . kind {
3848 HarnessKind :: Proof => {
39- standard_harnesses_count += 1 ;
40- if let Some ( harnesses) = standard_harnesses. get_mut ( & harness_meta. original_file )
41- {
42- harnesses. insert ( harness_meta. pretty_name ) ;
43- } else {
44- standard_harnesses. insert (
45- harness_meta. original_file ,
46- BTreeSet :: from ( [ harness_meta. pretty_name ] ) ,
47- ) ;
48- }
49+ insert ( harness_meta, & mut standard_harnesses, & mut standard_harnesses_count) ;
4950 }
5051 HarnessKind :: ProofForContract { .. } => {
51- contract_harnesses_count += 1 ;
52- if let Some ( harnesses) = contract_harnesses. get_mut ( & harness_meta. original_file )
53- {
54- harnesses. insert ( harness_meta. pretty_name ) ;
55- } else {
56- contract_harnesses. insert (
57- harness_meta. original_file ,
58- BTreeSet :: from ( [ harness_meta. pretty_name ] ) ,
59- ) ;
60- }
52+ insert ( harness_meta, & mut contract_harnesses, & mut contract_harnesses_count) ;
6153 }
6254 HarnessKind :: Test => { }
6355 }
6456 }
6557
6658 contracted_functions. extend ( kani_meta. contracted_functions . into_iter ( ) ) ;
67- }
6859
69- ListMetadata {
70- standard_harnesses,
71- standard_harnesses_count,
72- contract_harnesses,
73- contract_harnesses_count,
74- contracted_functions,
60+ list_metadata. insert ( ListMetadata {
61+ crate_name : kani_meta. crate_name ,
62+ standard_harnesses,
63+ standard_harnesses_count,
64+ contract_harnesses,
65+ contract_harnesses_count,
66+ contracted_functions,
67+ } ) ;
7568 }
69+
70+ list_metadata
7671}
7772
7873pub fn list_cargo ( args : CargoListArgs , mut verify_opts : VerificationArgs ) -> Result < ( ) > {
0 commit comments