yog-script-analyze 0.4.0

Yog Script (.ys, .yns) analyzed: its lexer, parser and syntax tree, names resolved, the class index model — what the build and the editors read a source with.
Documentation
namespace System.Logging;

using System.Diagnostics.CodeAnalysis;

/// Log entries made fast (.NET's `LoggerMessage`): a template read once,
/// a delegate writing entries of it — no array of values made when its
/// level is off.
public static class LoggerMessage {
    /// An entry of 0 values written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, Error?> Define(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 0);
        return (logger, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[0]), error, FormattedLogValues.Message);
            }
        };
    }

    /// An entry of 1 value written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, T1, Error?> Define<T1>(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 1);
        return (logger, arg1, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[] { arg1 }), error, FormattedLogValues.Message);
            }
        };
    }

    /// An entry of 2 values written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, T1, T2, Error?> Define<T1, T2>(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 2);
        return (logger, arg1, arg2, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[] { arg1, arg2 }), error, FormattedLogValues.Message);
            }
        };
    }

    /// An entry of 3 values written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, T1, T2, T3, Error?> Define<T1, T2, T3>(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 3);
        return (logger, arg1, arg2, arg3, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[] { arg1, arg2, arg3 }), error, FormattedLogValues.Message);
            }
        };
    }

    /// An entry of 4 values written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, T1, T2, T3, T4, Error?> Define<T1, T2, T3, T4>(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 4);
        return (logger, arg1, arg2, arg3, arg4, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[] { arg1, arg2, arg3, arg4 }), error, FormattedLogValues.Message);
            }
        };
    }

    /// An entry of 5 values written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, T1, T2, T3, T4, T5, Error?> Define<T1, T2, T3, T4, T5>(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 5);
        return (logger, arg1, arg2, arg3, arg4, arg5, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[] { arg1, arg2, arg3, arg4, arg5 }), error, FormattedLogValues.Message);
            }
        };
    }

    /// An entry of 6 values written by a delegate made once: the
    /// template read when it's defined, not at each entry.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Action<ILogger, T1, T2, T3, T4, T5, T6, Error?> Define<T1, T2, T3, T4, T5, T6>(LogLevel logLevel, EventId eventId, string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 6);
        return (logger, arg1, arg2, arg3, arg4, arg5, arg6, error) => {
            if (logger.IsEnabled(logLevel)) {
                logger.Log(logLevel, eventId, new FormattedLogValues(formatter, new object?[] { arg1, arg2, arg3, arg4, arg5, arg6 }), error, FormattedLogValues.Message);
            }
        };
    }

    /// A scope of 0 values begun by a delegate made once.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Func<ILogger, IDisposable?> DefineScope(string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 0);
        return (logger) => logger.BeginScope(new FormattedLogValues(formatter, new object?[0]));
    }

    /// A scope of 1 value begun by a delegate made once.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Func<ILogger, T1, IDisposable?> DefineScope<T1>(string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 1);
        return (logger, arg1) => logger.BeginScope(new FormattedLogValues(formatter, new object?[] { arg1 }));
    }

    /// A scope of 2 values begun by a delegate made once.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Func<ILogger, T1, T2, IDisposable?> DefineScope<T1, T2>(string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 2);
        return (logger, arg1, arg2) => logger.BeginScope(new FormattedLogValues(formatter, new object?[] { arg1, arg2 }));
    }

    /// A scope of 3 values begun by a delegate made once.
    [StructuredMessageTemplate(nameof(formatString))]
    public static Func<ILogger, T1, T2, T3, IDisposable?> DefineScope<T1, T2, T3>(string formatString) {
        let formatter = new LogValuesFormatter(formatString);
        Expect(formatter, 3);
        return (logger, arg1, arg2, arg3) => logger.BeginScope(new FormattedLogValues(formatter, new object?[] { arg1, arg2, arg3 }));
    }

    /// A panic when `formatter`'s template hasn't `count` holes.
    private static void Expect(LogValuesFormatter formatter, i32 count) {
        if (formatter.ValueNames.Count != count) {
            panic!("the message template has another number of holes than the values given");
        }
    }
}