mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-07 12:44:28 +08:00
Fixes #1961. I mostly just replaced all str annotations with Text, including in return types. This is only broadly correct; diffing a str and a unicode sequence actually results in a mixed output of str and unicode. We could also keep the return types as str if using Text causes errors in real code. For callbacks that take str, I introduced a Union alias because a callable taking a str would not be a compatible with a parameter of type Callable[[Text], bool]. I also fixed the return type of difflib.restore.
81 lines
3.5 KiB
Python
81 lines
3.5 KiB
Python
# Based on https://docs.python.org/2.7/library/difflib.html and https://docs.python.org/3.2/library/difflib.html
|
|
|
|
import sys
|
|
from typing import (
|
|
TypeVar, Callable, Iterable, Iterator, List, NamedTuple, Sequence, Tuple,
|
|
Generic, Optional, Text, Union
|
|
)
|
|
|
|
_T = TypeVar('_T')
|
|
_JunkCallback = Union[Callable[[Text], bool], Callable[[str], bool]]
|
|
|
|
Match = NamedTuple('Match', [
|
|
('a', int),
|
|
('b', int),
|
|
('size', int),
|
|
])
|
|
|
|
class SequenceMatcher(Generic[_T]):
|
|
def __init__(self, isjunk: Optional[Callable[[_T], bool]] = ...,
|
|
a: Sequence[_T] = ..., b: Sequence[_T] = ...,
|
|
autojunk: bool = ...) -> None: ...
|
|
def set_seqs(self, a: Sequence[_T], b: Sequence[_T]) -> None: ...
|
|
def set_seq1(self, a: Sequence[_T]) -> None: ...
|
|
def set_seq2(self, b: Sequence[_T]) -> None: ...
|
|
def find_longest_match(self, alo: int, ahi: int, blo: int,
|
|
bhi: int) -> Tuple[int, int, int]: ...
|
|
def get_matching_blocks(self) -> List[Match]: ...
|
|
def get_opcodes(self) -> List[Tuple[str, int, int, int, int]]: ...
|
|
def get_grouped_opcodes(self, n: int = ...
|
|
) -> Iterable[Tuple[str, int, int, int, int]]: ...
|
|
def ratio(self) -> float: ...
|
|
def quick_ratio(self) -> float: ...
|
|
def real_quick_ratio(self) -> float: ...
|
|
|
|
def get_close_matches(word: Sequence[_T], possibilities: Iterable[Sequence[_T]],
|
|
n: int = ..., cutoff: float = ...) -> List[Sequence[_T]]: ...
|
|
|
|
class Differ:
|
|
def __init__(self, linejunk: _JunkCallback = ..., charjunk: _JunkCallback = ...) -> None: ...
|
|
def compare(self, a: Sequence[Text], b: Sequence[Text]) -> Iterator[Text]: ...
|
|
|
|
def IS_LINE_JUNK(line: Text) -> bool: ...
|
|
def IS_CHARACTER_JUNK(line: Text) -> bool: ...
|
|
def unified_diff(a: Sequence[Text], b: Sequence[Text], fromfile: Text = ...,
|
|
tofile: Text = ..., fromfiledate: Text = ..., tofiledate: Text = ...,
|
|
n: int = ..., lineterm: Text = ...) -> Iterator[Text]: ...
|
|
def context_diff(a: Sequence[Text], b: Sequence[Text], fromfile: Text=...,
|
|
tofile: Text = ..., fromfiledate: Text = ..., tofiledate: Text = ...,
|
|
n: int = ..., lineterm: Text = ...) -> Iterator[Text]: ...
|
|
def ndiff(a: Sequence[Text], b: Sequence[Text],
|
|
linejunk: _JunkCallback = ...,
|
|
charjunk: _JunkCallback = ...
|
|
) -> Iterator[Text]: ...
|
|
|
|
class HtmlDiff(object):
|
|
def __init__(self, tabsize: int = ..., wrapcolumn: int = ...,
|
|
linejunk: _JunkCallback = ...,
|
|
charjunk: _JunkCallback = ...
|
|
) -> None: ...
|
|
def make_file(self, fromlines: Sequence[Text], tolines: Sequence[Text],
|
|
fromdesc: Text = ..., todesc: Text = ..., context: bool = ...,
|
|
numlines: int = ...) -> Text: ...
|
|
def make_table(self, fromlines: Sequence[Text], tolines: Sequence[Text],
|
|
fromdesc: Text = ..., todesc: Text = ..., context: bool = ...,
|
|
numlines: int = ...) -> Text: ...
|
|
|
|
def restore(delta: Iterable[Text], which: int) -> Iterator[Text]: ...
|
|
|
|
if sys.version_info >= (3, 5):
|
|
def diff_bytes(
|
|
dfunc: Callable[[Sequence[str], Sequence[str], str, str, str, str, int, str], Iterator[str]],
|
|
a: Sequence[bytes],
|
|
b: Sequence[bytes],
|
|
fromfile: bytes = ...,
|
|
tofile: bytes = ...,
|
|
fromfiledate: bytes = ...,
|
|
tofiledate: bytes = ...,
|
|
n: int = ...,
|
|
lineterm: bytes = ...
|
|
) -> Iterator[bytes]: ...
|