Skip to content

Commit

Permalink
Add support for 'get():' syntax, closes #275
Browse files Browse the repository at this point in the history
  • Loading branch information
Scony committed Apr 14, 2024
1 parent de1f639 commit ecd7d83
Show file tree
Hide file tree
Showing 7 changed files with 26 additions and 3 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
- Added support for Allman-style enum definitions to parser
- Added support for string-based unique node names
- Added support for properties in `gd2py`
- Added support for `get():` property syntax

### Changed
- Fixed support for `breakpoint` statement in formatter
Expand Down
1 change: 1 addition & 0 deletions gdtoolkit/formatter/expression_to_str.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,7 @@ def expression_to_str(expression: Node) -> str:
"non_foldable_dot_chain": lambda e: "".join(map(expression_to_str, e.children)),
"actual_getattr_call": _getattr_call_to_str,
"actual_subscr_expr": _subscription_to_str,
"property_custom_getter_args": lambda _: "()",
# patterns (fake expressions):
"list_pattern": lambda e: ", ".join(map(expression_to_str, e.children)),
"test_pattern": _operator_chain_based_expression_to_str,
Expand Down
13 changes: 11 additions & 2 deletions gdtoolkit/formatter/property.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from .context import Context
from .block import format_block
from .function_statement import format_func_statement
from .expression_to_str import expression_to_str


def has_inline_property_body(statement: Tree) -> bool:
Expand Down Expand Up @@ -75,10 +76,18 @@ def _format_property_setter(property_setter: Tree, context: Context) -> Outcome:


def _format_property_getter(property_getter: Tree, context: Context) -> Outcome:
args = (
expression_to_str(property_getter.children[1])
if property_getter.children[1].data == "property_custom_getter_args"
else ""
)
formatted_lines: FormattedLines = [
(get_line(property_getter), f"{context.indent_string}get:")
(get_line(property_getter), f"{context.indent_string}get{args}:")
]
statements = property_getter.children[1:]
statements_offset = (
2 if property_getter.children[1].data == "property_custom_getter_args" else 1
)
statements = property_getter.children[statements_offset:]
block_lines, last_processed_line = format_block(
statements,
format_func_statement,
Expand Down
3 changes: 2 additions & 1 deletion gdtoolkit/parser/gdscript.lark
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,8 @@ _property_delegates: property_delegate_set ["," [_NL] property_delegate_get]
!property_delegate_set: SET "=" NAME
!property_delegate_get: GET "=" NAME
?property_custom_etter: SET "(" NAME ")" ":" _func_suite -> property_custom_setter
| GET ":" _func_suite -> property_custom_getter
| GET [property_custom_getter_args] ":" _func_suite -> property_custom_getter
property_custom_getter_args: "(" ")"

func_def: func_header _func_suite
func_header: "func" NAME func_args ["->" TYPE_HINT] ":"
Expand Down
2 changes: 2 additions & 0 deletions tests/formatter/input-output-pairs/multiline_properties.in.gd
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,8 @@ var p8:
var p9:
set(_x): pass
get: return 1
var p9x:
get(): return 1
var p10:
get:
var xyz = 123
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,9 @@ var p9:
pass
get:
return 1
var p9x:
get():
return 1
var p10:
get:
var xyz = 123
Expand Down
6 changes: 6 additions & 0 deletions tests/valid-gd-scripts/properties.gd
Original file line number Diff line number Diff line change
Expand Up @@ -84,3 +84,9 @@ class Foo:

func __set(v):
pass

var p11:
set(value):
pass
get():
pass

0 comments on commit ecd7d83

Please sign in to comment.