dotnet / dotnet/format

Unexpected behavior with naming rule named `constant_naming_rule`

Open
#1,435 0 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.