Skip to content

Commit 9a4ab51

Browse files
committed
Add support for r-strings, closes Scony#257
1 parent f261487 commit 9a4ab51

File tree

8 files changed

+50
-1
lines changed

8 files changed

+50
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
### Added
66
- Added support for multiline patterns within `match` statement branches
7+
- Added support for r-strings
78

89
## [4.2.0] 2023-11-30
910

gdtoolkit/formatter/expression_to_str.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ def expression_to_str(expression: Node) -> str:
7777
"c_dict_element": _dict_element_to_str,
7878
"eq_dict_element": _dict_element_to_str,
7979
"string": lambda e: expression_to_str(e.children[0]),
80+
"rstring": lambda e: f"r{expression_to_str(e.children[0])}",
8081
"get_node": lambda e: f"${expression_to_str(e.children[0])}",
8182
"path": lambda e: "".join([name_token.value for name_token in e.children]),
8283
"node_path": lambda e: f"^{expression_to_str(e.children[0])}",

gdtoolkit/formatter/expression_utils.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def is_foldable(expression: Node) -> bool:
1717
return True
1818
return not isinstance(expression, Token) and expression.data not in [
1919
"string",
20+
"rstring",
2021
"get_node",
2122
"node_path",
2223
"string_name",

gdtoolkit/formatter/safety_checks.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,10 @@ def string(self, args):
6969
string_token = args[0]
7070
return expression_to_str(string_token)
7171

72+
def rstring(self, args):
73+
string_token = args[0]
74+
return expression_to_str(string_token)
75+
7276
def par_pattern(self, args):
7377
return args[0] if len(args) > 0 else args
7478

gdtoolkit/parser/gdscript.lark

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,7 @@ _simple_lambda_stmt: single_lambda_stmt (";" single_lambda_stmt)* [";"]
253253
| expr_stmt
254254
?literal: NUMBER
255255
| string
256+
| rstring
256257
| get_node
257258
| "^" string -> node_path
258259
| "&" string -> string_name
@@ -281,7 +282,9 @@ DECIMAL: INT "." INT? | "." INT
281282
INT: DIGIT (DIGIT | "_")*
282283
DIGIT: "0".."9"
283284

284-
string: LONG_STRING | REGULAR_STRING
285+
rstring: "r" _string
286+
string: _string
287+
_string: LONG_STRING | REGULAR_STRING
285288
REGULAR_STRING: /("(?!"").*?(?<!\\)(\\\\)*?"|'(?!'').*?(?<!\\)(\\\\)*?')/i
286289
LONG_STRING: /""".*?(?<!\\)(\\\\)*?"""/is | /'''.*?(?<!\\)(\\\\)*?'''/is
287290

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
var x = r'x'
2+
3+
var x2 = r'x "'
4+
var x3 = r'x " " \''
5+
var x4 = r"x '"
6+
var x5 = r"x ' ' \""
7+
8+
var x6 = r'x \''
9+
var x7 = r"x \""
10+
var x8 = r'x \' "'
11+
12+
var x9 = r'''x'''
13+
var x10 = r'''x "'''
14+
15+
var x11 = r"""abc " def ' ghi"""
16+
17+
var x12 = r'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
var x = r"x"
2+
3+
var x2 = r'x "'
4+
var x3 = r'x " " \''
5+
var x4 = r"x '"
6+
var x5 = r"x ' ' \""
7+
8+
var x6 = r"x '"
9+
var x7 = r'x "'
10+
var x8 = r"x ' \""
11+
12+
var x9 = r"x"
13+
var x10 = r'x "'
14+
15+
var x11 = r"""abc " def ' ghi"""
16+
17+
var x12 = r"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

tests/valid-gd-scripts/rstrings.gd

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
func foo():
2+
print(r'" \' \ \\')
3+
print(r"\" ' \ \\")
4+
print(r"""aaa""")
5+
print(r'''bbb''')

0 commit comments

Comments
 (0)