File: Config.cs
Web Access
Project: src\src\runtime\src\tools\hotreload-delta-gen\Microsoft.DotNet.HotReload.Utils.Generator\Microsoft.DotNet.HotReload.Utils.Generator.csproj (Microsoft.DotNet.HotReload.Utils.Generator)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Generic;
using System.IO;

namespace Microsoft.DotNet.HotReload.Utils.Generator;

public class Config
{

    public static ConfigBuilder Builder () => new ();

    public class ConfigBuilder {
        internal ConfigBuilder () {}

        public bool Live {get; set;} = false;

        public List<KeyValuePair<string,string>> Properties {get; set;} = new List<KeyValuePair<string,string>> ();
        public string ProjectPath {get; set; } = "";

        public string ScriptPath {get; set; } = "";

        public string OutputSummaryPath {get; set; } = "";
        public Config Bake () {
            return new MsbuildConfig(this);
        }

        public List<string> EditAndContinueCapabilities {get; set; } = new List<string>();

        public bool NoWarnUnknownCapabilities {get; set;} = false;
    }

    protected Config (ConfigBuilder builder) {
        Live = builder.Live;
        Properties = builder.Properties;
        ProjectPath = builder.ProjectPath;
        ScriptPath = builder.ScriptPath;
        OutputSummaryPath = builder.OutputSummaryPath;
        EditAndContinueCapabilities = builder.EditAndContinueCapabilities.ToArray();
        NoWarnUnknownCapabilities = builder.NoWarnUnknownCapabilities;
    }

    public bool Live { get; }

    /// Additional properties for msbuild
    public IReadOnlyList<KeyValuePair<string,string>> Properties { get; }


    /// the csproj for this project
    public string ProjectPath { get; }

    /// the files to watch for live changes
    public string LiveCodingWatchPattern { get => "*.cs"; }

    /// the directory to watch for live changes
    public string LiveCodingWatchDir { get => Path.GetDirectoryName(ProjectPath) ?? "."; }

    /// the path of a JSON script to drive the delta generation
    public string ScriptPath { get; }

    /// A path for a JSON file to collect the produced artifacts
    public string OutputSummaryPath { get; }

    /// A set of strings specifying edit and continue capabilities to pass to Roslyn
    public string[] EditAndContinueCapabilities { get; }

    /// If 'true' don't print a warning if a capability is not known.
    public bool NoWarnUnknownCapabilities {get; }
}

internal class MsbuildConfig : Config {
    internal MsbuildConfig (ConfigBuilder builder) : base (builder) {}
}