From d1333dd7e51729a581fed3e429fa035bff77a3db Mon Sep 17 00:00:00 2001 From: George Harker Date: Sun, 19 Mar 2023 18:09:18 -0700 Subject: refactor(indent)!: Rework indent, aligned indent MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit indents now use @indent.X style captures, and indent.PROP for properties to set on those captures, as documented in the help. Captures are: indent.auto indent.begin indent.end indent.dedent indent.branch indent.ignore indent.align indent.zero Properties are: indent.immediate indent.start_at_same_line indent.open_delimiter indent.close_delimiter indent.increment indent.avoid_last_matching_next Multiple opening delims on one line and multiple closing on a line are collapsed so as not to over indent, The final line of @indent.align blocks which must in some cases be treated specially to avoid clashing with the next line is treated the same regardless of whether the @indent.align capture actually uses aligned indentation or just normal indentation. The indent.avoid_last_matching_next property controls this. Adjust python to use these. List, set, dict and tuple all use @indent.align which permits both hanging and aligned styles. Finally, try: on it’s own will indent when typing live but make no guaranteeds about whole-file formatting. Includes lucario387:fix-align-indent --- tests/indent/python/aligned_indent_2.py | 12 ++++++++++++ tests/indent/python/control_flow.py | 2 -- tests/indent/python/error_state_def.py | 6 ++++++ tests/indent/python/error_state_dict.py | 6 ++++++ tests/indent/python/error_state_funcall.py | 5 +++++ tests/indent/python/error_state_list.py | 5 +++++ tests/indent/python/error_state_set.py | 5 +++++ tests/indent/python/error_state_tuple.py | 7 +++++++ tests/indent/python/error_state_tuple_align.py | 7 +++++++ tests/indent/python/return_dedent.py | 23 +++++++++++++++++++++++ 10 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 tests/indent/python/aligned_indent_2.py create mode 100644 tests/indent/python/error_state_def.py create mode 100644 tests/indent/python/error_state_dict.py create mode 100644 tests/indent/python/error_state_funcall.py create mode 100644 tests/indent/python/error_state_list.py create mode 100644 tests/indent/python/error_state_set.py create mode 100644 tests/indent/python/error_state_tuple.py create mode 100644 tests/indent/python/error_state_tuple_align.py (limited to 'tests/indent/python') diff --git a/tests/indent/python/aligned_indent_2.py b/tests/indent/python/aligned_indent_2.py new file mode 100644 index 000000000..124f7142f --- /dev/null +++ b/tests/indent/python/aligned_indent_2.py @@ -0,0 +1,12 @@ +if True: + print(1, 2, 3) + +if True: + print( + 1, + 2, + 3 + ) + print(1, + 2, + 3) diff --git a/tests/indent/python/control_flow.py b/tests/indent/python/control_flow.py index 7ec02e3ff..fca528a2d 100644 --- a/tests/indent/python/control_flow.py +++ b/tests/indent/python/control_flow.py @@ -26,5 +26,3 @@ while (a > 4 and pass try: - pass - diff --git a/tests/indent/python/error_state_def.py b/tests/indent/python/error_state_def.py new file mode 100644 index 000000000..943fbfac3 --- /dev/null +++ b/tests/indent/python/error_state_def.py @@ -0,0 +1,6 @@ +def foo(a, + b, + c): + pass + +def foobar(a, diff --git a/tests/indent/python/error_state_dict.py b/tests/indent/python/error_state_dict.py new file mode 100644 index 000000000..dec92b1f9 --- /dev/null +++ b/tests/indent/python/error_state_dict.py @@ -0,0 +1,6 @@ + +d = {1:4, + 2:3, + 4:5} + +d2 = {1:3, diff --git a/tests/indent/python/error_state_funcall.py b/tests/indent/python/error_state_funcall.py new file mode 100644 index 000000000..e86720ed1 --- /dev/null +++ b/tests/indent/python/error_state_funcall.py @@ -0,0 +1,5 @@ + +f(1,2,3, + 4,5,6) + +g(1,2,3, diff --git a/tests/indent/python/error_state_list.py b/tests/indent/python/error_state_list.py new file mode 100644 index 000000000..09823bb05 --- /dev/null +++ b/tests/indent/python/error_state_list.py @@ -0,0 +1,5 @@ +l = [1, + 2, + 3] + +l2 = [1, diff --git a/tests/indent/python/error_state_set.py b/tests/indent/python/error_state_set.py new file mode 100644 index 000000000..31338de68 --- /dev/null +++ b/tests/indent/python/error_state_set.py @@ -0,0 +1,5 @@ +s = {1, + 2, + 3} + +s2 = {1, diff --git a/tests/indent/python/error_state_tuple.py b/tests/indent/python/error_state_tuple.py new file mode 100644 index 000000000..fda59c8c3 --- /dev/null +++ b/tests/indent/python/error_state_tuple.py @@ -0,0 +1,7 @@ +( + a, + b, + c, +) + +(a, diff --git a/tests/indent/python/error_state_tuple_align.py b/tests/indent/python/error_state_tuple_align.py new file mode 100644 index 000000000..fda59c8c3 --- /dev/null +++ b/tests/indent/python/error_state_tuple_align.py @@ -0,0 +1,7 @@ +( + a, + b, + c, +) + +(a, diff --git a/tests/indent/python/return_dedent.py b/tests/indent/python/return_dedent.py index 44d6219de..8171bc9d1 100644 --- a/tests/indent/python/return_dedent.py +++ b/tests/indent/python/return_dedent.py @@ -14,3 +14,26 @@ def a(): return ( 1, 2, 3 ) + +def a(): + return b( + 1, 2, 3 + ) + +def a(): + return [1, 2, 3] + +def a(): + return {1, 2, 3} + +def a(): + return { + "a": 1, + "b": 2, + "c": 3 + } + +def a(): + return [ + a for a in range (1, 3) + ] -- cgit v1.2.3-70-g09d2