77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
"""
|
|
This module provides the simple backend for :class:`~pathspec.pathspec.PathSpec`.
|
|
|
|
WARNING: The *pathspec._backends.simple* package is not part of the public API.
|
|
Its contents and structure are likely to change.
|
|
"""
|
|
|
|
from collections.abc import (
|
|
Sequence)
|
|
from typing import (
|
|
Optional) # Replaced by `X | None` in 3.10.
|
|
|
|
from pathspec.backend import (
|
|
_Backend)
|
|
from pathspec.pattern import (
|
|
Pattern)
|
|
from pathspec._typing import (
|
|
override) # Added in 3.12.
|
|
from pathspec.util import (
|
|
check_match_file)
|
|
|
|
from .._utils import (
|
|
enumerate_patterns)
|
|
|
|
|
|
class SimplePsBackend(_Backend):
|
|
"""
|
|
The :class:`SimplePsBackend` class is the default (or simple) implementation
|
|
used by :class:`~pathspec.pathspec.PathSpec` for matching files.
|
|
"""
|
|
|
|
def __init__(
|
|
self,
|
|
patterns: Sequence[Pattern],
|
|
*,
|
|
no_filter: Optional[bool] = None,
|
|
no_reverse: Optional[bool] = None,
|
|
) -> None:
|
|
"""
|
|
Initialize the :class:`SimplePsBackend` instance.
|
|
|
|
*patterns* (:class:`Sequence` of :class:`.Pattern`) contains the compiled
|
|
patterns.
|
|
|
|
*no_filter* (:class:`bool`) is whether to keep no-op patterns (:data:`True`),
|
|
or remove them (:data:`False`).
|
|
|
|
*no_reverse* (:class:`bool`) is whether to keep the pattern order
|
|
(:data:`True`), or reverse the order (:data:`True`).
|
|
"""
|
|
|
|
self._is_reversed: bool = not no_reverse
|
|
"""
|
|
*_is_reversed* (:class:`bool`) is whether to the pattern order was reversed.
|
|
"""
|
|
|
|
self._patterns: list[tuple[int, Pattern]] = enumerate_patterns(
|
|
patterns, filter=not no_filter, reverse=not no_reverse,
|
|
)
|
|
"""
|
|
*_patterns* (:class:`list` of :class:`tuple`) contains the enumerated
|
|
patterns.
|
|
"""
|
|
|
|
@override
|
|
def match_file(self, file: str) -> tuple[Optional[bool], Optional[int]]:
|
|
"""
|
|
Check the file against the patterns.
|
|
|
|
*file* (:class:`str`) is the normalized file path to check.
|
|
|
|
Returns a :class:`tuple` containing whether to include *file* (:class:`bool`
|
|
or :data:`None`), and the index of the last matched pattern (:class:`int` or
|
|
:data:`None`).
|
|
"""
|
|
return check_match_file(self._patterns, file, self._is_reversed)
|