Cursor rule
.cursor/rules/code-style-conventions.mdcCode style and naming conventions for UGTLive
Cursor rules
Quality
62/100
Scores the file, not the repository.Length
681 words
29 headings · 8 code blocksRepository
103
— · pushed 17 days agoLast changed
3 days ago
First indexed 3 days ago.1234567# Code Style and Conventions89## Naming Conventions1011### Classes and Methods12- **Classes**: PascalCase (e.g., `ConfigManager`, `TranslationService`)13- **Public Methods**: PascalCase (e.g., `GetValue()`, `TranslateAsync()`)14- **Private Methods**: camelCase (e.g., `loadConfig()`, `processImage()`)15- **Private Fields**: Underscore prefix + camelCase (e.g., `_instance`, `_configValues`)16- **Constants**: UPPER_SNAKE_CASE (e.g., `GEMINI_API_KEY`, `TRANSLATION_SERVICE`)1718### Properties19- Use PascalCase for public properties20- Prefer explicit getters/setters over auto-properties when logic is needed21- Pattern: `GetVariableName()` / `SetVariableName()` for ConfigManager22- Direct property access for simple UI bindings2324## Code Layout2526### Indentation and Braces27- **Indentation**: 4 spaces (no tabs)28- **Braces**: Allman style (opening brace on new line)29- **Line Length**: Prefer < 120 characters, wrap if needed3031### Using Statements32- System namespaces first33- Third-party namespaces second34- Application namespaces last35- Group related usings together3637### Example Structure38```csharp39using System;40using System.Collections.Generic;41using System.IO;42using System.Threading.Tasks;43using System.Windows;44using UGTLive;4546namespace UGTLive47{48 public class ExampleClass49 {50 private static ExampleClass? _instance;51 private readonly Dictionary<string, string> _configValues;5253 public static ExampleClass Instance54 {55 get56 {57 if (_instance == null)58 {59 _instance = new ExampleClass();60 }61 return _instance;62 }63 }6465 private ExampleClass()66 {67 _configValues = new Dictionary<string, string>();68 }6970 public string GetValue(string key)71 {72 return _configValues.TryGetValue(key, out var value) ? value : "";73 }74 }75}76```7778## Singleton Pattern7980### Implementation81- Use lazy initialization with null check82- Private constructor83- Static Instance property84- Thread-safe initialization (simple null check is sufficient for this app)8586```csharp87private static ConfigManager? _instance;8889public static ConfigManager Instance90{91 get92 {93 if (_instance == null)94 {95 _instance = new ConfigManager();96 }97 return _instance;98 }99}100101private ConfigManager()102{103 // Initialization104}105```106107## Error Handling108109### General Principles110- **Avoid try/catch blocks** unless absolutely necessary111- **Check for null** before using objects112- **Log errors** using `LogManager.Instance.LogError()`113- **Console.WriteLine** for debug output114- **MessageBox.Show** for user-facing errors (on UI thread)115116### Error Handling Pattern117```csharp118// Prefer null checks over try/catch119if (response == null)120{121 Console.WriteLine("Response is null");122 return null;123}124125// Log errors126LogManager.Instance.LogError("Error description", exception);127128// User-facing errors on UI thread129Application.Current.Dispatcher.Invoke(() =>130{131 MessageBox.Show($"Error: {message}", "Error Title",132 MessageBoxButton.OK, MessageBoxImage.Error);133});134```135136## Comments137138### When to Comment139- Complex algorithms or business logic140- Non-obvious code decisions141- API integration details142- TODO items for future improvements143144### Comment Style145- Use `//` for single-line comments146- Use `///` for XML documentation on public APIs147- Keep comments concise and up-to-date148149## File Organization150151### File Structure1521. Using statements1532. Namespace declaration1543. Class declaration1554. Private fields1565. Public properties1576. Constructor1587. Public methods1598. Private methods160161### One Class Per File162- Each class should be in its own file163- File name matches class name164- Exception: Small helper classes can be in same file165166## Nullable Reference Types167168### Null Handling169- Use nullable reference types (`string?`, `object?`)170- Check for null before dereferencing171- Use null-coalescing operator (`??`) when appropriate172- Use null-conditional operator (`?.`) for safe access173174```csharp175private string? _optionalValue;176177public string GetValue()178{179 return _optionalValue ?? "default";180}181182if (_optionalValue != null)183{184 // Use _optionalValue safely185}186```187188## Constants189190### Configuration Keys191- Define as `public const string` in ConfigManager192- Use descriptive UPPER_SNAKE_CASE names193- Group related constants together194195```csharp196public const string GEMINI_API_KEY = "gemini_api_key";197public const string GEMINI_MODEL = "gemini_model";198```199200## Async/Await Patterns201202### Method Naming203- Async methods end with `Async` suffix204- Return `Task` or `Task<T>`205- Use `await` for async calls206207```csharp208public async Task<string> TranslateAsync(string text)209{210 var result = await httpClient.GetStringAsync(url);211 return result;212}213```214215## LINQ Usage216217### When to Use LINQ218- Prefer LINQ for collection operations219- Use method syntax for complex queries220- Keep queries readable221222```csharp223var filtered = items.Where(x => x.IsValid)224 .OrderBy(x => x.Name)225 .ToList();226```227228## String Handling229230### String Operations231- Use `string.IsNullOrWhiteSpace()` for null/empty checks232- Prefer string interpolation (`$"text {variable}"`) over concatenation233- Use `StringBuilder` for multiple concatenations234235```csharp236if (string.IsNullOrWhiteSpace(value))237{238 return defaultValue;239}240241var message = $"Processing {count} items";242```243
Also in SethRobinson/UGTLive
Diff this repo’s formatsOne repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| SethRobinson/UGTLive.cursor/rules/ui-ux-patterns.mdc · 103 | Cursor rules | stylearchtypesui+1 | 62/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/architecture-patterns.mdc · 103 | Cursor rules | buildtestlint-formatstyle+6 | 77/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/async-threading-patterns.mdc · 103 | Cursor rules | styleuido-not | 65/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/configuration-management.mdc · 103 | Cursor rules | archsecuritydatabaseapi+1 | 65/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/debugging-testing.mdc · 103 | Cursor rules | buildteststylearch+3 | 69/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/locale-invariant-formatting.mdc · 103 | Cursor rules | lint-formatuido-not | 61/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/service-integration-patterns.mdc · 103 | Cursor rules | buildteststylearch | 69/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/translation-workflow.mdc · 103 | Cursor rules | testlint-formatarchapi+3 | 66/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/ugtlive-project-guide.mdc · 103 | Cursor rules | stylearchuideployment+1 | 69/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/versioning-workflow.mdc · 103 | Cursor rules | stylegitdeploymentagent-behaviour+1 | 62/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/wpf-ui-patterns.mdc · 103 | Cursor rules | setuplint-formatstylearch+1 | 66/100 | 3 days ago | |
| SethRobinson/UGTLiveAGENTS.md · 103 | AGENTS.md | testgitsecurityperformance+1 | 74/100 | 3 days ago |
Diff against .cursor/rules/ui-ux-patterns.mdc Diff against .cursor/rules/architecture-patterns.mdc Diff against .cursor/rules/async-threading-patterns.mdc Diff against .cursor/rules/configuration-management.mdc Diff against .cursor/rules/debugging-testing.mdc Diff against .cursor/rules/locale-invariant-formatting.mdc Diff against .cursor/rules/service-integration-patterns.mdc Diff against .cursor/rules/translation-workflow.mdc Diff against .cursor/rules/ugtlive-project-guide.mdc Diff against .cursor/rules/versioning-workflow.mdc Diff against .cursor/rules/wpf-ui-patterns.mdc Diff against AGENTS.md
Similar configs
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| ThanhTrunggDEV/DontBeLazy.cursor/rules/rust-testing.mdc · 6 | Cursor rules | teststyletesting-strategy | 90/100 | 3 days ago | |
| ThanhTrunggDEV/DontBeLazy.cursor/rules/dart-testing.mdc · 6 | Cursor rules | teststyletypestesting-strategy | 85/100 | 3 days ago | |
| ThanhTrunggDEV/DontBeLazy.cursor/rules/dart-coding-style.mdc · 6 | Cursor rules | lint-formatstyletypesdo-not | 84/100 | 3 days ago | |
| ThanhTrunggDEV/DontBeLazy.cursor/rules/rust-security.mdc · 6 | Cursor rules | stylesecuritydatabasedo-not | 80/100 | 3 days ago | |
| imazen/imageflow.cursor/rules/ci.mdc · 4.4k | Cursor rules | setupbuildtestarch+3 | 79/100 | 3 days ago | |
| ThanhTrunggDEV/DontBeLazy.cursor/rules/rust-coding-style.mdc · 6 | Cursor rules | lint-formatstyle | 78/100 | 3 days ago | |
| ThanhTrunggDEV/DontBeLazy.cursor/rules/dart-hooks.mdc · 6 | Cursor rules | lint-formatarchtesting-strategygit+1 | 78/100 | 3 days ago | |
| SethRobinson/UGTLive.cursor/rules/architecture-patterns.mdc · 103 | Cursor rules | buildtestlint-formatstyle+6 | 77/100 | 3 days ago |
