Skip to content

Commit 892c705

Browse files
authored
Add experimentalFeaturesWarning (#17910)
Added a setting `experimentalFeaturesWarning` to let users control whether experimental feature warnings are displayed. ###### Microsoft Reviewers: [Open in CodeFlow](https://microsoft.github.io/open-pr/?codeflow=https://github.com/Azure/bicep/pull/17910)
1 parent 0d77068 commit 892c705

File tree

10 files changed

+32
-2
lines changed

10 files changed

+32
-2
lines changed

src/Bicep.Cli/Helpers/CommandHelper.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@ public static int GetExitCode(DiagnosticSummary summary)
2020

2121
public static void LogExperimentalWarning(ILogger logger, Compilation compilation)
2222
{
23-
if (ExperimentalFeatureWarningProvider.TryGetEnabledExperimentalFeatureWarningMessage(compilation.SourceFileGrouping.SourceFiles) is { } warningMessage)
23+
if (compilation.GetEntrypointSemanticModel().Configuration.ExperimentalFeaturesWarning &&
24+
ExperimentalFeatureWarningProvider.TryGetEnabledExperimentalFeatureWarningMessage(compilation.SourceFileGrouping.SourceFiles) is { } warningMessage)
2425
{
2526
logger.LogWarning(warningMessage);
2627
}

src/Bicep.Core.UnitTests/Configuration/ConfigurationManagerTests.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ public void GetBuiltInConfiguration_NoParameter_ReturnsBuiltInConfigurationWithA
9797
}
9898
}
9999
},
100+
"experimentalFeaturesWarning": true,
100101
"experimentalFeaturesEnabled": {
101102
"extendableParamFiles": false,
102103
"symbolicNameCodegen": false,
@@ -179,6 +180,7 @@ public void GetBuiltInConfiguration_DisableAllAnalyzers_ReturnsBuiltInConfigurat
179180
"az"
180181
],
181182
"analyzers": {},
183+
"experimentalFeaturesWarning": true,
182184
"experimentalFeaturesEnabled": {
183185
"extendableParamFiles": false,
184186
"symbolicNameCodegen": false,
@@ -283,6 +285,7 @@ public void GetBuiltInConfiguration_DisableAnalyzers_ReturnsBuiltInConfiguration
283285
}
284286
}
285287
},
288+
"experimentalFeaturesWarning": true,
286289
"experimentalFeaturesEnabled": {
287290
"extendableParamFiles": false,
288291
"symbolicNameCodegen": false,
@@ -452,6 +455,7 @@ public void GetBuiltInConfiguration_EnableExperimentalFeature_ReturnsBuiltInConf
452455
}
453456
}
454457
},
458+
"experimentalFeaturesWarning": true,
455459
"experimentalFeaturesEnabled": {
456460
"symbolicNameCodegen": false,
457461
"extendableParamFiles": true,
@@ -702,6 +706,7 @@ public void GetConfiguration_ValidCustomConfiguration_OverridesBuiltInConfigurat
702706
}
703707
},
704708
"cacheRootDirectory": "/home/username/.bicep/cache",
709+
"experimentalFeaturesWarning": false,
705710
"experimentalFeaturesEnabled": {},
706711
"formatting": {
707712
"indentKind": "Space",
@@ -801,6 +806,7 @@ public void GetConfiguration_ValidCustomConfiguration_OverridesBuiltInConfigurat
801806
}
802807
},
803808
"cacheRootDirectory": "/home/username/.bicep/cache",
809+
"experimentalFeaturesWarning": false,
804810
"experimentalFeaturesEnabled": {
805811
"extendableParamFiles": false,
806812
"symbolicNameCodegen": false,

src/Bicep.Core.UnitTests/Configuration/RootConfigurationTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public void RootConfiguration_LeadingTildeInCacheRootDirectory_ExpandPath(string
2121
BicepTestConstants.BuiltInConfiguration.ImplicitExtensions,
2222
BicepTestConstants.BuiltInConfiguration.Analyzers,
2323
cacheRootDirectory,
24+
BicepTestConstants.BuiltInConfiguration.ExperimentalFeaturesWarning,
2425
BicepTestConstants.BuiltInConfiguration.ExperimentalFeaturesEnabled,
2526
BicepTestConstants.BuiltInConfiguration.Formatting,
2627
BicepTestConstants.BuiltInConfiguration.ConfigFileUri,

src/Bicep.Core.UnitTests/Diagnostics/LinterRuleTests/UseRecentApiVersionRuleTests.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ private static RootConfiguration CreateConfigurationWithFakeToday(RootConfigurat
126126
.Replace("<TESTING_TODAY_DATE>", today)
127127
.Replace("<MAX_AGE_PROP>", maxAgeInDays.HasValue ? $", \"maxAgeInDays\": {maxAgeInDays}" : ""))),
128128
original.CacheRootDirectory,
129+
original.ExperimentalFeaturesWarning,
129130
original.ExperimentalFeaturesEnabled with
130131
{
131132
SymbolicNameCodegen = true,

src/Bicep.Core/Configuration/AnalyzersConfigurationExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public static RootConfiguration WithAnalyzersConfiguration(this RootConfiguratio
4444
current.ImplicitExtensions,
4545
analyzersConfiguration,
4646
current.CacheRootDirectory,
47+
current.ExperimentalFeaturesWarning,
4748
current.ExperimentalFeaturesEnabled,
4849
current.Formatting,
4950
current.ConfigFileUri,
@@ -66,6 +67,7 @@ public static RootConfiguration WithCloudConfiguration(this RootConfiguration cu
6667
current.ImplicitExtensions,
6768
current.Analyzers,
6869
current.CacheRootDirectory,
70+
current.ExperimentalFeaturesWarning,
6971
current.ExperimentalFeaturesEnabled,
7072
current.Formatting,
7173
current.ConfigFileUri,

src/Bicep.Core/Configuration/ExperimentalFeaturesExtensions.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public static RootConfiguration WithExperimentalFeaturesConfiguration(this RootC
1313
current.ImplicitExtensions,
1414
current.Analyzers,
1515
current.CacheRootDirectory,
16+
current.ExperimentalFeaturesWarning,
1617
featuresEnabled,
1718
current.Formatting,
1819
current.ConfigFileUri,

src/Bicep.Core/Configuration/ExtensionsConfigurationExtensions.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ public static RootConfiguration WithExtensions(this RootConfiguration rootConfig
2222
rootConfiguration.ImplicitExtensions,
2323
rootConfiguration.Analyzers,
2424
rootConfiguration.CacheRootDirectory,
25+
rootConfiguration.ExperimentalFeaturesWarning,
2526
rootConfiguration.ExperimentalFeaturesEnabled,
2627
rootConfiguration.Formatting,
2728
rootConfiguration.ConfigFileUri,
@@ -37,6 +38,7 @@ public static RootConfiguration WithImplicitExtensions(this RootConfiguration ro
3738
rootConfiguration.ImplicitExtensions.WithImplicitExtensions(payload),
3839
rootConfiguration.Analyzers,
3940
rootConfiguration.CacheRootDirectory,
41+
rootConfiguration.ExperimentalFeaturesWarning,
4042
rootConfiguration.ExperimentalFeaturesEnabled,
4143
rootConfiguration.Formatting,
4244
rootConfiguration.ConfigFileUri,

src/Bicep.Core/Configuration/RootConfiguration.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public class RootConfiguration
2525

2626
public const string CacheRootDirectoryKey = "cacheRootDirectory";
2727

28+
public const string ExperimentalFeaturesWarningKey = "experimentalFeaturesWarning";
29+
2830
public const string ExperimentalFeaturesEnabledKey = "experimentalFeaturesEnabled";
2931

3032
public const string FormattingKey = "formatting";
@@ -36,6 +38,7 @@ public RootConfiguration(
3638
ImplicitExtensionsConfiguration implicitExtensions,
3739
AnalyzersConfiguration analyzers,
3840
string? cacheRootDirectory,
41+
bool experimentalFeaturesWarning,
3942
ExperimentalFeaturesEnabled experimentalFeaturesEnabled,
4043
FormattingConfiguration formatting,
4144
IOUri? configFileUri,
@@ -47,6 +50,7 @@ public RootConfiguration(
4750
this.ImplicitExtensions = implicitExtensions;
4851
this.Analyzers = analyzers;
4952
this.CacheRootDirectory = ExpandCacheRootDirectory(cacheRootDirectory);
53+
this.ExperimentalFeaturesWarning = experimentalFeaturesWarning;
5054
this.ExperimentalFeaturesEnabled = experimentalFeaturesEnabled;
5155
this.Formatting = formatting;
5256
this.ConfigFileUri = configFileUri;
@@ -59,13 +63,14 @@ public static RootConfiguration Bind(JsonElement element, IOUri? configFileUri =
5963
var moduleAliases = ModuleAliasesConfiguration.Bind(element.GetProperty(ModuleAliasesKey), configFileUri);
6064
var analyzers = new AnalyzersConfiguration(element.GetProperty(AnalyzersKey));
6165
var cacheRootDirectory = element.TryGetProperty(CacheRootDirectoryKey, out var e) ? e.GetString() : default;
66+
var experimentalFeaturesWarning = element.TryGetProperty(ExperimentalFeaturesWarningKey, out var value) && value.GetBoolean();
6267
var experimentalFeaturesEnabled = ExperimentalFeaturesEnabled.Bind(element.GetProperty(ExperimentalFeaturesEnabledKey));
6368
var formatting = FormattingConfiguration.Bind(element.GetProperty(FormattingKey));
6469

6570
var extensions = ExtensionsConfiguration.Bind(element.GetProperty(ExtensionsKey));
6671
var implicitExtensions = ImplicitExtensionsConfiguration.Bind(element.GetProperty(ImplicitExtensionsKey));
6772

68-
return new(cloud, moduleAliases, extensions, implicitExtensions, analyzers, cacheRootDirectory, experimentalFeaturesEnabled, formatting, configFileUri, null);
73+
return new(cloud, moduleAliases, extensions, implicitExtensions, analyzers, cacheRootDirectory, experimentalFeaturesWarning, experimentalFeaturesEnabled, formatting, configFileUri, null);
6974
}
7075

7176
public CloudConfiguration Cloud { get; }
@@ -80,6 +85,8 @@ public static RootConfiguration Bind(JsonElement element, IOUri? configFileUri =
8085

8186
public string? CacheRootDirectory { get; }
8287

88+
public bool ExperimentalFeaturesWarning { get; }
89+
8390
public ExperimentalFeaturesEnabled ExperimentalFeaturesEnabled { get; }
8491

8592
public FormattingConfiguration Formatting { get; }
@@ -97,6 +104,7 @@ public RootConfiguration With(
97104
ImplicitExtensionsConfiguration? implicitExtensions = null,
98105
AnalyzersConfiguration? analyzers = null,
99106
string? cacheRootDirectory = null,
107+
bool? experimentalFeaturesWarning = null,
100108
ExperimentalFeaturesEnabled? experimentalFeaturesEnabled = null,
101109
FormattingConfiguration? formatting = null,
102110
IOUri? configFileIdentifier = null,
@@ -109,6 +117,7 @@ public RootConfiguration With(
109117
implicitExtensions ?? this.ImplicitExtensions,
110118
analyzers ?? this.Analyzers,
111119
cacheRootDirectory ?? this.CacheRootDirectory,
120+
experimentalFeaturesWarning ?? this.ExperimentalFeaturesWarning,
112121
experimentalFeaturesEnabled ?? this.ExperimentalFeaturesEnabled,
113122
formatting ?? this.Formatting,
114123
configFileIdentifier ?? this.ConfigFileUri,
@@ -142,6 +151,8 @@ public string ToUtf8Json()
142151
writer.WriteString(CacheRootDirectoryKey, cacheRootDir);
143152
}
144153

154+
writer.WriteBoolean(ExperimentalFeaturesWarningKey, this.ExperimentalFeaturesWarning);
155+
145156
writer.WritePropertyName(ExperimentalFeaturesEnabledKey);
146157
this.ExperimentalFeaturesEnabled.WriteTo(writer);
147158

src/Bicep.Core/Configuration/bicepconfig.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@
6060
}
6161
}
6262
},
63+
"experimentalFeaturesWarning": true,
6364
"experimentalFeaturesEnabled": {},
6465
"formatting": {}
6566
}

src/vscode-bicep/schemas/bicepconfig.schema.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -830,6 +830,10 @@
830830
"type": "string",
831831
"description": "The directory in which Bicep may cache templates downloaded from remote registries"
832832
},
833+
"experimentalFeaturesWarning": {
834+
"type": "boolean",
835+
"description": "Controls whether the Bicep CLI displays a warning when experimental features are used. Defaults to true."
836+
},
833837
"experimentalFeaturesEnabled": {
834838
"type": "object",
835839
"description": "The experimental Bicep features that should be enabled or disabled for templates using this configuration file. See https://aka.ms/bicep/experimental-features for more information.",

0 commit comments

Comments
 (0)