Meziantou.Framework.CodeOwners namespace

Classes

NameDescription
CodeOwnersEntryRepresents a single line of a CODEOWNERS file, associating a file pattern with its owners.
// Parse a CODEOWNERS file
var file = CodeOwnersFile.Parse("*.js @user1 @user2", CodeOwnersDialect.GitLab);
var entry = file.Entries[0];
Assert.Equal("*.js", entry.Pattern);
Assert.Equal(["@user1", "@user2"], entry.Owners.Select(owner => owner.ToString()));
CodeOwnersFileRepresents a parsed CODEOWNERS file.
var file = CodeOwnersFile.Parse("* @user1\n*.js @js-owner", CodeOwnersDialect.GitHub);

Assert.Equal("*", file.Entries[0].Pattern);
Assert.Equal("@user1", file.Entries[0].Owners[0].ToString());

Assert.Equal("*.js", file.Entries[1].Pattern);
Assert.Equal("@js-owner", file.Entries[1].Owners[0].ToString());
CodeOwnersParseExceptionThe exception thrown by CodeOwnersFile.Parse when a CODEOWNERS file is invalid.
CodeOwnersSectionRepresents a section in a CODEOWNERS file, which groups patterns and defines review requirements.
var content = """
    [Backend][2] @backend-team
    *.cs @csharp-owner

    ^[Optional]
    docs/* @docs-owner
    """;
var file = CodeOwnersFile.Parse(content, CodeOwnersDialect.GitLab);

var backend = file.Entries[0].Section!;
Assert.Equal("Backend", backend.Name);
Assert.Equal(2, backend.RequiredReviewerCount);

var optional = file.Entries[1].Section!;
Assert.Equal("Optional", optional.Name);
Assert.True(optional.IsOptional);

Structs

NameDescription
CodeOwnerRepresents a single owner of a CodeOwnersEntry.
var file = CodeOwnersFile.Parse("*.js @user1 docs@example.com", CodeOwnersDialect.GitLab);
var owners = file.Entries[0].Owners;

Assert.Equal(CodeOwnerType.Username, owners[0].Type);
Assert.Equal("user1", owners[0].Name);

Assert.Equal(CodeOwnerType.EmailAddress, owners[1].Type);
Assert.Equal("docs@example.com", owners[1].Name);
CodeOwnersParseErrorDescribes why a CODEOWNERS file is invalid, and where.
var isValid = CodeOwnersFile.TryParse("[Section\n* @user1", CodeOwnersDialect.GitLab, out var file, out var error);

Assert.False(isValid);
Assert.Null(file);
Assert.Equal(CodeOwnersParseErrorKind.UnterminatedSectionHeader, error.Kind);
Assert.Equal(1, error.LineNumber);
Assert.Equal(1, error.LinePosition);

Enums

NameDescription
CodeOwnerTypeSpecifies how an owner of a CODEOWNERS entry is identified.
CodeOwnersDialectSpecifies which CODEOWNERS syntax a file uses.
CodeOwnersParseErrorKindSpecifies why a CODEOWNERS file is invalid.