-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
black.ts
31 lines (26 loc) · 1.3 KB
/
black.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import { CancellationToken, FormattingOptions, OutputChannel, Range, TextDocument, TextEdit, Thenable, window } from 'coc.nvim';
import { IPythonSettings } from '../types';
import { BaseFormatter } from './baseFormatter';
export class BlackFormatter extends BaseFormatter {
constructor(public readonly pythonSettings: IPythonSettings, public readonly outputChannel: OutputChannel) {
super('black', pythonSettings, outputChannel);
}
public formatDocument(document: TextDocument, options: FormattingOptions, token: CancellationToken, range?: Range): Thenable<TextEdit[]> {
const formatSelection = range ? range : false;
if (formatSelection) {
const errorMessage = async () => {
this.outputChannel.appendLine('Black does not support the "Format Selection" command');
// Black does not support partial formatting on purpose.
window.showErrorMessage('Black does not support the "Format Selection" command');
return [] as TextEdit[];
};
return errorMessage();
}
const blackArgs = ['--diff', '--quiet'];
if (this.pythonSettings.formatting.blackArgs.length > 0) {
blackArgs.push(...this.pythonSettings.formatting.blackArgs);
}
const promise = super.provideDocumentFormattingEdits(document, options, token, blackArgs);
return promise;
}
}