Skip to content

Move indent right one when the highlighted line is a scope start/end#77762

Merged
alexdima merged 9 commits intomicrosoft:masterfrom
LadyCailin:master
Feb 6, 2020
Merged

Move indent right one when the highlighted line is a scope start/end#77762
alexdima merged 9 commits intomicrosoft:masterfrom
LadyCailin:master

Conversation

@LadyCailin
Copy link
Contributor

@LadyCailin LadyCailin commented Jul 22, 2019

Previously, the indent was always to the left of the current line.
While this logic was easier to implement, it is inconsistent with the
behavior expected. This commit changes it to select the scope (or a rough
proxy of that), rather than the line's indent. This is not a complete fix for #49342, as this
does not add support to semantic detection, however, this will work in
probably 90% of the cases, and is a relatively straightforward fix.

In general, this works:

image
image
image

However, there are still edge cases where this does not work correctly, since it's not really semantic, it's just based on the indentation of the above and below lines.

image
image

For what it's worth, this does work in Notepad++ at least:
image

This is a relative edge case, and this should solve the problem in most codebases, but not all. The correct solution of course is to find the indents based on semantics, which is what #49342 is about, so I don't think this actually closes the bug totally, and so suggest it remain open. However, solving that problem is a bigger task, and requires a large amount of changes in the model, so in the meantime I think this is a good stopgap, and anyways is an appropriate fallback for plain text and unknown syntax.

Where begin/end scope is ambiguous, for instance in yml, where there aren't really "end scopes" per se, it prioritizes it as a begin scope:

image

There is strange behavior when the configured indents don't line up with the indents in the source. These are hidden by the current behavior, but now my PR exposes them in a weird way.

Current version:

image

My version:
image
image

This makes the odd behavior a bit more obvious, but I think the underlying issue is that the indent detection isn't semantic anyways, it's entirely based on the number of spaces compared to the configured indent size. The issue here is that a, b, c, d, and f (but not e and second a) are in the 0th scope, and e and second a are in the 1st scope, because tab settings are set to 4 spaces. I'm not sure what to do about this.

I should also mention that this will not do the appropriate indentation in Allman's style if the line above the { is selected, as mentioned in #53737, but I think that's probably ok, as correct behavior will be seen if the bracket is selected.

Previously, the indent was always to the left of the current line.
While this logic was easier to implement, it is inconsistent with the
behavior expected. This commit changes it to select the scope, rather
than the line's indent. This is not a complete fix for microsoft#49342, as this
does not add support to semantic detection, however, this will work in
probably 90% of the cases, and is a relatively straightforward fix.
@rebornix rebornix self-requested a review July 22, 2019 19:04
@rebornix rebornix self-assigned this Jul 22, 2019
@wmertens
Copy link

LGTM! Small change, big improvement, even if it's not a 100% fix.

@alexdima alexdima assigned alexdima and unassigned rebornix Feb 4, 2020
@alexdima alexdima removed the request for review from rebornix February 6, 2020 15:16
@alexdima alexdima added this to the February 2020 milestone Feb 6, 2020
@alexdima
Copy link
Member

alexdima commented Feb 6, 2020

Thank you!

@alexdima alexdima merged commit 519e5bb into microsoft:master Feb 6, 2020
@github-actions github-actions bot locked and limited conversation to collaborators Mar 28, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants