Add support for padding zeroes in int.to_string() method

pull/12241/head
Nomura 2 years ago committed by Xavier Claessens
parent b51bce070e
commit 5f46ea116c
  1. 20
      docs/markdown/snippets/int_to_string_fill.md
  2. 12
      docs/yaml/elementary/int.yml
  3. 13
      mesonbuild/interpreter/primitives/integer.py
  4. 9
      test cases/common/270 int_to_str_fill/meson.build

@ -0,0 +1,20 @@
## Added 'fill' kwarg to int.to_string()
int.to_string() now accepts a `fill` argument. This allows you to pad the
string representation of the integer with leading zeroes:
```meson
n = 4
message(n.to_string())
message(n.to_string(length: 3))
n = -4
message(n.to_string(length: 3))
```
OUTPUT:
```meson
4
004
-04
```

@ -14,3 +14,15 @@ methods:
- name: to_string
returns: str
description: Returns the value of the number as a string.
optargs:
fill:
type: int
description: |
Left fill the string with zeros until it reaches the length
specified by this argument. A leading negative sign counts towards
the length, and is handled by inserting the padding after the `-`
character rather than before. The original string is returned if the
value provided is less than or equal to the former's length.

@ -3,8 +3,8 @@
from __future__ import annotations
from ...interpreterbase import (
FeatureBroken, InvalidArguments, MesonOperator, ObjectHolder,
noKwargs, noPosargs, typed_operator,
FeatureBroken, InvalidArguments, MesonOperator, ObjectHolder, KwargInfo,
noKwargs, noPosargs, typed_operator, typed_kwargs
)
import typing as T
@ -65,10 +65,13 @@ class IntegerHolder(ObjectHolder[int]):
def is_odd_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> bool:
return self.held_object % 2 != 0
@noKwargs
@typed_kwargs(
'to_string',
KwargInfo('fill', int, default=0, since='1.3.0')
)
@noPosargs
def to_string_method(self, args: T.List[TYPE_var], kwargs: TYPE_kwargs) -> str:
return str(self.held_object)
def to_string_method(self, args: T.List[TYPE_var], kwargs: T.Dict[str, T.Any]) -> str:
return str(self.held_object).zfill(kwargs['fill'])
@typed_operator(MesonOperator.DIV, int)
def op_div(self, other: int) -> int:

@ -0,0 +1,9 @@
project('test_fill_in_int_to_string')
n = 4
assert(n.to_string() == '4')
assert(n.to_string(fill: 3) == '004')
assert(n.to_string(fill: -3) == '4')
n = -4
assert(n.to_string(fill: 3) == '-04')
Loading…
Cancel
Save