IEnumerable <MemberDeclarationSyntax> GenerateSyncEntityClass(SemanticModel model, ClassDeclarationSyntax entityClass) { ScriptObject scriptObject = ExtractDataForSync(model, entityClass); var context = new TemplateContext(); context.PushGlobal(scriptObject); var code = _syncEntityTemplate.Render(context); context.PopGlobal(); var syntaxTree = CSharpSyntaxTree.ParseText(code); var cds = syntaxTree.GetRoot().DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>(); return(cds); }
public string Render(object model = null) { var context = new LiquidTemplateContext { TemplateLoader = FileSystem }; var obj = new ScriptObject(); if (model != null) { obj.Import(model); } context.PushGlobal(obj); return(_template.Render(context)); }
public string Generate(Type recordType) { var typeInfo = new TypeInfo(recordType); ISet <TypeInfo> dependencies = new HashSet <TypeInfo>(); typeInfo.CollectDependencies(dependencies); var scriptObject = new ScriptObject(); scriptObject["type"] = typeInfo; scriptObject["dependencies"] = dependencies; var context = new Scriban.TemplateContext(); context.PushGlobal(scriptObject); return(template.Render(context)); }
private IEnumerable <MemberDeclarationSyntax> GenerateMessage(SemanticModel model, MethodDeclarationSyntax method, string className) { List <MsgArg> args = new List <MsgArg>(); foreach (var param in method.ParameterList.Parameters) { args.Add(new MsgArg() { Name = param.Identifier.ValueText, Type = param.Type.ToString(), Ghost = InheritsFrom("NetworkEngine.SyncObject", model.GetTypeInfo(param.Type).Type) }); } var scriptObject = new ScriptObject(); scriptObject.Import(new { Entity = className, Method = method.Identifier.ValueText, Class = className, Arguments = args, Id = (int)Crc64CodeGen.Compute((className + method.Identifier.ValueText)) }); scriptObject.Import(nameof(PutToStreamFromType), (Func <bool, string, string, string>)((b, str, str2) => PutToStreamFromType(b, str, str2))); scriptObject.Import(nameof(GetFromStreamFromType), (Func <bool, string, string, string>)((b, str, str2) => GetFromStreamFromType(b, str, str2))); scriptObject.Import(nameof(GetTagForProp), (Func <string, int, string>)((str, i) => GetTagForProp(str, i))); var code = _messageTemplate.Render(scriptObject); var syntaxTree = CSharpSyntaxTree.ParseText(code); var cds = syntaxTree.GetRoot().DescendantNodesAndSelf().OfType <ClassDeclarationSyntax>(); //foreach (var cd in cds.ToArray()) // cds = cds.Concat(new[] { GenerateSyncObjClass(model, cd) }); return(cds); }
public static void Test() { var result = compile.Render(hash); //Console.WriteLine(result); }