howl icon indicating copy to clipboard operation
howl copied to clipboard

Brace minimisation

Open zesterer opened this issue 4 years ago • 4 comments

Since Howl is a multi-language editor, it's obvious that properly parsing all languages to figure out where functions begin or end is... difficult. Instead, I offer an alternative suggestion: A way to minimise content enclosed within a given set of braces/brackets/parentheses. As an example,

304 | 
305 | fn foo(a: i32, b: i32) -> i32 {
306 |     // Some useless code
307 |     let c = 5;
308 |     let d = c + a
309 |     a + d
310 | }
311 | 

Would minimise to

304 | 
305 | fn foo(a: i32, b: i32) -> i32 { ... }
311 | 

The character to perform the minimisation upon could be tweaked on a per-language basis.

I've not fully thought through how this might work with nesting, but I thought that starting a discussion about this would be the best thing to do.

zesterer avatar Feb 09 '20 16:02 zesterer

I like this idea. It also allows collapsing arbitrary lists, dicts and other structures that use braces. We already have cursor-goto-brace which has logic to find the matching brace. What's missing is some support for hiding lines. One corner case is something with trailing text:

a {
  b
  c
} d

Now what happens to d when this is collapsed?

shalabhc avatar Mar 26 '20 18:03 shalabhc

I presume the result would just be a { .. } d?

zesterer avatar Mar 27 '20 23:03 zesterer

Why not collapse every lines that has the same or lower indentation level, except the ones with 0 indentation ? That should work everywhere without configuration tweak.

DriNeo avatar Feb 03 '21 10:02 DriNeo

Why not collapse every lines that has the same or lower indentation level, except the ones with 0 indentation ? That should work everywhere without configuration tweak.

I think this is a reasonable approach, yes.

zesterer avatar Feb 03 '21 13:02 zesterer