@@ -10,14 +10,14 @@ use figment::{
1010 Figment ,
1111} ;
1212use itertools:: Itertools ;
13- use log:: warn;
1413use num_traits:: Zero ;
1514use ra_ap_cfg:: { CfgAtom , CfgDiff } ;
1615use ra_ap_intern:: Symbol ;
1716use ra_ap_paths:: Utf8PathBuf ;
1817use ra_ap_project_model:: { CargoConfig , CargoFeatures , CfgOverrides , RustLibSource } ;
1918use rust_extractor_macros:: extractor_cli_config;
2019use serde:: { Deserialize , Serialize } ;
20+ use std:: collections:: HashSet ;
2121use std:: fmt:: Debug ;
2222use std:: ops:: Not ;
2323use std:: path:: PathBuf ;
@@ -132,33 +132,26 @@ fn to_cfg_override(spec: &str) -> CfgAtom {
132132}
133133
134134fn 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 ( ) ;
138138 for spec in specs {
139139 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) ;
141143 } 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) ;
146147 }
147148 }
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 ( )
163156 }
164157}
0 commit comments