Mercurial > hg
view mercurial/thirdparty/xdiff/xtypes.h @ 49803:55d45d0de4e7
typing: add type hints to pycompat.bytestr
The problem with leaving pytype to its own devices here was that for functions
that returned a bytestr, pytype inferred `Union[bytes, int]`. It now accepts
that it can be treated as plain bytes.
I wasn't able to figure out the arg type for `__getitem__`- `SupportsIndex`
(which PyCharm indicated is how the superclass function is typed) got flagged:
File "/mnt/c/Users/Matt/hg/mercurial/pycompat.py", line 236, in __getitem__:
unsupported operand type(s) for item retrieval: bytestr and SupportsIndex [unsupported-operands]
Function __getitem__ on bytestr expects int
But some caller got flagged when I marked it as `int`.
There's some minor spillover problems elsewhere- pytype doesn't seem to
recognize that `bytes.startswith()` can optionally take a 3rd and 4th arg, so
those few places have the warning disabled. It also flags where the tar API is
being abused, but that would be a tricky refactor (and would require typing
extensions until py3.7 is dropped), so disable those too.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Wed, 14 Dec 2022 01:51:33 -0500 |
parents | 882657a9f768 |
children |
line wrap: on
line source
/* * LibXDiff by Davide Libenzi ( File Differential Library ) * Copyright (C) 2003 Davide Libenzi * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, see * <http://www.gnu.org/licenses/>. * * Davide Libenzi <davidel@xmailserver.org> * */ #if !defined(XTYPES_H) #define XTYPES_H typedef struct s_chanode { struct s_chanode *next; int64_t icurr; } chanode_t; typedef struct s_chastore { chanode_t *head, *tail; int64_t isize, nsize; chanode_t *ancur; chanode_t *sncur; int64_t scurr; } chastore_t; typedef struct s_xrecord { struct s_xrecord *next; char const *ptr; int64_t size; uint64_t ha; } xrecord_t; typedef struct s_xdfile { /* manual memory management */ chastore_t rcha; /* number of records (lines) */ int64_t nrec; /* hash table size * the maximum hash value in the table is (1 << hbits) */ unsigned int hbits; /* hash table, hash value => xrecord_t * note: xrecord_t is a linked list. */ xrecord_t **rhash; /* range excluding common prefix and suffix * [recs[i] for i in range(0, dstart)] are common prefix. * [recs[i] for i in range(dstart, dend + 1 - dstart)] are interesting * lines */ int64_t dstart, dend; /* pointer to records (lines) */ xrecord_t **recs; /* record changed, use original "recs" index * rchag[i] can be either 0 or 1. 1 means recs[i] (line i) is marked * "changed". */ char *rchg; /* cleaned-up record index => original "recs" index * clean-up means: * rule 1. remove common prefix and suffix * rule 2. remove records that are only on one side, since they can * not match the other side * rindex[0] is likely dstart, if not removed up by rule 2. * rindex[nreff - 1] is likely dend, if not removed by rule 2. */ int64_t *rindex; /* rindex size */ int64_t nreff; /* cleaned-up record index => hash value * ha[i] = recs[rindex[i]]->ha */ uint64_t *ha; } xdfile_t; typedef struct s_xdfenv { xdfile_t xdf1, xdf2; /* number of lines for common prefix and suffix that are removed * from xdf1 and xdf2 as a preprocessing step */ int64_t nprefix, nsuffix; } xdfenv_t; #endif /* #if !defined(XTYPES_H) */