Skip to content

Registry

Module containing registered rules and functions to update/discover them.

Info

Provided functions do not change the registry contents as it is managed automatically during rule creation.

Tip

When creating custom linter, you should check lintkit.registry.inject function for an option to easily pass configuration data.

lintkit.registry.codes

codes()

Get all registered rule codes.

Returns:

Type Description
tuple[int, ...]

A tuple of all registered rule codes.

Source code in src/lintkit/registry.py
def codes() -> tuple[int, ...]:
    """Get all registered rule codes.

    Returns:
        A tuple of all registered rule codes.

    """
    return tuple(_registry.keys())

lintkit.registry.rules

rules()

Get all registered rules.

Returns:

Type Description
tuple[Rule, ...]

A tuple of all registered rules.

Source code in src/lintkit/registry.py
def rules() -> tuple[Rule, ...]:
    """Get all registered rules.

    Returns:
        A tuple of all registered rules.

    """
    return tuple(_registry.values())

lintkit.registry.inject

inject(attribute, value)

Inject an attribute into all rules.

Tip

This is useful for injecting custom attributes into all rules, such as a custom configuration or a shared resource.

Example:

import lintkit

config = {"example": "value"}

# Now all rules can access config and use it
lintkit.registry.inject("config", config)

Parameters:

Name Type Description Default
attribute str

The name of the attribute to inject.

required
value Any

The value to inject.

required
Source code in src/lintkit/registry.py
def inject(attribute: str, value: typing.Any) -> None:
    """Inject an attribute into all rules.

    Tip:
        This is useful for injecting custom attributes into all rules,
        such as a custom configuration or a shared resource.

    Example:
    ```python
    import lintkit

    config = {"example": "value"}

    # Now all rules can access config and use it
    lintkit.registry.inject("config", config)
    ```

    Args:
        attribute:
            The name of the attribute to inject.
        value:
            The value to inject.

    """
    for rule in _registry.values():
        setattr(type(rule), attribute, value)

lintkit.registry.query

query(include_codes=None, exclude_codes=None)

Query the registry for rules.

Warning

exclude takes precedence over include

Example:

import lintkit

for rule in lintkit.registry.query(exclude_codes=[1, 2, 3]):
    print(rule.code, rule.description)

Parameters:

Name Type Description Default
include_codes Iterable[int] | None

The codes of the rules to include, if any.

None
exclude_codes Iterable[int] | None

The codes of the rules to exclude, if any. (takes precedence over include_codes).

None

Returns:

Type Description
Iterator[Rule]

An iterator over the rules that match the query.

Source code in src/lintkit/registry.py
def query(
    include_codes: Iterable[int] | None = None,
    exclude_codes: Iterable[int] | None = None,
) -> Iterator[Rule]:
    """Query the registry for rules.

    Warning:
        `exclude` takes precedence over `include`

    Example:
    ```python
    import lintkit

    for rule in lintkit.registry.query(exclude_codes=[1, 2, 3]):
        print(rule.code, rule.description)
    ```

    Args:
        include_codes:
            The codes of the rules to include, if any.
        exclude_codes:
            The codes of the rules to exclude, if any.
            (takes precedence over `include_codes`).

    Returns:
        An iterator over the rules that match the query.

    """
    codes = _process(_registry.keys(), include_codes, exclude_codes)
    return (rule for code, rule in _registry.items() if code in codes)