@@ -10,14 +10,14 @@ use figment::{
10
10
Figment ,
11
11
} ;
12
12
use itertools:: Itertools ;
13
- use log:: warn;
14
13
use num_traits:: Zero ;
15
14
use ra_ap_cfg:: { CfgAtom , CfgDiff } ;
16
15
use ra_ap_intern:: Symbol ;
17
16
use ra_ap_paths:: Utf8PathBuf ;
18
17
use ra_ap_project_model:: { CargoConfig , CargoFeatures , CfgOverrides , RustLibSource } ;
19
18
use rust_extractor_macros:: extractor_cli_config;
20
19
use serde:: { Deserialize , Serialize } ;
20
+ use std:: collections:: HashSet ;
21
21
use std:: fmt:: Debug ;
22
22
use std:: ops:: Not ;
23
23
use std:: path:: PathBuf ;
@@ -132,33 +132,26 @@ fn to_cfg_override(spec: &str) -> CfgAtom {
132
132
}
133
133
134
134
fn to_cfg_overrides ( specs : & Vec < String > ) -> CfgOverrides {
135
- let mut enabled_cfgs = Vec :: new ( ) ;
136
- let mut disabled_cfgs = Vec :: new ( ) ;
137
- let mut has_test_explicitly_enabled = false ;
135
+ let mut enabled_cfgs = HashSet :: new ( ) ;
136
+ enabled_cfgs . insert ( to_cfg_override ( "test" ) ) ;
137
+ let mut disabled_cfgs = HashSet :: new ( ) ;
138
138
for spec in specs {
139
139
if let Some ( spec) = spec. strip_prefix ( "-" ) {
140
- disabled_cfgs. push ( to_cfg_override ( spec) ) ;
140
+ let cfg = to_cfg_override ( spec) ;
141
+ enabled_cfgs. remove ( & cfg) ;
142
+ disabled_cfgs. insert ( cfg) ;
141
143
} else {
142
- enabled_cfgs. push ( to_cfg_override ( spec) ) ;
143
- if spec == "test" {
144
- has_test_explicitly_enabled = true ;
145
- }
144
+ let cfg = to_cfg_override ( spec) ;
145
+ disabled_cfgs. remove ( & cfg) ;
146
+ enabled_cfgs. insert ( cfg) ;
146
147
}
147
148
}
148
- if !has_test_explicitly_enabled {
149
- disabled_cfgs. push ( to_cfg_override ( "test" ) ) ;
150
- }
151
- if let Some ( global) = CfgDiff :: new ( enabled_cfgs, disabled_cfgs) {
152
- CfgOverrides {
153
- global,
154
- ..Default :: default ( )
155
- }
156
- } else {
157
- warn ! ( "non-disjoint cfg overrides, ignoring: {}" , specs. join( ", " ) ) ;
158
- CfgOverrides {
159
- global : CfgDiff :: new ( Vec :: new ( ) , vec ! [ to_cfg_override( "test" ) ] )
160
- . expect ( "disabling one cfg should always succeed" ) ,
161
- ..Default :: default ( )
162
- }
149
+ let enabled_cfgs = enabled_cfgs. into_iter ( ) . collect ( ) ;
150
+ let disabled_cfgs = disabled_cfgs. into_iter ( ) . collect ( ) ;
151
+ let global = CfgDiff :: new ( enabled_cfgs, disabled_cfgs)
152
+ . expect ( "There should be no duplicate cfgs by construction" ) ;
153
+ CfgOverrides {
154
+ global,
155
+ ..Default :: default ( )
163
156
}
164
157
}
0 commit comments