private CorrectionExtent GetCorrection(PluralizerProxy pluralizer, IScriptExtent extent, string commandName, string noun) { string singularNoun = pluralizer.Singularize(noun); string newCommandName = commandName.Substring(0, commandName.Length - noun.Length) + singularNoun; return(new CorrectionExtent(extent, newCommandName, extent.File, $"Singularized correction of '{extent.Text}'")); }
/// <summary> /// Checks that all defined cmdlet use singular noun /// </summary> /// <param name="ast"></param> /// <param name="fileName"></param> /// <returns></returns> public IEnumerable <DiagnosticRecord> AnalyzeScript(Ast ast, string fileName) { if (ast == null) { throw new ArgumentNullException(Strings.NullCommandInfoError); } IEnumerable <Ast> funcAsts = ast.FindAll(item => item is FunctionDefinitionAst, true); var pluralizer = new PluralizerProxy(); foreach (FunctionDefinitionAst funcAst in funcAsts) { if (funcAst.Name == null || !funcAst.Name.Contains('-')) { continue; } string noun = GetLastWordInCmdlet(funcAst.Name); if (noun is null) { continue; } if (pluralizer.CanOnlyBePlural(noun)) { if (nounAllowList.Contains(noun, StringComparer.OrdinalIgnoreCase)) { continue; } IScriptExtent extent = Helper.Instance.GetScriptExtentForFunctionName(funcAst); if (extent is null) { extent = funcAst.Extent; } yield return(new DiagnosticRecord( string.Format(CultureInfo.CurrentCulture, Strings.UseSingularNounsError, funcAst.Name), extent, GetName(), DiagnosticSeverity.Warning, fileName, suggestedCorrections: new CorrectionExtent[] { GetCorrection(pluralizer, extent, funcAst.Name, noun) })); } } }