private async Task GenerateBazelFile()

in tools/nuget2bazel/rules/StdlibCoreGenerator3.cs [34:85]


        private async Task GenerateBazelFile(string outpath, List<RefInfo> packRefs)
        {
            await using var f = new StreamWriter(outpath);
            await f.WriteLineAsync("\"\"");
            await f.WriteLineAsync();
            await f.WriteLineAsync("load(\"@io_bazel_rules_dotnet//dotnet/private:rules/stdlib.bzl\", \"core_stdlib_internal\")");
            await f.WriteLineAsync("load(\"@io_bazel_rules_dotnet//dotnet/private:rules/libraryset.bzl\", \"core_libraryset\")");
            await f.WriteLineAsync();
            await f.WriteLineAsync("# buildifier: disable=unnamed-macro");
            await f.WriteLineAsync("def define_stdlib():");
            await f.WriteLineAsync("    \"Declares stdlib\"");

            int cnt = 0;
            foreach (var p in packRefs.Select(x => x.Pack).Distinct())
            {
                var pfx = cnt == 0 ? "" : $"p{cnt}_";
                await f.WriteLineAsync("    core_libraryset(");
                if (p == "Microsoft.NETCore.App.Ref")
                    await f.WriteLineAsync("        name = \"libraryset\",");
                else
                    await f.WriteLineAsync($"        name = \"{p.Replace(".Ref", "")}\",");

                await f.WriteLineAsync("        deps = [");
                foreach (var d in packRefs.Where(x => x.Pack == p))
                {
                    await f.WriteLineAsync($"            \":{pfx}{d.Name}\",");
                }
                await f.WriteLineAsync("        ],");
                await f.WriteLineAsync("    )");

                foreach (var d in packRefs.Where(x => x.Pack == p))
                {
                    await f.WriteLineAsync($"    core_stdlib_internal(");
                    await f.WriteLineAsync($"        name = \"{pfx}{d.Name}\",");
                    await f.WriteLineAsync($"        version = \"{d.Version}\",");
                    if (d.Ref != null)
                        await f.WriteLineAsync($"        ref = \"{d.Ref}\",");
                    if (d.StdlibPath != null)
                        await f.WriteLineAsync($"        stdlib_path = \"{d.StdlibPath}\",");
                    await f.WriteLineAsync($"        deps = [");
                    foreach (var dep in d.Deps)
                    {
                        var n = dep.Replace(":", $":{pfx}");
                        await f.WriteLineAsync($"            {n},");
                    }
                    await f.WriteLineAsync($"        ],");
                    await f.WriteLineAsync($"    )");
                }

                ++cnt;
            }
        }