Skip to content

Commit

Permalink
fix broken type annotation imports being ignored
Browse files Browse the repository at this point in the history
If an annotation could not be resolved, it's classified as a "missing
import" and our configuration ignored it:

```
Skipping analyzing "mesonbuild.backends": module is installed, but missing library stubs or py.typed marker
```

As far as mypy is concerned, this library may or may not exist, but it
doesn't have any typing information at all (may need to be installed
first).

We ignored this because of our docs/ and tools/ thirdparty dependencies,
but we really should not. It is trivial to install them, and then
enforce that this "just works".

By enforcing it, we also make sure typos get caught.
  • Loading branch information
eli-schwartz authored and xclaesse committed Nov 26, 2023
1 parent 319b41b commit caa38da
Show file tree
Hide file tree
Showing 6 changed files with 10 additions and 8 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ jobs:
- uses: actions/setup-python@v4
with:
python-version: '3.x'
- run: python -m pip install mypy types-PyYAML
- run: python -m pip install mypy coverage types-PyYAML types-tqdm types-chevron
- run: python run_mypy.py --allver
env:
PYTHONUNBUFFERED: 1
Expand Down
2 changes: 1 addition & 1 deletion .mypy.ini
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
strict_optional = False
show_error_context = False
show_column_numbers = True
ignore_missing_imports = True
ignore_missing_imports = False
implicit_reexport = False

follow_imports = silent
Expand Down
2 changes: 1 addition & 1 deletion docs/refman/loaderyaml.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class Template:

class StrictTemplate(Template):
def __init__(self) -> None:
from strictyaml import Map, MapPattern, Optional, Str, Seq, Int, Bool, EmptyList, OrValidator
from strictyaml import Map, MapPattern, Optional, Str, Seq, Int, Bool, EmptyList, OrValidator # type: ignore[import-untyped]

d_named_object = {
'name': Str(),
Expand Down
2 changes: 1 addition & 1 deletion mesonbuild/compilers/mixins/compcert.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import typing as T

if T.TYPE_CHECKING:
from envconfig import MachineInfo
from ...envconfig import MachineInfo
from ...environment import Environment
from ...compilers.compilers import Compiler
else:
Expand Down
5 changes: 3 additions & 2 deletions mesonbuild/interpreter/compiler.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
from ..compilers import Compiler, RunResult
from ..interpreterbase import TYPE_var, TYPE_kwargs
from .kwargs import ExtractRequired, ExtractSearchDirs
from .interpreter.interpreter import SourceOutputs
from .interpreter import SourceOutputs
from ..mlog import TV_LoggableList

from typing_extensions import TypedDict, Literal
Expand Down Expand Up @@ -856,7 +856,8 @@ def get_argument_syntax_method(self, args: T.List['TYPE_var'], kwargs: 'TYPE_kwa
)
def preprocess_method(self, args: T.Tuple[T.List['mesonlib.FileOrString']], kwargs: 'PreprocessKW') -> T.List[build.CustomTargetIndex]:
compiler = self.compiler.get_preprocessor()
sources: 'SourceOutputs' = self.interpreter.source_strings_to_files(args[0])
_sources: T.List[mesonlib.File] = self.interpreter.source_strings_to_files(args[0])
sources = T.cast('T.List[SourceOutputs]', _sources)
if any(isinstance(s, (build.CustomTarget, build.CustomTargetIndex, build.GeneratedList)) for s in sources):
FeatureNew.single_use('compiler.preprocess with generated sources', '1.1.0', self.subproject,
location=self.current_node)
Expand Down
5 changes: 3 additions & 2 deletions mesonbuild/mdevenv.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
import tempfile
import shutil
import itertools
import typing as T

from pathlib import Path
from . import build, minstall
from .mesonlib import (EnvironmentVariables, MesonException, is_windows, setup_vsenv, OptionKey,
get_wine_shortpath, MachineChoice)
from . import mlog

import typing as T

if T.TYPE_CHECKING:
from .backends import InstallData
from .backend.backends import InstallData

POWERSHELL_EXES = {'pwsh.exe', 'powershell.exe'}

Expand Down

0 comments on commit caa38da

Please sign in to comment.