This repository has been archived by the owner on Apr 14, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 133
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…er tests from vscode-python
…ht fixes for better formatting
…next non-ignored token
…backtick/exec as a statement)
LGTM pending @AlexanderSher approval |
AlexanderSher
approved these changes
Sep 25, 2018
Closed
jakebailey
added a commit
to jakebailey/python-language-server
that referenced
this pull request
Nov 1, 2019
Implement line formatting via on-type formatting, triggering on newline and semicolon.
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR implements line formatting via on-type formatting, triggering on newline and semicolon. It only tokenizes the code to be formatted, and does not require parsing.
This covers all of the existing formatOnType issues in vscode-python (microsoft/vscode-python#1799, microsoft/vscode-python#1784, microsoft/vscode-python#1792), as well as some other cases that weren't being handled already (some multiline stuff, commas in brackets, all of the different types of unpacking, more).
Slicing follows the PEP8 pet peeves example list by using a simple heuristic to decide when to insert a space. If the thing to the left/right of a colon is "simple" (a single identifier/constant, with or without a unary operator), then no space is inserted. The heuristic also checks for commas to handle multi-index slicing.
Tests have been copied from vscode-python, with some minor modifications for PEP8 correctness. Extra tests have been added for the new fixes.
Some issues/possible improvements:
\
. Since the token is never captured, the formatter won't know it's there and will not insert it. This issue isn't hit in the editor when hitting enter after the\
, since the formatter is called after the newline gets inserted. The only way to trigger this issue from the editor is to hit;
when there is no next line, or to somehow invoke a DocumentOnTypeFormatter RPC call directly without inserting the newline.\
token separately from the following newline, but I haven't investigated the implications of that change.