move a bunch of imports into TYPE_CHECKING blocks

These are only used for type checking, so don't bother importing them at
runtime.

Generally add future annotations at the same time, to make sure that
existing uses of these imports don't need to be quoted.
pull/10166/head
Eli Schwartz 3 years ago
parent 05cfe756f1
commit c9938f8f60
No known key found for this signature in database
GPG Key ID: CEB167EFB5722BD6
  1. 5
      mesonbuild/dependencies/dev.py
  2. 8
      mesonbuild/interpreter/dependencyfallbacks.py
  3. 8
      mesonbuild/interpreter/interpreterobjects.py
  4. 2
      mesonbuild/modules/fs.py
  5. 4
      mesonbuild/modules/gnome.py
  6. 12
      mesonbuild/modules/java.py
  7. 7
      mesonbuild/modules/qt.py
  8. 16
      mesonbuild/scripts/depscan.py
  9. 5
      mesonbuild/scripts/run_tool.py

@ -29,7 +29,7 @@ from mesonbuild.interpreterbase.decorators import FeatureDeprecated
from .. import mesonlib, mlog from .. import mesonlib, mlog
from ..compilers import AppleClangCCompiler, AppleClangCPPCompiler, detect_compiler_for from ..compilers import AppleClangCCompiler, AppleClangCPPCompiler, detect_compiler_for
from ..environment import get_llvm_tool_names from ..environment import get_llvm_tool_names
from ..mesonlib import version_compare, stringlistify, extract_as_list, MachineChoice from ..mesonlib import version_compare, stringlistify, extract_as_list
from .base import DependencyException, DependencyMethods, strip_system_libdirs, SystemDependency from .base import DependencyException, DependencyMethods, strip_system_libdirs, SystemDependency
from .cmake import CMakeDependency from .cmake import CMakeDependency
from .configtool import ConfigToolDependency from .configtool import ConfigToolDependency
@ -39,7 +39,8 @@ from .pkgconfig import PkgConfigDependency
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 ..mesonlib import MachineChoice
from typing_extensions import TypedDict from typing_extensions import TypedDict
class JNISystemDependencyKW(TypedDict): class JNISystemDependencyKW(TypedDict):

@ -1,5 +1,6 @@
from .interpreterobjects import SubprojectHolder, extract_required_kwarg from __future__ import annotations
from .interpreterobjects import extract_required_kwarg
from .. import mlog from .. import mlog
from .. import dependencies from .. import dependencies
from .. import build from .. import build
@ -7,12 +8,13 @@ from ..wrap import WrapMode
from ..mesonlib import OptionKey, extract_as_list, stringlistify, version_compare_many, listify from ..mesonlib import OptionKey, extract_as_list, stringlistify, version_compare_many, listify
from ..dependencies import Dependency, DependencyException, NotFoundDependency from ..dependencies import Dependency, DependencyException, NotFoundDependency
from ..interpreterbase import (MesonInterpreterObject, FeatureNew, from ..interpreterbase import (MesonInterpreterObject, FeatureNew,
InterpreterException, InvalidArguments, InterpreterException, InvalidArguments)
TYPE_nkwargs, TYPE_nvar)
import typing as T import typing as T
if T.TYPE_CHECKING: if T.TYPE_CHECKING:
from .interpreter import Interpreter from .interpreter import Interpreter
from ..interpreterbase import TYPE_nkwargs, TYPE_nvar
from .interpreterobjects import SubprojectHolder
class DependencyFallbacksHolder(MesonInterpreterObject): class DependencyFallbacksHolder(MesonInterpreterObject):

@ -16,10 +16,10 @@ from ..modules import ModuleReturnValue, ModuleObject, ModuleState, ExtensionMod
from ..backend.backends import TestProtocol from ..backend.backends import TestProtocol
from ..interpreterbase import ( from ..interpreterbase import (
ContainerTypeInfo, KwargInfo, MesonOperator, ContainerTypeInfo, KwargInfo, MesonOperator,
InterpreterObject, MesonInterpreterObject, ObjectHolder, MutableInterpreterObject, MesonInterpreterObject, ObjectHolder, MutableInterpreterObject,
FeatureCheckBase, FeatureNew, FeatureDeprecated, FeatureNew, FeatureDeprecated,
typed_pos_args, typed_kwargs, typed_operator, typed_pos_args, typed_kwargs, typed_operator,
noArgsFlattening, noPosargs, noKwargs, unholder_return, TYPE_var, TYPE_kwargs, TYPE_nvar, TYPE_nkwargs, noArgsFlattening, noPosargs, noKwargs, unholder_return,
flatten, resolve_second_level_holders, InterpreterException, InvalidArguments, InvalidCode) flatten, resolve_second_level_holders, InterpreterException, InvalidArguments, InvalidCode)
from ..interpreter.type_checking import NoneType, ENV_SEPARATOR_KW from ..interpreter.type_checking import NoneType, ENV_SEPARATOR_KW
from ..dependencies import Dependency, ExternalLibrary, InternalDependency from ..dependencies import Dependency, ExternalLibrary, InternalDependency
@ -32,7 +32,7 @@ if T.TYPE_CHECKING:
from . import kwargs from . import kwargs
from ..cmake.interpreter import CMakeInterpreter from ..cmake.interpreter import CMakeInterpreter
from ..envconfig import MachineInfo from ..envconfig import MachineInfo
from ..interpreterbase import SubProject from ..interpreterbase import FeatureCheckBase, InterpreterObject, SubProject, TYPE_var, TYPE_kwargs, TYPE_nvar, TYPE_nkwargs
from .interpreter import Interpreter from .interpreter import Interpreter
from typing_extensions import TypedDict from typing_extensions import TypedDict

