Skip to content
Snippets Groups Projects

Run pytype on the interfaces package

Merged Matt Harbison requested to merge topic/default/pytype-interfaces into branch/default
  1. Dec 07, 2024
    • Matt Harbison's avatar
      tests: enable pytype checking on `mercurial/interfaces` package · b2821a846470
      Matt Harbison authored
      I might regret this, but the files currently scan OK, with the exception of one
      place where an `attribute-error` is now disabled.  We should fix this somehow,
      but the rest of this package needs to be converted to Protocol classes first.
      
      I'm enabling checking on this now because I got to the tail end of the series
      converting this to Protocol classes, and suddenly one of the commits is causing
      pytype to fail with an error message that doesn't really jive with the few code
      changes in it.  Then when I ran `pytype-single` on it to get a result faster, I
      got a host of other unexpected errors that were likely from earlier in the
      series.  So first things first, strictly check the content of these files going
      forward.
      b2821a846470
    • Matt Harbison's avatar
      interfaces: mark a few dirstate methods abstract · 2c8c46c3c401
      Matt Harbison authored
      I'm not sure what's going on here, but when enabling pytype checking on this
      package, it spits out the following errors:
      
          File "/mnt/c/Users/Matt/hg/mercurial/interfaces/dirstate.py", line 136, in changing_parents:
              bad return type [bad-return-type]
                     Expected: Iterator
            Actually returned: None
            Attributes of protocol Iterator are not implemented on None: __next__
          File "/mnt/c/Users/Matt/hg/mercurial/interfaces/dirstate.py", line 145, in changing_files:
              bad return type [bad-return-type]
                     Expected: Iterator
            Actually returned: None
            Attributes of protocol Iterator are not implemented on None: __next__
      
      I guess technically that's true, because these methods only have a doc comment,
      and don't explicitly return something or unconditionally raise an error.  The
      strange thing is that both before and after this change, the *.pyi file that is
      generated is unchanged, and contains:
      
            def changing_files(self, repo) -> contextlib._GeneratorContextManager: ...
            def changing_parents(self, repo) -> contextlib._GeneratorContextManager: ...
      
      I'm not sure if the `@abstractmethod` should be the most inner or most outer
      decoration.  We'll roll the dice with being the innermost, because that's how
      `@abstractproperty` says it should be used in conjunction with `@property`.
      
      We should probably make all of the methods without an actual body abstract, like
      was done for some `mercurial.wireprototypes` classes in fd200f5bcaea.  But let's
      hold off for now and do that enmass later.
      2c8c46c3c401
Loading