Comments (5)
Hi Paul, This is an interesting case. Thanks for reporting it!
My first impression is that the parentheses turn the application into a sequential expression.
Something where ((a b))
becomes
((a
b))
Where b
is no longer applied to a
but the two are indidual expressions in a sequence.
I'm able to replicate this with indent = 4 and 4 parentheses.
The additional newline is introduced because the b
is multiline and that follows the newline heuristic.
I'm not sure what the best way would be to solve this one. Changing this behaviour will for sure break something else.
from fantomas.
I'm not sure I follow. Are you saying that ((a b))
is semantically the same as
a
b
That seems weird to me but it could be the case.
from fantomas.
Oh no, it isn't and that is part of the problem.
b
at least needs one space (I think) before it is considered applied to a
instead of being two expressions (that are not ignored).
from fantomas.
Oh right, that's what I thought. I got confused that changing the behaviour will break something else - what are you thinking of there?
from fantomas.
Well, this is tricky as there a multiple places where we deal with parentheses.
But right now we do:
(a
b)
Where b
is indented from the point of view of the (
, following the normal flow.
b
will be placed at one indent_size
unit.
I initially was thinking of maybe touching this and having b
indent from a
offset instead.
This would of course mean one indent_size
+ whatever offset a
currently has.
The trade-off is that b
is put on at column which won't be a multitude of the selected indent_size
.
This upsets a lot of people of course.
Now, we might want to have a sanity check on the formatting of the application.
If we could assert that the arguments are at least one space further we could add an additional indent if that is not the case. The downside here is that applications are also covered in a lot of places.
Meaning, that we might be able to fix the problem at hand but it might surface again in a slightly different code sample.
I took a stab at this idea at #2946
I'll probably consult @dawedawe and others next week on this one as well.
from fantomas.
Related Issues (20)
- Invalid F# code after formatting HOT 1
- Formatting removes necessary additional closing brackets for multiline interpolated strings HOT 1
- Fantomas reports an error when formatting interpolated string with tripple quotes HOT 7
- Idempotency problem when _.Property shorthand
- Regression: Stroustrup bracket style in anonymous record type parameter is not respected
- HashDirective before closing `]`
- Long parameter attribute gives weird line break before type annotation
- Fantomas corrupts an explicit constructor with `then` clause HOT 2
- FormatASTAsync loses single quotes for characters HOT 4
- Regression: An empty line or comment at the end of a list breaks Stroustrup formatting HOT 2
- `SpaceBeforeUppercaseInvocation` corrupts underscore lambda invocation HOT 1
- Non needed parentheses are added around lambda call from tuple/members HOT 3
- [Feature request] Make newline experience consistent across match branches HOT 1
- Make Fantomas AOT compatible HOT 12
- cannot determine if Expr AppSingleParenArg Fantomas.Core.SyntaxOak+ExprAppSingleParenArgNode is uppercase or lowercase HOT 1
- cannot determine if Expr AppSingleParenArg Fantomas.Core.SyntaxOak+ExprAppSingleParenArgNode is uppercase or lowercase HOT 2
- [Feature request] Keep `interface end` on a single line HOT 1
- Regression since 6.3.5: Shorthand lambda pushes args far out right with name-sensitive alignment; discrepancy with normal lambda HOT 1
- Stroustrup formatting breaks array containing just empty line or comment HOT 1
- [Feature request] Set custom fantomas path on Fantomas.Client HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fantomas.