internal NewOrRemovedRuleReleaseTrackingLine(
     string ruleId, string category, bool?enabledByDefault,
     DiagnosticSeverity?defaultSeverity,
     TextSpan span, SourceText sourceText,
     string path, bool isShipped, ReleaseTrackingRuleEntryKind kind)
     : base(ruleId, category, enabledByDefault, defaultSeverity, span, sourceText, path, isShipped, kind)
 {
     Debug.Assert(kind == ReleaseTrackingRuleEntryKind.New || kind == ReleaseTrackingRuleEntryKind.Removed);
 }
 internal static ReleaseTrackingLine Create(
     string ruleId, string category, bool?enabledByDefault,
     DiagnosticSeverity?defaultSeverity,
     TextSpan span, SourceText sourceText,
     string path, bool isShipped, ReleaseTrackingRuleEntryKind kind)
 {
     return(new NewOrRemovedRuleReleaseTrackingLine(ruleId, category,
                                                    enabledByDefault, defaultSeverity, span, sourceText, path, isShipped, kind));
 }
 protected ReleaseTrackingLine(string ruleId, string category, bool?enabledByDefault,
                               DiagnosticSeverity?defaultSeverity,
                               TextSpan span, SourceText sourceText,
                               string path, bool isShipped, ReleaseTrackingRuleEntryKind kind)
 {
     RuleId           = ruleId;
     Category         = category;
     EnabledByDefault = enabledByDefault;
     DefaultSeverity  = defaultSeverity;
     Span             = span;
     SourceText       = sourceText;
     Path             = path;
     IsShipped        = isShipped;
     Kind             = kind;
 }
            static bool IsInvalidEntry(string[] parts, ReleaseTrackingRuleEntryKind currentRuleEntryKind)
            {
                // Expected entry for New or Removed rules has 3 or 4 parts:
                //      "Rule ID | Category | Severity | Notes"
                //
                // Expected entry for Changed rules has 5 or 6 parts:
                //      "Rule ID | New Category | New Severity | Old Category | Old Severity | Notes"
                //
                // NOTE: Last field 'Helplink' is optional for both cases.

                if (parts.Length < 3 || parts.Length > 6)
                {
                    return(true);
                }

                return(currentRuleEntryKind switch
                {
                    ReleaseTrackingRuleEntryKind.New => parts.Length > 4,
                    ReleaseTrackingRuleEntryKind.Removed => parts.Length > 4,
                    ReleaseTrackingRuleEntryKind.Changed => parts.Length <= 4,
                    _ => throw new NotImplementedException()
                });