private List <PowershellItem> GetItemsInRegion(PowershellItem item, PowershellRegion region, List <PowershellItem> result) { if (item.StartLine > region.StartLine && item.StartLine < region.EndLine) { result.Add(item); return(result); } foreach (PowershellItem child in item.Children) { result = GetItemsInRegion(child, region, result); } return(result); }
private List <PowershellRegion> GetPowershellRegions(string fileContents) { if (string.IsNullOrWhiteSpace(fileContents)) { return(new List <PowershellRegion>()); } int lineNum = 1; StringReader strReader = new StringReader(fileContents); List <PowershellRegion> result = new List <PowershellRegion>(); Stack <PowershellRegion> currentRegions = new Stack <PowershellRegion>(); while (true) { string line = strReader.ReadLine(); if (line == null) { break; } line = line.Trim(); if (line.ToLower().StartsWith("#region")) { PowershellRegion newRegion = new PowershellRegion(); newRegion.StartLine = lineNum; newRegion.Name = line.Substring(8); currentRegions.Push(newRegion); } else if (line.ToLower().StartsWith("#endregion") && currentRegions.Count != 0) { PowershellRegion region = currentRegions.Pop(); region.EndLine = lineNum; result.Add(region); } lineNum++; } return(result); }
private PowershellItem ConvertRegionToPowershellItem(PowershellRegion region, PowershellItem firstItemInRegion) { return(new PowershellItem(Enums.PowershellItemType.Region, region.Name, region.StartLine, 0, region.Name.Length + 8, firstItemInRegion.NestingLevel, firstItemInRegion.Parent, null)); }
private List <PowershellItem> GetItemsInRegionWithMinimalNesting(PowershellItem rootItem, PowershellRegion region) { List <PowershellItem> itemsInRegion = GetItemsInRegion(rootItem, region, new List <PowershellItem>()); if (!itemsInRegion.Any()) { return(itemsInRegion); } int minimalNesting = itemsInRegion.Min(item => item.NestingLevel); return(itemsInRegion.Where(item => item.NestingLevel == minimalNesting).ToList()); }