Unexpected behavior with naming rule named `constant_naming_rule`
- Dominant language
- No language data
- Stars
- 1.9k
- Forks
- 173
- Avg merge
- 10d 13h
- Merged PRs (30d)
- 1
Description
(Apologies if this is in the wrong repo; I wasn't sure if this belongs here or in dotnet/roslyn.)
## Problem description
I discovered that my constant field/local naming rule was not properly respected by dotnet format. It appears that some rules interact with each other unexpectedly, and after a little experimenting I've managed to isolate the issues to a minimum reproducible example.
Class1.cs:
```csharp
using System.Threading.Tasks;
namespace ConsoleApp1;
public class Class1
{
private const string MyPrivateConstant = "";
private static readonly string s_myPrivateStaticField;
public static async Task DoSomethingAsync(string myParameter)
{
const string MyConstantLocal = "";
_ = MyPrivateConstant;
_ = s_myPrivateStaticField;
_ = myParameter;
_ = MyConstantLocal;
await Task.CompletedTask;
}
}
```
.editorconfig:
```
root = true
[*.cs]
#### Naming styles ####
# Naming rules
dotnet_naming_rule.constant_naming_rule.severity = warning
dotnet_naming_rule.constant_naming_rule.symbols = constant
dotnet_naming_rule.constant_naming_rule.style = pascal_case
dotnet_naming_rule.private_static_field_naming_rule.severity = warning
dotnet_naming_rule.private_static_field_naming_rule.symbols = private_static_field
dotnet_naming_rule.private_static_field_naming_rule.style = camel_case_s_underscore_prefix
dotnet_naming_rule.parameter_or_local_naming_rule.severity = warning
dotnet_naming_rule.parameter_or_local_naming_rule.symbols = parameter_or_local
dotnet_naming_rule.parameter_or_local_naming_rule.style = camel_case
dotnet_naming_rule.async_method_naming_rule.severity = warning
dotnet_naming_rule.async_method_naming_rule.symbols = async_method
dotnet_naming_rule.async_method_naming_rule.style = pascal_case_async_suffix
# Symbol specifications
dotnet_naming_symbols.constant.applicable_kinds = field,local
dotnet_naming_symbols.constant.required_modifiers = const
dotnet_naming_symbols.private_static_field.applicable_kinds = field
dotnet_naming_symbols.private_static_field.applicable_accessibilities = private
dotnet_naming_symbols.private_static_field.required_modifiers = static
dotnet_naming_symbols.parameter_or_local.applicable_kinds = parameter,local
dotnet_naming_symbols.async_method.applicable_kinds = method
dotnet_naming_symbols.async_method.required_modifiers = async
# Naming styles
dotnet_naming_style.pascal_case.capitalization = pascal_case
dotnet_naming_style.pascal_case_async_suffix.required_suffix = Async
dotnet_naming_style.pascal_case_async_suffix.capitalization = pascal_case
dotnet_naming_style.camel_case.capitalization = camel_case
dotnet_naming_style.camel_case_s_underscore_prefix.required_prefix = s_
dotnet_naming_style.camel_case_s_underscore_prefix.capitalization = camel_case
```
## Expected behavior
Running `dotnet format --verify-no-changes` reports no naming rule violations.
## Actual behavior
Running `dotnet format --verify-no-changes` prints
> Class1.cs(7,26): warning IDE1006: Naming rule violation: Missing prefix: 's_'
## Version
6.0.252703+68bc36719088c86b0ff01334039b0611741b8276
The code belongs to a .NET 6 project (`net6.0`).
---
What's particularly strange is if I make the following changes to the .editorconfig file to rename `constant_naming_rule` to any other arbitrary name
```diff
-dotnet_naming_rule.constant_naming_rule.severity = warning
-dotnet_naming_rule.constant_naming_rule.symbols = constant
-dotnet_naming_rule.constant_naming_rule.style = pascal_case
+dotnet_naming_rule.constant111_naming_rule.severity = warning
+dotnet_naming_rule.constant111_naming_rule.symbols = constant
+dotnet_naming_rule.constant111_naming_rule.style = pascal_case
```
and rerun `dotnet format --verify-no-changes` I get no reported naming rule violations.
Alternatively, if I remove or comment out `async_method_naming_rule`
```diff
-dotnet_naming_rule.async_method_naming_rule.severity = warning
-dotnet_naming_rule.async_method_naming_rule.symbols = async_method
-dotnet_naming_rule.async_method_naming_rule.style = pascal_case_async_suffix
```
the problem also goes away.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.