@ -21,7 +21,6 @@ from .. import mlog
from . import ExtensionModule from . import ExtensionModule
from ..mesonlib import ( from ..mesonlib import (
File, File,
FileOrString,
MesonException, MesonException,
path_is_in_root, path_is_in_root,
) )
@ -30,6 +29,7 @@ from ..interpreterbase import FeatureNew, KwargInfo, typed_kwargs, typed_pos_arg
if T.TYPE_CHECKING: if T.TYPE_CHECKING:
from . import ModuleState from . import ModuleState
from ..interpreter import Interpreter from ..interpreter import Interpreter
from ..mesonlib import FileOrString
from typing_extensions import TypedDict from typing_extensions import TypedDict

@ -14,6 +14,7 @@
'''This module provides helper functions for Gnome/GLib related '''This module provides helper functions for Gnome/GLib related
functionality such as gobject-introspection, gresources and gtk-doc''' functionality such as gobject-introspection, gresources and gtk-doc'''
from __future__ import annotations
import copy import copy
import itertools import itertools
@ -30,7 +31,7 @@ from .. import build
from .. import interpreter from .. import interpreter
from .. import mesonlib from .. import mesonlib
from .. import mlog from .. import mlog
from ..build import BuildTarget, CustomTarget, CustomTargetIndex, Executable, GeneratedList, InvalidArguments from ..build import CustomTarget, CustomTargetIndex, Executable, GeneratedList, InvalidArguments
from ..dependencies import Dependency, PkgConfigDependency, InternalDependency from ..dependencies import Dependency, PkgConfigDependency, InternalDependency
from ..interpreter.type_checking import DEPENDS_KW, DEPEND_FILES_KW, INSTALL_KW, NoneType, in_set_validator from ..interpreter.type_checking import DEPENDS_KW, DEPEND_FILES_KW, INSTALL_KW, NoneType, in_set_validator
from ..interpreterbase import noPosargs, noKwargs, FeatureNew, FeatureDeprecated from ..interpreterbase import noPosargs, noKwargs, FeatureNew, FeatureDeprecated
@ -46,6 +47,7 @@ if T.TYPE_CHECKING:
from typing_extensions import Literal, TypedDict from typing_extensions import Literal, TypedDict
from . import ModuleState from . import ModuleState
from ..build import BuildTarget
from ..compilers import Compiler from ..compilers import Compiler
from ..interpreter import Interpreter from ..interpreter import Interpreter
from ..interpreterbase import TYPE_var, TYPE_kwargs from ..interpreterbase import TYPE_var, TYPE_kwargs

@ -11,17 +11,23 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from __future__ import annotations
import os import os
import pathlib import pathlib
import typing as T import typing as T
from mesonbuild import mesonlib from mesonbuild import mesonlib
from mesonbuild.build import CustomTarget, CustomTargetIndex, GeneratedList, Target from mesonbuild.build import CustomTarget, CustomTargetIndex, GeneratedList, Target
from mesonbuild.compilers import detect_compiler_for, Compiler from mesonbuild.compilers import detect_compiler_for
from mesonbuild.interpreter import Interpreter
from mesonbuild.interpreterbase.decorators import ContainerTypeInfo, FeatureDeprecated, FeatureNew, KwargInfo, typed_pos_args, typed_kwargs from mesonbuild.interpreterbase.decorators import ContainerTypeInfo, FeatureDeprecated, FeatureNew, KwargInfo, typed_pos_args, typed_kwargs
from mesonbuild.mesonlib import version_compare, MachineChoice from mesonbuild.mesonlib import version_compare, MachineChoice
from . import NewExtensionModule, ModuleReturnValue, ModuleState from . import NewExtensionModule, ModuleReturnValue
if T.TYPE_CHECKING:
from . import ModuleState
from ..compilers import Compiler
from ..interpreter import Interpreter
class JavaModule(NewExtensionModule): class JavaModule(NewExtensionModule):
@FeatureNew('Java Module', '0.60.0') @FeatureNew('Java Module', '0.60.0')

