/// <summary> /// Initializes a new instance of the <see cref="ScriptAnalyzerResult"/> class. /// </summary> /// <param name="script">The script.</param> /// <param name="lines">The merged script lines.</param> public ScriptAnalyzerResult(IScriptInformation script, IReadOnlyList <string> lines) { _script = script; _lines = lines; _references = new HashSet <string>(Collect(script, i => i.References)); _namespaces = new HashSet <string>(Collect(script, i => i.Namespaces)); _usingAliases = new HashSet <string>(Collect(script, i => i.UsingAliases)); _tools = new HashSet <NuGetPackage>(Collect(script, i => i.Tools)); _addins = new HashSet <NuGetPackage>(Collect(script, i => i.Addins)); }
/// <summary> /// Initializes a new instance of the <see cref="ScriptAnalyzerResult"/> class. /// </summary> /// <param name="script">The script.</param> /// <param name="lines">The merged script lines.</param> /// <param name="errors">The analyzer errors.</param> public ScriptAnalyzerResult(IScriptInformation script, IReadOnlyList <string> lines, IReadOnlyList <ScriptAnalyzerError> errors = null) { Script = script; Lines = lines; _references = new HashSet <string>(Collect(script, i => i.References)); _namespaces = new HashSet <string>(Collect(script, i => i.Namespaces)); _usingAliases = new HashSet <string>(Collect(script, i => i.UsingAliases)); Tools = new HashSet <PackageReference>(Collect(script, i => i.Tools)); Addins = new HashSet <PackageReference>(Collect(script, i => i.Addins)); Errors = errors ?? new List <ScriptAnalyzerError>(0); Succeeded = Errors.Count == 0; }
private static IEnumerable <T> Collect <T>(IScriptInformation script, Func <IScriptInformation, IEnumerable <T> > collector) { var stack = new Stack <IScriptInformation>(); stack.Push(script); while (stack.Count > 0) { var current = stack.Pop(); foreach (var include in current.Includes) { stack.Push(include); } foreach (var item in collector(current)) { yield return(item); } } }