Crate codeowners_rs

source ·
Expand description

This is a library for working with GitHub CODEOWNERS files. CODEOWNERS files declare which GitHub users or teams are responsible for files in a repository. The pattern syntax is loosely based on the glob-style patterns used in .gitignore files.

Parsing CODEOWNERS files

The parse and parse_file functions can be used to parse a CODEOWNERS file into a parser::ParseResult, which wraps a vec of parser::Rules and a vec of any parser::ParseErrors that were encountered. The parser::Rule struct contains full syntactic information about the rule, including the leading and trailing comments, and the byte offsets for each component of the rule. This is useful when you care about the CODEOWNERS syntax, for instance when writing a syntax highlighter, but it’s not very ergonomic for most use cases.

The RuleSet struct provides a more ergonomic interface for working with CODEOWNERS files. It can be constructed by calling into_ruleset on a parser::ParseResult.

Matching paths against CODEOWNERS files

The RuleSet struct provides a owners method that can be used to match a path against a CODEOWNERS file. To get the matching rule rather than just the owners, use the matching_rule method.

Example

use codeowners_rs::{parse, RuleSet};

let ruleset = parse("
*.rs @github/rustaceans
/docs/**/*.md @github/docs-team
").into_ruleset();

for path in &["src/main.rs", "docs/README.md", "README.md"] {
   let owners = ruleset.owners(path);
   println!("{}: {:?}", path, owners);
}

Command line interface

There is a companion binary crate that provides a simple CLI for matching paths against a CODEOWNERS file.

Re-exports

Modules

Structs

  • RuleSet is a collection of CODEOWNERS rules that can be matched together against a given path. It is constructed by passing a Vec of Rule structs to RuleSet::new. For convenience, RuleSet::from_reader can be used to parse a CODEOWNERS file and construct a RuleSet from it.