< Summary

Class:NanoCLang.Entities.StructBinding
Assembly:NanoCLang
File(s):C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Program\StructBinding.cs
Covered lines:35
Uncovered lines:3
Coverable lines:38
Total lines:74
Line coverage:92.1% (35 of 38)
Covered branches:18
Total branches:22
Branch coverage:81.8% (18 of 22)

Metrics

MethodBranch coverage Cyclomatic complexity Line coverage
.ctor(...)100%1100%
get_Definition()100%1100%
get_Body()100%1100%
get_Name()100%1100%
WellFormed(...)100%1100%
Tokens()91.66%12100%
Tokens()100%4100%
Equals(...)100%1100%
Equals(...)50%6100%
GetHashCode()100%10%
op_Equality(...)100%10%
op_Inequality(...)100%10%

File(s)

C:\GitLab-Runner\builds\JxAESPd8\0\chenmichael\nanoc\src\NanoCLang\Entities\Program\StructBinding.cs

#LineLine coverage
 1using NanoCLang.Environemnts;
 2using System;
 3using System.Collections.Generic;
 4
 5namespace NanoCLang.Entities {
 6    /// <summary>
 7    /// Provides a class for structure bindings.
 8    /// </summary>
 9    public class StructBinding : Program, IEquatable<StructBinding?> {
 10        /// <summary>
 11        /// Creates a new instance of a structure binding that binds the <paramref name="definition"/> to the structure 
 12        /// </summary>
 13        /// <param name="name">Name that the structure is bound to.</param>
 14        /// <param name="definition">Definition of the structure.</param>
 15        /// <param name="body">Program that the structure name is bound in.</param>
 2016        public StructBinding(string name, StructDefinition definition, Program body) {
 1017            Name = name;
 1018            Definition = definition;
 1019            Body = body;
 1020        }
 21        /// <summary>
 22        /// Definition of the structure.
 23        /// </summary>
 2324        public StructDefinition Definition { get; }
 25        /// <summary>
 26        /// Program that the structure name is bound in.
 27        /// </summary>
 2128        public Program Body { get; }
 29        /// <summary>
 30        /// Name that the structure is bound to.
 31        /// </summary>
 2432        public string Name { get; }
 33        /// <inheritdoc/>
 634        public override World WellFormed(GlobalEnvironment phi) {
 635            VerbConsole.WriteLine(VerbosityLevel.Default, $"WF-StructBinding: {Name}");
 1136            return phi.With(this, phi => {
 537                Definition.WellFormed(phi);
 538                return Body.WellFormed(phi);
 1039            });
 440        }
 41        /// <inheritdoc/>
 442        public override IEnumerable<StringFormatterToken> Tokens(NanoCSourceFormat args) {
 443            yield return "lets";
 444            yield return " ";
 445            yield return Name;
 846            if (args.SpaceBeforeBindingAssignment) yield return " ";
 447            yield return "=";
 848            if (args.SpaceAfterBindingAssignment) yield return " ";
 87649            foreach (var tk in Definition.Tokens(args)) yield return tk;
 450            yield return " ";
 451            yield return "in";
 452            if (args.NewlinesAfterStructBinding <= 0) yield return " ";
 3253            else for (int i = 0; i < args.NewlinesAfterStructBinding; i++) yield return new NewLineToken();
 1138254            foreach (var tk in Body.Tokens(args)) yield return tk;
 455        }
 56        /// <inheritdoc/>
 457        public override IEnumerable<StringFormatterToken> Tokens(CSourceFormat args) {
 3058            foreach (var tk in Program.PrintHeader(args)) yield return tk;
 634859            foreach (var tk in Body.Tokens(args)) yield return tk;
 460        }
 61        #region Equality checks
 62        /// <inheritdoc/>
 463        public override bool Equals(object? obj) => Equals(obj as StructBinding);
 64        /// <inheritdoc/>
 465        public bool Equals(StructBinding? other) => !(other is null) && EqualityComparer<StructDefinition>.Default.Equal
 66        /// <inheritdoc/>
 067        public override int GetHashCode() => HashCode.Combine(Definition, Body, Name);
 68        /// <inheritdoc/>
 069        public static bool operator ==(StructBinding? left, StructBinding? right) => EqualityComparer<StructBinding?>.De
 70        /// <inheritdoc/>
 071        public static bool operator !=(StructBinding? left, StructBinding? right) => !(left == right);
 72        #endregion
 73    }
 74}