/// <summary> /// 新方法-加载所有规则 /// </summary> public void LoadRules() { var files = Directory.GetFiles(config.RulefilesPath, "*.rule"); if (files == null || files.Length == 0) { throw new Exception("rule文件不存在"); } List <Region> regions = new List <Region>(); string fileName = string.Empty; StringBuilder text = new StringBuilder(); files.ToList().ForEach(file => { fileName = Path.GetFileNameWithoutExtension(file); var fileText = File.ReadAllText(file); config.FileRegion[fileName] = RegionParser.ParseRegions(fileText.ToString()); regions.AddRange(config.FileRegion[fileName]); text.AppendLine(fileText); }); if (regions == null || regions.Count == 0) { throw new Exception("region不存在"); } regions.ForEach(region => { var rules = RuleParser.ParseRules(region.RegionContent); if (regions == null || regions.Count == 0) { throw new Exception(string.Format("region '{0}' 无法找到rule", region.RegionName)); } rules.ForEach(rule => { rule.RegionName = region.RegionName; }); rules.ForEach(rule => { var key = string.Format("{0}.{1}", rule.RegionName, rule.RuleName); config.RuleDefinations[key] = rule; }); }); }
public void ParseMultipleRegions() { var parser = new RegionParser(); var source = new StringBuilder(); source.AppendLine(@"using System;"); source.AppendLine(@"using System.Collections.Generic;"); source.AppendLine(@""); source.AppendLine(@"namespace EntityFrameworkCore.Generator.Core.Tests"); source.AppendLine(@"{"); source.AppendLine(@" public partial class User"); source.AppendLine(@" {"); source.AppendLine(@" public User()"); source.AppendLine(@" {"); source.AppendLine(@" #region Generated Initializes"); source.AppendLine(@" Created = DateTimeOffset.UtcNow;"); source.AppendLine(@" Updated = DateTimeOffset.UtcNow;"); source.AppendLine(@" UserRoles = new HashSet<UserRole>();"); source.AppendLine(@" #endregion"); source.AppendLine(@" }"); source.AppendLine(@""); source.AppendLine(@" #region Generated Properties"); source.AppendLine(@" public Guid Id { get; set; }"); source.AppendLine(@" public string EmailAddress { get; set; }"); source.AppendLine(@" public DateTimeOffset Created { get; set; }"); source.AppendLine(@" public DateTimeOffset Updated { get; set; }"); source.AppendLine(@" #endregion"); source.AppendLine(@""); source.AppendLine(@" #region Generated Relationships"); source.AppendLine(@" public virtual ICollection<UserRole> UserRoles { get; set; }"); source.AppendLine(@" #endregion"); source.AppendLine(@" }"); source.AppendLine(@"}"); var result = parser.ParseRegions(source.ToString()); result.Should().NotBeNull(); result.Count.Should().Be(3); var first = result.Values.First(); first.Should().NotBeNull(); first.Name.Should().Be("Generated Initializes"); }
/// <summary> /// 原方法-加载所有规则 /// </summary> public void LoadRules0() { var files = System.IO.Directory.GetFiles(config.RulefilesPath, "*.rule"); if (files == null || files.Length == 0) { throw new Exception("rule文件不存在"); } StringBuilder text = new StringBuilder(); files.ToList().ForEach(file => { var fileText = System.IO.File.ReadAllText(file); text.AppendLine(fileText); }); List <Region> regions = RegionParser.ParseRegions(text.ToString()); if (regions == null || regions.Count == 0) { throw new Exception("region不存在"); } regions.ForEach(region => { var rules = RuleParser.ParseRules(region.RegionContent); if (regions == null || regions.Count == 0) { throw new Exception(string.Format("region '{0}' 无法找到rule", region.RegionName)); } rules.ForEach(rule => { rule.RegionName = region.RegionName; }); rules.ForEach(rule => { var key = string.Format("{0}.{1}", rule.RegionName, rule.RuleName); config.RuleDefinations[key] = rule; }); }); }
protected virtual void MergeOutput(string fullPath, string outputContent) { var outputRegions = RegionParser.ParseRegions(outputContent); var originalContent = File.ReadAllText(fullPath); var originalRegions = RegionParser.ParseRegions(originalContent); var originalBuilder = new StringBuilder(originalContent); int offset = 0; foreach (var pair in outputRegions) { var outputRegion = pair.Value; if (!originalRegions.TryGetValue(pair.Key, out var originalRegion)) { // log error continue; } int startIndex = originalRegion.StartIndex + offset; int beforeReplace = originalBuilder.Length; int length = (originalRegion.EndIndex + offset) - startIndex; originalBuilder.Remove(startIndex, length); originalBuilder.Insert(startIndex, outputRegion.Content); int afterReplace = originalBuilder.Length; offset = offset + (afterReplace - beforeReplace); } var finalContent = originalBuilder.ToString(); if (originalContent == finalContent) { return; } File.WriteAllText(fullPath, finalContent); }
public void ParseRegions() { var parser = new RegionParser(); var source = new StringBuilder(); source.AppendLine(@"using System;"); source.AppendLine(@"using System.Collections.Generic;"); source.AppendLine(@""); source.AppendLine(@"namespace EntityFrameworkCore.Generator.Core.Tests"); source.AppendLine(@"{"); source.AppendLine(@" public partial class User"); source.AppendLine(@" {"); source.AppendLine(@" #region Generated Properties"); source.AppendLine(@" public Guid Id { get; set; }"); source.AppendLine(@" #endregion"); source.AppendLine(@" }"); source.AppendLine(@"}"); var result = parser.ParseRegions(source.ToString()); result.Should().NotBeNull(); result.Count.Should().Be(1); var first = result.Values.First(); first.Should().NotBeNull(); first.Name.Should().Be("Generated Properties"); var content = new StringBuilder(); content.AppendLine(@"#region Generated Properties"); content.AppendLine(@" public Guid Id { get; set; }"); content.AppendLine(@" #endregion"); first.Content.Should().Be(content.ToString()); }
public void ParseNestedRegions() { var parser = new RegionParser(); var source = new StringBuilder(); source.AppendLine(@"using System;"); source.AppendLine(@"using System.Collections.Generic;"); source.AppendLine(@""); source.AppendLine(@"namespace EntityFrameworkCore.Generator.Core.Tests"); source.AppendLine(@"{"); source.AppendLine(@" public partial class User"); source.AppendLine(@" {"); source.AppendLine(@" #region Generated Properties"); source.AppendLine(@" public Guid Id { get; set; }"); source.AppendLine(@""); source.AppendLine(@" #region Nested Properties"); source.AppendLine(@" public string EmailAddress { get; set; }"); source.AppendLine(@" #endregion"); source.AppendLine(@""); source.AppendLine(@" #endregion"); source.AppendLine(@" }"); source.AppendLine(@"}"); var result = parser.ParseRegions(source.ToString()); result.Should().NotBeNull(); result.Count.Should().Be(2); var nested = result["Nested Properties"]; nested.Should().NotBeNull(); nested.Name.Should().Be("Nested Properties"); var nestedContent = new StringBuilder(); nestedContent.AppendLine(@"#region Nested Properties"); nestedContent.AppendLine(@" public string EmailAddress { get; set; }"); nestedContent.AppendLine(@" #endregion"); nested.Content.Should().Be(nestedContent.ToString()); var generated = result["Generated Properties"]; generated.Should().NotBeNull(); generated.Name.Should().Be("Generated Properties"); var generatedContent = new StringBuilder(); generatedContent.AppendLine(@"#region Generated Properties"); generatedContent.AppendLine(@" public Guid Id { get; set; }"); generatedContent.AppendLine(@""); generatedContent.AppendLine(@" #region Nested Properties"); generatedContent.AppendLine(@" public string EmailAddress { get; set; }"); generatedContent.AppendLine(@" #endregion"); generatedContent.AppendLine(@""); generatedContent.AppendLine(@" #endregion"); generated.Content.Should().Be(generatedContent.ToString()); }