fix broken type annotation imports being ignored

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.
pull/12564/head
Eli Schwartz 1 year ago committed by Xavier Claessens
parent 319b41b4c9
commit caa38dad45
  1. 2
      .github/workflows/lint.yml
  2. 2
      .mypy.ini
  3. 2
      docs/refman/loaderyaml.py
  4. 2
      mesonbuild/compilers/mixins/compcert.py
  5. 5
      mesonbuild/interpreter/compiler.py
  6. 5
      mesonbuild/mdevenv.py

@ -46,7 +46,7 @@ jobs:
- uses: actions/setup-python@v4 - uses: actions/setup-python@v4
with: with:
python-version: '3.x' 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 - run: python run_mypy.py --allver
env: env:
PYTHONUNBUFFERED: 1 PYTHONUNBUFFERED: 1

@ -2,7 +2,7 @@
strict_optional = False strict_optional = False
show_error_context = False show_error_context = False
show_column_numbers = True show_column_numbers = True
ignore_missing_imports = True ignore_missing_imports = False
implicit_reexport = False implicit_reexport = False
follow_imports = silent follow_imports = silent

@ -41,7 +41,7 @@ class Template:
class StrictTemplate(Template): class StrictTemplate(Template):
def __init__(self) -> None: 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 = { d_named_object = {
'name': Str(), 'name': Str(),

@ -20,7 +20,7 @@ import re
import typing as T import typing as T
if T.TYPE_CHECKING: if T.TYPE_CHECKING:
from envconfig import MachineInfo from ...envconfig import MachineInfo
from ...environment import Environment from ...environment import Environment
from ...compilers.compilers import Compiler from ...compilers.compilers import Compiler
else: else:

@ -30,7 +30,7 @@ if T.TYPE_CHECKING:
from ..compilers import Compiler, RunResult from ..compilers import Compiler, RunResult
from ..interpreterbase import TYPE_var, TYPE_kwargs from ..interpreterbase import TYPE_var, TYPE_kwargs
from .kwargs import ExtractRequired, ExtractSearchDirs from .kwargs import ExtractRequired, ExtractSearchDirs
from .interpreter.interpreter import SourceOutputs from .interpreter import SourceOutputs
from ..mlog import TV_LoggableList from ..mlog import TV_LoggableList
from typing_extensions import TypedDict, Literal from typing_extensions import TypedDict, Literal
@ -856,7 +856,8 @@ class CompilerHolder(ObjectHolder['Compiler']):
) )
def preprocess_method(self, args: T.Tuple[T.List['mesonlib.FileOrString']], kwargs: 'PreprocessKW') -> T.List[build.CustomTargetIndex]: def preprocess_method(self, args: T.Tuple[T.List['mesonlib.FileOrString']], kwargs: 'PreprocessKW') -> T.List[build.CustomTargetIndex]:
compiler = self.compiler.get_preprocessor() 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): 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, FeatureNew.single_use('compiler.preprocess with generated sources', '1.1.0', self.subproject,
location=self.current_node) location=self.current_node)

@ -5,6 +5,7 @@ import argparse
import tempfile import tempfile
import shutil import shutil
import itertools import itertools
import typing as T
from pathlib import Path from pathlib import Path
from . import build, minstall from . import build, minstall
@ -12,9 +13,9 @@ from .mesonlib import (EnvironmentVariables, MesonException, is_windows, setup_v
get_wine_shortpath, MachineChoice) get_wine_shortpath, MachineChoice)
from . import mlog from . import mlog
import typing as T
if T.TYPE_CHECKING: if T.TYPE_CHECKING:
from .backends import InstallData from .backend.backends import InstallData
POWERSHELL_EXES = {'pwsh.exe', 'powershell.exe'} POWERSHELL_EXES = {'pwsh.exe', 'powershell.exe'}

Loading…
Cancel
Save