optinterpreter: pass deprecated keyword directly to Option initializer

pull/11277/head
Dylan Baker 2 years ago committed by Eli Schwartz
parent 43a2404707
commit 7c1f53f3b1
  1. 32
      mesonbuild/optinterpreter.py

@ -27,6 +27,8 @@ if T.TYPE_CHECKING:
from .interpreterbase import SubProject
from typing_extensions import TypedDict, Literal
_DEPRECATED_ARGS = T.Union[bool, str, T.Dict[str, str], T.List[str]]
FuncOptionArgs = TypedDict('FuncOptionArgs', {
'type': str,
'description': str,
@ -35,7 +37,7 @@ if T.TYPE_CHECKING:
'value': object,
'min': T.Optional[int],
'max': T.Optional[int],
'deprecated': T.Union[bool, str, T.Dict[str, str], T.List[str]],
'deprecated': _DEPRECATED_ARGS,
})
class StringArgs(TypedDict):
@ -201,8 +203,7 @@ class OptionInterpreter:
n_kwargs = {k: v for k, v in kwargs.items()
if k not in {'type', 'description', 'deprecated', 'yield'}}
opt = parser(description, kwargs['yield'], n_kwargs)
opt.deprecated = kwargs['deprecated']
opt = parser(description, (kwargs['yield'], kwargs['deprecated']), n_kwargs)
if key in self.options:
mlog.deprecation(f'Option {opt_name} already exists.')
self.options[key] = opt
@ -211,8 +212,8 @@ class OptionInterpreter:
'string option',
KwargInfo('value', str, default=''),
)
def string_parser(self, description: str, yield_: bool, kwargs: StringArgs) -> coredata.UserOption:
return coredata.UserStringOption(description, kwargs['value'], yield_)
def string_parser(self, description: str, args: T.Tuple[bool, _DEPRECATED_ARGS], kwargs: StringArgs) -> coredata.UserOption:
return coredata.UserStringOption(description, kwargs['value'], *args)
@typed_kwargs(
'boolean option',
@ -224,20 +225,20 @@ class OptionInterpreter:
deprecated_values={'true': ('1.1.0', 'use a boolean, not a string'), 'false': ('1.1.0', 'use a boolean, not a string')},
),
)
def boolean_parser(self, description: str, yield_: bool, kwargs: BooleanArgs) -> coredata.UserOption:
return coredata.UserBooleanOption(description, kwargs['value'], yield_)
def boolean_parser(self, description: str, args: T.Tuple[bool, _DEPRECATED_ARGS], kwargs: BooleanArgs) -> coredata.UserOption:
return coredata.UserBooleanOption(description, kwargs['value'], *args)
@typed_kwargs(
'combo option',
KwargInfo('value', (str, NoneType)),
KwargInfo('choices', ContainerTypeInfo(list, str, allow_empty=False), required=True),
)
def combo_parser(self, description: str, kwargs: ComboArgs, yield_: bool) -> coredata.UserOption:
def combo_parser(self, description: str, args: T.Tuple[bool, _DEPRECATED_ARGS], kwargs: ComboArgs) -> coredata.UserOption:
choices = kwargs['choices']
value = kwargs['value']
if value is None:
value = kwargs['choices'][0]
return coredata.UserComboOption(description, choices, value, yield_)
return coredata.UserComboOption(description, choices, value, *args)
@typed_kwargs(
'integer option',
@ -251,26 +252,27 @@ class OptionInterpreter:
KwargInfo('min', (int, NoneType)),
KwargInfo('max', (int, NoneType)),
)
def integer_parser(self, description: str, yield_: bool, kwargs: IntegerArgs) -> coredata.UserOption:
def integer_parser(self, description: str, args: T.Tuple[bool, _DEPRECATED_ARGS], kwargs: IntegerArgs) -> coredata.UserOption:
value = kwargs['value']
inttuple = (kwargs['min'], kwargs['max'], value)
return coredata.UserIntegerOption(description, inttuple, yield_)
return coredata.UserIntegerOption(description, inttuple, *args)
@typed_kwargs(
'string array option',
KwargInfo('value', (ContainerTypeInfo(list, str), str, NoneType)),
KwargInfo('choices', ContainerTypeInfo(list, str), default=[]),
)
def string_array_parser(self, description: str, yield_: bool, kwargs: StringArrayArgs) -> coredata.UserOption:
def string_array_parser(self, description: str, args: T.Tuple[bool, _DEPRECATED_ARGS], kwargs: StringArrayArgs) -> coredata.UserOption:
choices = kwargs['choices']
value = kwargs['value'] if kwargs['value'] is not None else choices
return coredata.UserArrayOption(description, value,
choices=choices,
yielding=yield_)
yielding=args[0],
deprecated=args[1])
@typed_kwargs(
'feature option',
KwargInfo('value', str, default='auto', validator=in_set_validator({'auto', 'enabled', 'disabled'})),
)
def feature_parser(self, description: str, yield_: bool, kwargs: FeatureArgs) -> coredata.UserOption:
return coredata.UserFeatureOption(description, kwargs['value'], yield_)
def feature_parser(self, description: str, args: T.Tuple[bool, _DEPRECATED_ARGS], kwargs: FeatureArgs) -> coredata.UserOption:
return coredata.UserFeatureOption(description, kwargs['value'], *args)

Loading…
Cancel
Save