Avoid various capitalizations for method name

Rule ND2020 Naming Conventions

Matches methods whose names differ only in capitalization (like ProcessOrderId vs ProcessOrderID). Choose a single capitalization application-wide for readability, maintainability and consistency.

Severity goes from Medium to Critical when various capitalizations occur within the same type: not just convention, it is error-prone — clients must investigate which version to call.

How to fix

Choose a single application-wide capitalization, or use method names that don't differ only by capitalization.

Debt is proportional to the number of capitalizations found (2 minimum).

CQLinq source

This rule is written in CQLinq, C# LINQ over the NDepend code model. It ships with every new NDepend project: you can read it, adapt it, or use it as a starting point for your own custom rules.

// <Name>Avoid various capitalizations for method name</Name>
// <Id>ND2020:AvoidVariousCapitalizationsForMethodName</Id>

warnif count > 0

let lookup = JustMyCode.Methods.ToLookup(m => m.SimpleName, StringComparer.OrdinalIgnoreCase)
from grouping in lookup
where grouping.Count() > 1
let name = grouping.First().SimpleName
let method = grouping.FirstOrDefault(m => m.SimpleName != name)
where method != null
let nbCapitalizations = grouping.ToLookup(m => m.SimpleName).Count

// Increase the severity if various capitalizations are found in same class
let differentCapitalizationInSameType = 
   grouping.ToLookup(m => m.ParentType)
           .Any(groupingPerType => groupingPerType.ToLookup(m => m.SimpleName).Count > 1)

select new { 
  method, 
  methods = grouping.Distinct(m => m.SimpleName).ToArray(),
  nbCapitalizations,
  Debt = (nbCapitalizations * 6).ToMinutes().ToDebt(),
  Severity = differentCapitalizationInSameType  ? Severity.Critical : Severity.Medium
}

//<Expl>
// Several capitalizations for this method name are used:
// *{1}*. Choose a single capitalization to improve 
// overall readability, maintainability, team collaboration
// and consistency.
//</Expl>

//<Desc>
// Matches methods whose names differ only in capitalization (like
// *ProcessOrderId* vs *ProcessOrderID*). Choose a single capitalization
// application-wide for readability, maintainability and consistency.
//
// Severity goes from *Medium* to *Critical* when various capitalizations
// occur within the same type: not just convention, it is error-prone —
// clients must investigate which version to call.
//</Desc>

//<HowToFix>
// Choose a single application-wide capitalization, or use method names that
// don't differ only by capitalization.
//
// Debt is proportional to the number of capitalizations found (2 minimum).
//</HowToFix>

Naming Conventions: all 23 items