示例#1
0
        /// <summary>
        /// Conditionally removes existing regions that should not remain and returns an updated
        /// collection including the members of removed regions.
        /// </summary>
        /// <param name="codeItems">The code items.</param>
        /// <returns>An updated code items collection.</returns>
        private IEnumerable <BaseCodeItem> RegionsRemoveExisting(IEnumerable <BaseCodeItem> codeItems)
        {
            if (!Settings.Default.Reorganizing_RegionsRemoveExistingRegions)
            {
                return(codeItems);
            }

            while (true)
            {
                var regionsToRemove = _generateRegionLogic.GetRegionsToRemove(codeItems);
                _removeRegionLogic.RemoveRegions(regionsToRemove);

                var removedRegionsChildren = regionsToRemove.SelectMany(x => x.Children);

                // Update the code items collection by excluding the removed regions and including those region's direct children.
                codeItems = codeItems.Except(regionsToRemove).Union(removedRegionsChildren);

                // If there were any nested regions in those regions that were removed, loop back over again.
                if (removedRegionsChildren.Any(x => x is CodeItemRegion))
                {
                    continue;
                }

                return(codeItems);
            }
        }
        /// <summary>
        /// Conditionally removes existing regions that should not remain and returns an updated
        /// collection including the members of removed regions.
        /// </summary>
        /// <param name="codeItems">The code items.</param>
        /// <returns>An updated code items collection.</returns>
        private IEnumerable <BaseCodeItem> RegionsRemoveExisting(IEnumerable <BaseCodeItem> codeItems)
        {
            if (!Settings.Default.Reorganizing_RegionsRemoveExistingRegions)
            {
                return(codeItems);
            }

            while (true)
            {
                var regionsToRemove                = _generateRegionLogic.GetRegionsToRemove(codeItems).ToList();
                var regionsToRemoveChildren        = regionsToRemove.SelectMany(x => x.Children).ToList();
                var regionsToRemoveChildrenRegions = regionsToRemoveChildren.OfType <CodeItemRegion>().ToList();

                // Nested regions do not track points well, so offset cursor position by 1 as a workaround.
                foreach (var nestedRegion in regionsToRemoveChildrenRegions)
                {
                    nestedRegion.StartPoint.CharRight();
                    nestedRegion.EndPoint.CharRight();
                }

                _removeRegionLogic.RemoveRegions(regionsToRemove);

                // Reverse offset of cursor position for nested regions.
                foreach (var nestedRegion in regionsToRemoveChildrenRegions)
                {
                    nestedRegion.StartPoint.CharLeft();
                    nestedRegion.EndPoint.CharLeft();
                }

                // Update the code items collection by excluding the removed regions and including those region's direct children.
                codeItems = codeItems.Except(regionsToRemove).Union(regionsToRemoveChildren);

                // If there were any nested regions in those regions that were removed, loop back over again.
                if (regionsToRemoveChildrenRegions.Any())
                {
                    continue;
                }

                return(codeItems);
            }
        }