interpreter: Add FeatureNew check
This commit is contained in:
parent
6b00c7dc81
commit
c0efa7ab22
|
@ -21,6 +21,11 @@ from ...interpreterbase import (
|
||||||
|
|
||||||
InvalidArguments,
|
InvalidArguments,
|
||||||
)
|
)
|
||||||
|
from ...mparser import (
|
||||||
|
MethodNode,
|
||||||
|
StringNode,
|
||||||
|
ArrayNode,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if T.TYPE_CHECKING:
|
if T.TYPE_CHECKING:
|
||||||
|
@ -105,6 +110,13 @@ class StringHolder(ObjectHolder[str]):
|
||||||
@noKwargs
|
@noKwargs
|
||||||
@typed_pos_args('str.join', varargs=str)
|
@typed_pos_args('str.join', varargs=str)
|
||||||
def join_method(self, args: T.Tuple[T.List[str]], kwargs: TYPE_kwargs) -> str:
|
def join_method(self, args: T.Tuple[T.List[str]], kwargs: TYPE_kwargs) -> str:
|
||||||
|
# Implement some basic FeatureNew check on the AST level
|
||||||
|
assert isinstance(self.current_node, MethodNode)
|
||||||
|
n_args = self.current_node.args.arguments
|
||||||
|
if len(n_args) != 1 or not isinstance(n_args[0], ArrayNode) or not all(isinstance(x, StringNode) for x in n_args[0].args.arguments):
|
||||||
|
FeatureNew.single_use('str.join (varargs)', '0.60.0', self.subproject, 'List-flattening and variadic arguments')
|
||||||
|
|
||||||
|
# Actual implementation
|
||||||
return self.held_object.join(args[0])
|
return self.held_object.join(args[0])
|
||||||
|
|
||||||
@noKwargs
|
@noKwargs
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
project('string formatting', 'c')
|
project('string formatting', 'c', meson_version: '>=0.59.0')
|
||||||
|
|
||||||
templ = '@0@bar@1@'
|
templ = '@0@bar@1@'
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"stdout": [
|
||||||
|
{
|
||||||
|
"line": "WARNING: Project targeting '>=0.59.0' but tried to use feature introduced in '0.60.0': str.join (varargs). List-flattening and variadic arguments"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue