Skip to content

Kinds, families, and categories

Every rule names a kind: the built-in check it runs. alint ships 94 distinct kinds (105 counting aliases), and it organizes them two ways at once. Each kind has one home family, and each kind is tagged into one or more categories. Same thirteen names, two different relationships.

Kinds, families, and categories Each rule kind belongs to exactly one family (its colored home group) but can be tagged into several categories. file_exists is in the Existence family and the existence category. no_bidi_controls is in the Security / Unicode sanity family, tagged security-unicode-sanity and encoding. dir_contains is in the Cross-file family, tagged cross-file and structure. filename_case is in the Naming family and the naming category. 105 kinds, 13 families, 13 categories. one family, many categories 105 kinds · 13 families · 13 categories file_exists Existence existence no_bidi_controls Security security-unicode-sanity encoding dir_contains Cross-file cross-file structure filename_case Naming naming colored band = the one family a kind belongs to chips = its categories; 32 kinds carry more than one, so categories cross-cut the families

A kind is the built-in implementation a rule invokes: file_exists, no_bidi_controls, filename_case, json_schema_passes, and 90 more. Every rule declares exactly one, and the kind is what decides which extra fields the rule accepts (a file_header takes a pattern, a file_max_size takes a byte limit). A handful of kinds have aliases, second names for the same implementation, which is why the catalog counts 105 entries for 94 distinct checks.

The 94 kinds are partitioned into 13 families by mechanism: Existence, Content, Naming, Structure, Cross-file, Security / Unicode sanity, Text hygiene, Encoding, Portable metadata, Unix metadata, Git hygiene, Structured query, and Plugin (tier 1). Every kind belongs to exactly one family, so the families are a clean table of contents for the catalog. alint rules list prints the kinds grouped this way.

The 13 categories carry the same thirteen names, but the relationship is many-to-many: a kind can be tagged with several. A kind’s home family is always its primary category, and 32 kinds carry extra tags on top. no_bidi_controls lives in the Security family but is also tagged encoding; dir_contains lives in Cross-file but is also tagged structure. That is the whole distinction: family answers “where does this kind live?” (one answer), category answers “what concerns does it touch?” (often several). Categories are what you filter on when you want every check that bears on, say, security, regardless of which family implements it.

Browse the catalog by family, or filter it by category:

alint rules list # every kind alint ships, grouped by family
alint rules list --category security-unicode-sanity # only kinds in that category
alint list --category security-unicode-sanity # only YOUR configured rules in it

An unknown category slug fails fast with the list of the thirteen valid ones, so a typo never silently returns nothing.

  • Rules is the full reference for every kind, grouped by family, with each kind’s fields and examples.
  • The config model shows how a kind sits inside the rule record.