Skip to content

Commit 991d87c

Browse files
authored
Handle new unexpected_cfgs warnings (#3022)
1 parent 1256fbe commit 991d87c

File tree

27 files changed

+77
-5673
lines changed

27 files changed

+77
-5673
lines changed

crates/libs/bindgen/src/rust/cfg.rs

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ pub struct Cfg {
66
pub types: std::collections::BTreeMap<&'static str, std::collections::BTreeSet<metadata::TypeDef>>,
77
pub core_types: std::collections::BTreeSet<metadata::Type>,
88
pub arches: std::collections::BTreeSet<&'static str>,
9+
pub deprecated: bool,
910
}
1011

1112
impl Cfg {
@@ -19,6 +20,17 @@ impl Cfg {
1920
union.arches.append(&mut other.arches);
2021
union
2122
}
23+
24+
pub fn included(&self, writer: &Writer) -> bool {
25+
if writer.package {
26+
for namespace in self.types.keys() {
27+
if !writer.reader.includes_namespace(namespace) {
28+
return false;
29+
}
30+
}
31+
}
32+
true
33+
}
2234
}
2335

2436
pub fn field_cfg(writer: &Writer, row: metadata::Field) -> Cfg {
@@ -134,7 +146,7 @@ fn cfg_add_attributes<R: AsRow + Into<metadata::HasAttribute>>(cfg: &mut Cfg, ro
134146
}
135147
}
136148
"DeprecatedAttribute" => {
137-
cfg.add_feature("deprecated");
149+
cfg.deprecated = true;
138150
}
139151
_ => {}
140152
}

crates/libs/bindgen/src/rust/com_methods.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ pub fn writer(writer: &Writer, def: metadata::TypeDef, kind: metadata::Interface
99
let where_clause = writer.where_clause(&signature.params);
1010
let mut cfg = cfg::signature_cfg(writer, method);
1111
cfg.add_feature(def.namespace());
12+
13+
if !cfg.included(writer) {
14+
return quote! {};
15+
}
16+
1217
let features = writer.cfg_features(&cfg);
1318

1419
if kind == metadata::InterfaceKind::None {

crates/libs/bindgen/src/rust/delegates.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ fn gen_callback(writer: &Writer, def: metadata::TypeDef) -> TokenStream {
1616

1717
let return_type = writer.return_sig(&signature);
1818
let cfg = cfg::type_def_cfg(writer, def, &[]);
19+
20+
if !cfg.included(writer) {
21+
return quote! {};
22+
}
23+
1924
let features = writer.cfg_features(&cfg);
2025

2126
let params = signature.params.iter().map(|p| {

crates/libs/bindgen/src/rust/functions.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ pub fn writer(writer: &Writer, namespace: &str, def: metadata::MethodDef) -> Tok
2424
fn gen_sys_function(writer: &Writer, namespace: &str, def: metadata::MethodDef) -> TokenStream {
2525
let signature = metadata::method_def_signature(namespace, def, &[]);
2626
let cfg = cfg::signature_cfg(writer, def);
27+
28+
if !cfg.included(writer) {
29+
return quote! {};
30+
}
31+
2732
let mut tokens = writer.cfg_features(&cfg);
2833
tokens.combine(&gen_link(writer, namespace, &signature));
2934
tokens

crates/libs/bindgen/src/rust/implements.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@ pub fn writer(writer: &Writer, def: metadata::TypeDef) -> TokenStream {
1515
let generic_names = writer.generic_names(generics);
1616
let named_phantoms = writer.generic_named_phantoms(generics);
1717
let cfg = cfg::type_def_cfg_impl(writer, def, generics);
18+
19+
if !cfg.included(writer) {
20+
return quote! {};
21+
}
22+
1823
let features = writer.cfg_features(&cfg);
1924
let mut requires = quote! {};
2025
let type_ident = quote! { #type_ident<#generic_names> };

crates/libs/bindgen/src/rust/structs.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ fn gen_struct_with_name(writer: &Writer, def: metadata::TypeDef, struct_name: &s
2727
let flags = def.flags();
2828
let cfg = cfg.union(cfg::type_def_cfg(writer, def, &[]));
2929

30+
if !cfg.included(writer) {
31+
return quote! {};
32+
}
33+
3034
let repr = if let Some(layout) = def.class_layout() {
3135
let packing = Literal::usize_unsuffixed(layout.packing_size());
3236
quote! { #[repr(C, packed(#packing))] }

crates/libs/bindgen/src/rust/writer.rs

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,10 @@ impl Writer {
426426
compact.push(feature);
427427
}
428428
}
429+
430+
if cfg.deprecated {
431+
compact.push("deprecated");
432+
}
429433
}
430434
compact
431435
}
@@ -795,18 +799,25 @@ impl Writer {
795799
let mut cfg = cfg::signature_cfg(self, method);
796800
let signature = self.vtbl_signature(def, false, &signature);
797801
cfg.add_feature(def.namespace());
798-
let cfg_all = self.cfg_features(&cfg);
799-
let cfg_not = self.cfg_not_features(&cfg);
800802

801-
let signature = quote! { pub #name: unsafe extern "system" fn #signature, };
803+
if cfg.included(self) {
804+
let cfg_all = self.cfg_features(&cfg);
805+
let cfg_not = self.cfg_not_features(&cfg);
806+
807+
let signature = quote! { pub #name: unsafe extern "system" fn #signature, };
802808

803-
if cfg_all.is_empty() {
804-
methods.combine(&signature);
809+
if cfg_all.is_empty() {
810+
methods.combine(&signature);
811+
} else {
812+
methods.combine(&quote! {
813+
#cfg_all
814+
#signature
815+
#cfg_not
816+
#name: usize,
817+
});
818+
}
805819
} else {
806820
methods.combine(&quote! {
807-
#cfg_all
808-
#signature
809-
#cfg_not
810821
#name: usize,
811822
});
812823
}
@@ -1209,6 +1220,7 @@ fn const_ptrs(pointers: usize) -> TokenStream {
12091220

12101221
pub fn cfg_features(cfg: &cfg::Cfg) -> Vec<String> {
12111222
let mut compact = Vec::<&'static str>::new();
1223+
12121224
for feature in cfg.types.keys() {
12131225
if !feature.is_empty() {
12141226
for pos in 0..compact.len() {
@@ -1220,6 +1232,11 @@ pub fn cfg_features(cfg: &cfg::Cfg) -> Vec<String> {
12201232
compact.push(feature);
12211233
}
12221234
}
1235+
1236+
if cfg.deprecated {
1237+
compact.push("deprecated");
1238+
}
1239+
12231240
compact.into_iter().map(to_feature).collect()
12241241
}
12251242

crates/libs/core/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ Learn more about Rust for Windows here: <https://github.com/microsoft/windows-rs
33
*/
44

55
#![doc(html_no_source)]
6-
#![allow(non_snake_case)]
6+
#![allow(non_snake_case, unexpected_cfgs)]
77
#![cfg_attr(windows_debugger_visualizer, debugger_visualizer(natvis_file = "../.natvis"))]
88

99
extern crate self as windows_core;

crates/libs/result/src/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
Learn more about Rust for Windows here: <https://github.com/microsoft/windows-rs>
33
*/
44

5+
#![allow(unexpected_cfgs)]
56
#![cfg_attr(
67
windows_debugger_visualizer,
78
debugger_visualizer(natvis_file = "../.natvis")

0 commit comments

Comments
 (0)