@ -12,6 +12,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from __future__ import annotations
import os import os
import shutil import shutil
@ -23,17 +24,19 @@ from .. import build
from .. import coredata from .. import coredata
from .. import mlog from .. import mlog
from ..dependencies import find_external_dependency, Dependency, ExternalLibrary from ..dependencies import find_external_dependency, Dependency, ExternalLibrary
from ..mesonlib import MesonException, File, FileOrString, version_compare, Popen_safe from ..mesonlib import MesonException, File, version_compare, Popen_safe
from ..interpreter import extract_required_kwarg from ..interpreter import extract_required_kwarg
from ..interpreter.type_checking import NoneType from ..interpreter.type_checking import NoneType
from ..interpreterbase import ContainerTypeInfo, FeatureDeprecated, KwargInfo, noPosargs, FeatureNew, typed_kwargs from ..interpreterbase import ContainerTypeInfo, FeatureDeprecated, KwargInfo, noPosargs, FeatureNew, typed_kwargs
from ..programs import ExternalProgram, NonExistingExternalProgram from ..programs import NonExistingExternalProgram
if T.TYPE_CHECKING: if T.TYPE_CHECKING:
from . import ModuleState from . import ModuleState
from ..dependencies.qt import QtPkgConfigDependency, QmakeQtDependency from ..dependencies.qt import QtPkgConfigDependency, QmakeQtDependency
from ..interpreter import Interpreter from ..interpreter import Interpreter
from ..interpreter import kwargs from ..interpreter import kwargs
from ..mesonlib import FileOrString
from ..programs import ExternalProgram
QtDependencyType = T.Union[QtPkgConfigDependency, QmakeQtDependency] QtDependencyType = T.Union[QtPkgConfigDependency, QmakeQtDependency]

@ -11,6 +11,7 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from __future__ import annotations
import json import json
import os import os
@ -20,9 +21,12 @@ import re
import sys import sys
import typing as T import typing as T
from ..backend.ninjabackend import TargetDependencyScannerInfo, ninja_quote from ..backend.ninjabackend import ninja_quote
from ..compilers.compilers import lang_suffixes from ..compilers.compilers import lang_suffixes
if T.TYPE_CHECKING:
from ..backend.ninjabackend import TargetDependencyScannerInfo
CPP_IMPORT_RE = re.compile(r'\w*import ([a-zA-Z0-9]+);') CPP_IMPORT_RE = re.compile(r'\w*import ([a-zA-Z0-9]+);')
CPP_EXPORT_RE = re.compile(r'\w*export module ([a-zA-Z0-9]+);') CPP_EXPORT_RE = re.compile(r'\w*export module ([a-zA-Z0-9]+);')
@ -38,13 +42,13 @@ FORTRAN_USE_RE = re.compile(FORTRAN_USE_PAT, re.IGNORECASE)
class DependencyScanner: class DependencyScanner:
def __init__(self, pickle_file: str, outfile: str, sources: T.List[str]): def __init__(self, pickle_file: str, outfile: str, sources: T.List[str]):
with open(pickle_file, 'rb') as pf: with open(pickle_file, 'rb') as pf:
self.target_data = pickle.load(pf) # type: TargetDependencyScannerInfo self.target_data: TargetDependencyScannerInfo = pickle.load(pf)
self.outfile = outfile self.outfile = outfile
self.sources = sources self.sources = sources
self.provided_by = {} # type: T.Dict[str, str] self.provided_by: T.Dict[str, str] = {}
self.exports = {} # type: T.Dict[str, str] self.exports: T.Dict[str, str] = {}
self.needs = {} # type: T.Dict[str, T.List[str]] self.needs: T.Dict[str, T.List[str]] = {}
self.sources_with_exports = [] # type: T.List[str] self.sources_with_exports: T.List[str] = []
def scan_file(self, fname: str) -> None: def scan_file(self, fname: str) -> None:
suffix = os.path.splitext(fname)[1][1:].lower() suffix = os.path.splitext(fname)[1][1:].lower()

@ -11,8 +11,8 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from __future__ import annotations
import subprocess
import itertools import itertools
import fnmatch import fnmatch
from pathlib import Path from pathlib import Path
@ -22,6 +22,9 @@ from ..compilers import lang_suffixes
from ..mesonlib import Popen_safe from ..mesonlib import Popen_safe
import typing as T import typing as T
if T.TYPE_CHECKING:
import subprocess
def parse_pattern_file(fname: Path) -> T.List[str]: def parse_pattern_file(fname: Path) -> T.List[str]:
patterns = [] patterns = []
try: try:

Loading…
Cancel
Save