# EditorConfig Setup for Emby.Naming Project

## Summary

The `.editorconfig` file has been updated to suppress non-critical IDE warnings and StyleCop suggestions while maintaining code quality standards.

## Changes Made

### StyleCop Analyzer Rules (SA)

The following StyleCop rules have been configured:

#### Suppressed (severity = none)
- **SA1101**: Prefix local calls with this - Suppressed (already configured)
- **SA1200**: Using directives placement - **NEW** Suppressed to avoid conflict with IDE0065
- **SA1309**: Field names should not begin with underscore - Suppressed (already configured)  
- **SA1633**: File should have header - **NEW** Suppressed (not critical for internal projects)

#### Reduced to Silent
- **SA1202**: Elements ordered by access - Reduced to silent (already configured)
- **SA1413**: Use trailing commas - **UPDATED** from warning to silent
- **SA1515**: Single-line comments preceded by blank line - **UPDATED** from warning to silent

#### Kept as Suggestions
- **SA1600**: Elements should be documented - Kept as suggestion (already configured)

### IDE Code Style Rules

The following IDE rules have been configured:

#### Suppressed (severity = silent)
- **IDE0008**: Use explicit type instead of 'var' - Very common, reduced to silent
- **IDE0028**: Simplify collection initialization - Reduced to silent
- **IDE0046**: Convert to conditional expression - Reduced to silent
- **IDE0057**: Use range operator - Reduced to silent
- **IDE0058**: Expression value never used - Reduced to silent
- **IDE0065**: Misplaced using directive - Reduced to silent (conflicts with SA1200)
- **IDE0078**: Use pattern matching - Reduced to silent
- **IDE0090**: Use 'new(...)' - Reduced to silent
- **IDE0160**: Convert to block scoped namespace - Reduced to silent
- **IDE0290**: Use primary constructor - Reduced to silent (C# 12 feature)
- **IDE0300**: Simplify collection initialization - Reduced to silent
- **IDE0301**: Simplify collection initialization - Reduced to silent
- **IDE0305**: Simplify collection initialization - Reduced to silent

#### Kept as Warnings
- **IDE0051**: Remove unused private members - Important for code quality
- **IDE0055**: Fix formatting - Important for consistency

#### Kept as Suggestions
- **IDE0200**: Remove unnecessary lambda expression - Useful optimization

### Code Analysis Rules (CA)

- **CA1307**: Specify StringComparison - **KEPT** as warning (security/correctness)
- **CA1310**: Specify StringComparison for correctness - **KEPT** as warning

### C# Code Style Settings

- **csharp_using_directive_placement**: outside_namespace:silent - Modern C# convention

## How to Apply Changes

### Method 1: Restart Your IDE

1. Close Visual Studio or your IDE
2. Reopen the solution
3. The new `.editorconfig` settings will be applied automatically

### Method 2: Reload Solution (Visual Studio)

1. In Visual Studio, go to **File** → **Close Solution**
2. Reopen the solution
3. Settings will be reloaded

### Method 3: Clear Analysis Cache (Visual Studio)

1. Close Visual Studio
2. Delete the `.vs` folder in the solution directory
3. Reopen Visual Studio
4. Rebuild the solution

### Method 4: Use Command Line

For immediate effect without IDE restart:

```powershell
# Clean and rebuild the project
dotnet clean Emby.Naming\Emby.Naming.csproj
dotnet build Emby.Naming\Emby.Naming.csproj
```

## Expected Results

After applying the changes:

### Before
- **~300+ IDE/SA suggestions** across the project
- Many non-critical warnings cluttering the error list

### After
- **Only ~15-20 critical warnings** remain:
  - IDE0051: Unused members (important to fix)
  - IDE0055: Formatting issues (important for consistency)
  - CA1307/CA1310: String comparison issues (security/correctness)

### Remaining Issues

The following types of issues will still appear but are **informational only** (shown as faded in IDE):

1. **IDE0008**: var usage - Shown as hint only
2. **IDE0065**: Using placement - Shown as hint only
3. **SA1413**: Trailing commas - Shown as hint only
4. **SA1515**: Comment spacing - Shown as hint only

## Critical Issues to Fix

Even after suppressing non-critical warnings, you should still address:

### 1. IDE0051: Remove Unused Private Members (1 occurrence)
- File: `Emby.Naming\TV\SeasonPathParser.cs`
- Member: `GetSeasonNumberFromPathSubstring`
- Action: Remove if truly unused or document why it's kept

### 2. IDE0055: Fix Formatting (1 occurrence)
- File: `Emby.Naming\ExternalFiles\ExternalPathParser.cs`
- Line: 77
- Issue: Incorrect indentation on `break;` statement

### 3. IDE0005: Remove Unnecessary Using (1 occurrence)
- File: `Emby.Naming\Video\VideoListResolver.cs`
- Using: `Jellyfin.Extensions`
- Action: Remove if not used

## Verification

To verify the configuration is working:

```powershell
# Check for remaining errors
dotnet build Emby.Naming\Emby.Naming.csproj --no-incremental
```

You should see significantly fewer warnings in the output.

## Benefits

1. **Reduced Noise**: Focus on critical issues only
2. **Maintained Quality**: Security and correctness warnings kept
3. **Team Flexibility**: Allows different coding styles without warnings
4. **Modern C#**: Supports modern C# conventions without forcing them

## Notes

- The `.editorconfig` file is hierarchical - settings apply to all subdirectories
- Individual developers can override settings in their local IDE preferences
- CI/CD builds will respect these settings
- You can always make rules stricter by changing `silent` to `suggestion` or `warning`

## Further Customization

If you want to make any rules stricter or more lenient, edit `.editorconfig`:

```ini
# Make a rule stricter
dotnet_diagnostic.IDE0008.severity = warning

# Make a rule more lenient
dotnet_diagnostic.SA1413.severity = none

# Disable a rule completely
dotnet_diagnostic.IDE0065.severity = none
```

## Reference

- [EditorConfig Documentation](https://editorconfig.org/)
- [.NET Code Style Rules](https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/)
- [StyleCop Analyzers Documentation](https://github.com/DotNetAnalyzers/StyleCopAnalyzers)
