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) }));
                }
            }
        }