diff options
-rw-r--r-- | docs/markdown/Syntax.md | 10 | ||||
-rw-r--r-- | docs/markdown/snippets/fstrings.md | 2 | ||||
-rw-r--r-- | mesonbuild/interpreterbase.py | 3 | ||||
-rw-r--r-- | test cases/failing/113 invalid fstring/test.json | 2 |
4 files changed, 13 insertions, 4 deletions
diff --git a/docs/markdown/Syntax.md b/docs/markdown/Syntax.md index 50287b2..9ed3227 100644 --- a/docs/markdown/Syntax.md +++ b/docs/markdown/Syntax.md @@ -198,7 +198,15 @@ s = f'int: @n@, string: @m@' ``` Currently only identity-expressions are supported inside of format -strings. +strings, meaning you cannot use arbitrary Meson expressions inside of them. + +```meson +n = 10 +m = 5 + +# The following is not a valid format string +s = f'result: @n + m@' +``` ### String methods diff --git a/docs/markdown/snippets/fstrings.md b/docs/markdown/snippets/fstrings.md index df7dc2c..45a238c 100644 --- a/docs/markdown/snippets/fstrings.md +++ b/docs/markdown/snippets/fstrings.md @@ -1,7 +1,7 @@ ## Introducing format strings to the Meson language In addition to the conventional `'A string @0@ to be formatted @1@'.format(n, m)` -method of formatting strings in the Meson DSL, there's now the additional +method of formatting strings in the Meson language, there's now the additional `f'A string @n@ to be formatted @m@'` notation that provides a non-positional and clearer alternative. Meson's format strings are currently restricted to identity-expressions, meaning `f'format @'m' + 'e'@'` will not parse. diff --git a/mesonbuild/interpreterbase.py b/mesonbuild/interpreterbase.py index 01bfdaa..ec6ddc8 100644 --- a/mesonbuild/interpreterbase.py +++ b/mesonbuild/interpreterbase.py @@ -937,7 +937,8 @@ The result of this is undefined and will become a hard error in a future Meson r try: val = self.variables[var] if not isinstance(val, (str, int, float, bool)): - raise InvalidCode(f'Identifier "{var}" does not name a formattable variable.') + raise InvalidCode(f'Identifier "{var}" does not name a formattable variable ' + + '(has to be an integer, a string, a floating point number or a boolean).') return str(val) except KeyError: diff --git a/test cases/failing/113 invalid fstring/test.json b/test cases/failing/113 invalid fstring/test.json index 6834d80..17442fd 100644 --- a/test cases/failing/113 invalid fstring/test.json +++ b/test cases/failing/113 invalid fstring/test.json @@ -1,7 +1,7 @@ { "stdout": [ { - "line": "test cases/failing/113 invalid fstring/meson.build:4:0: ERROR: Identifier \"dict\" does not name a formattable variable." + "line": "test cases/failing/113 invalid fstring/meson.build:4:0: ERROR: Identifier \"dict\" does not name a formattable variable (has to be an integer, a string, a floating point number or a boolean)." } ] } |