Skip to content

Commit e9800ab

Browse files
committed
fix #365
1 parent 393c0bb commit e9800ab

2 files changed

Lines changed: 30 additions & 1 deletion

File tree

src/client/extension.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,14 @@ import * as telemetryHelper from './common/telemetry';
1616
import * as telemetryContracts from './common/telemetryContracts';
1717
import { activateSimplePythonRefactorProvider } from './providers/simpleRefactorProvider';
1818
import { activateSetInterpreterProvider } from './providers/setInterpreterProvider';
19+
import { CommentNewLineFormatProvider } from './providers/commentNewLineFormatProvider';
1920
import { activateExecInTerminalProvider } from './providers/execInTerminalProvider';
2021
import * as tests from './unittests/main';
2122
import * as jup from './jupyter/main';
2223
import { HelpProvider } from './helpProvider';
2324
import { activateFormatOnSaveProvider } from './providers/formatOnSaveProvider';
2425
import { WorkspaceSymbols } from './workspaceSymbols/main';
26+
import * as os from 'os';
2527

2628
const PYTHON: vscode.DocumentFilter = { language: 'python', scheme: 'file' };
2729
let unitTestOutChannel: vscode.OutputChannel;
@@ -88,7 +90,11 @@ export function activate(context: vscode.ExtensionContext) {
8890
tests.activate(context, unitTestOutChannel);
8991

9092
context.subscriptions.push(new WorkspaceSymbols(lintingOutChannel));
91-
93+
94+
// In case we have CR LF
95+
const triggerCharacters: string[] = os.EOL.split('');
96+
triggerCharacters.shift();
97+
context.subscriptions.push(vscode.languages.registerOnTypeFormattingEditProvider(PYTHON, new CommentNewLineFormatProvider(), os.EOL.substring(0, 1), ...triggerCharacters));
9298
const hepProvider = new HelpProvider();
9399
context.subscriptions.push(hepProvider);
94100
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { OnTypeFormattingEditProvider, TextEdit, TextDocument, FormattingOptions, CancellationToken, Position } from 'vscode';
2+
3+
export class CommentNewLineFormatProvider implements OnTypeFormattingEditProvider {
4+
provideOnTypeFormattingEdits(document: TextDocument, position: Position, ch: string,
5+
options: FormattingOptions, token: CancellationToken): TextEdit[] {
6+
7+
if (position.line === 0) {
8+
return [];
9+
}
10+
const previousLine = document.lineAt(position.line - 1).text;
11+
const trimmedLine = previousLine.trim();
12+
if (!trimmedLine.startsWith('#') || document.lineAt(position.line).text.trim().length === 0) {
13+
return [];
14+
}
15+
const index = previousLine.indexOf('#');
16+
const leftOvers = previousLine.substring(index + 1).trim();
17+
const additionalSpaces = previousLine.indexOf(leftOvers) - index - 1;
18+
const spaces = Array(additionalSpaces).fill(' ');
19+
return [
20+
TextEdit.insert(position, "#" + spaces.join(''))
21+
];
22+
}
23+
}

0 commit comments

Comments
 (0)