From 5a3dba7c121e6ebc529da8bf7a7a3d29401b53d7 Mon Sep 17 00:00:00 2001 From: wtfsck Date: Thu, 15 Jul 2021 21:56:37 +0200 Subject: [PATCH] Update rust deprec writer to not deprecate the enum if some feature is passed in --- .../Rust/RustDeprecatedWriter.cs | 26 +++++++++++++------ .../Enums/Rust/RustEnumsGenerator.cs | 2 +- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/csharp/Intel/Generator/Documentation/Rust/RustDeprecatedWriter.cs b/src/csharp/Intel/Generator/Documentation/Rust/RustDeprecatedWriter.cs index f6a9d6901..c1d762f6e 100644 --- a/src/csharp/Intel/Generator/Documentation/Rust/RustDeprecatedWriter.cs +++ b/src/csharp/Intel/Generator/Documentation/Rust/RustDeprecatedWriter.cs @@ -12,29 +12,35 @@ namespace Generator.Documentation.Rust { public RustDeprecatedWriter(IdentifierConverter idConverter) => this.idConverter = idConverter; - public override void WriteDeprecated(FileWriter writer, EnumValue value) { + public override void WriteDeprecated(FileWriter writer, EnumValue value) => + WriteDeprecated(writer, value, null); + + public void WriteDeprecated(FileWriter writer, EnumValue value, string? notDeprecFeature) { if (value.DeprecatedInfo.IsDeprecated) { if (value.DeprecatedInfo.NewName is not null) { var newValue = value.DeclaringType[value.DeprecatedInfo.NewName]; - WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, newValue.Name(idConverter), value.DeprecatedInfo.Description); + WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, newValue.Name(idConverter), value.DeprecatedInfo.Description, notDeprecFeature); } else - WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, null, value.DeprecatedInfo.Description); + WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, null, value.DeprecatedInfo.Description, notDeprecFeature); } } - public override void WriteDeprecated(FileWriter writer, Constant value) { + public override void WriteDeprecated(FileWriter writer, Constant value) => + WriteDeprecated(writer, value, null); + + public void WriteDeprecated(FileWriter writer, Constant value, string? notDeprecFeature) { if (value.DeprecatedInfo.IsDeprecated) { if (value.DeprecatedInfo.NewName is not null) { var newValue = value.DeclaringType[value.DeprecatedInfo.NewName]; - WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, newValue.Name(idConverter), value.DeprecatedInfo.Description); + WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, newValue.Name(idConverter), value.DeprecatedInfo.Description, notDeprecFeature); } else - WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, null, value.DeprecatedInfo.Description); + WriteDeprecated(writer, value.DeprecatedInfo.VersionStr, null, value.DeprecatedInfo.Description, notDeprecFeature); } } - static void WriteDeprecated(FileWriter writer, string version, string? newName, string? description) { + static void WriteDeprecated(FileWriter writer, string version, string? newName, string? description, string? notDeprecFeature) { string extra; if (description is not null) extra = description; @@ -42,7 +48,11 @@ namespace Generator.Documentation.Rust { extra = $"Use {newName} instead"; else extra = "Don't use it!"; - writer.WriteLine($"#[deprecated(since = \"{version}\", note = \"{extra}\")]"); + var deprecatedAttr = $"deprecated(since = \"{version}\", note = \"{extra}\")"; + if (notDeprecFeature is not null) + writer.WriteLine($"#[cfg_attr(not(feature = \"{notDeprecFeature}\"), {deprecatedAttr})]"); + else + writer.WriteLine($"#[{deprecatedAttr}]"); } } } diff --git a/src/csharp/Intel/Generator/Enums/Rust/RustEnumsGenerator.cs b/src/csharp/Intel/Generator/Enums/Rust/RustEnumsGenerator.cs index 028440262..8a5eba4ee 100644 --- a/src/csharp/Intel/Generator/Enums/Rust/RustEnumsGenerator.cs +++ b/src/csharp/Intel/Generator/Enums/Rust/RustEnumsGenerator.cs @@ -16,7 +16,7 @@ namespace Generator.Enums.Rust { readonly IdentifierConverter idConverter; readonly Dictionary toPartialFileInfo; readonly RustDocCommentWriter docWriter; - readonly DeprecatedWriter deprecatedWriter; + readonly RustDeprecatedWriter deprecatedWriter; readonly RustConstantsWriter constantsWriter; sealed class PartialEnumFileInfo {