Skip to content

Commit 54d3cbd

Browse files
committed
Fixes part of #1086: v2.1.10 - Extension 'ESlint' cannot format file
1 parent ff1182f commit 54d3cbd

File tree

1 file changed

+28
-24
lines changed

1 file changed

+28
-24
lines changed

server/src/eslintServer.ts

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -870,6 +870,30 @@ function resolveSettings(document: TextDocument): Promise<TextDocumentSettings>
870870
connection.sendRequest(ProbeFailedRequest.type, params);
871871
}
872872
}
873+
if (settings.format && settings.validate === Validate.on && TextDocumentSettings.hasLibrary(settings)) {
874+
const Uri = URI.parse(uri);
875+
const isFile = Uri.scheme === 'file';
876+
let pattern: string = isFile
877+
? Uri.path.replace(/\\/g, '/')
878+
: Uri.path;
879+
pattern = pattern.replace('[', '\\[');
880+
pattern = pattern.replace(']', '\\]');
881+
pattern = pattern.replace('{', '\\{');
882+
pattern = pattern.replace('}', '\\}');
883+
884+
const filter: DocumentFilter = { scheme: Uri.scheme, pattern: pattern };
885+
const options: DocumentFormattingRegistrationOptions = { documentSelector: [filter] };
886+
if (!isFile) {
887+
formatterRegistrations.set(uri, connection.client.register(DocumentFormattingRequest.type, options));
888+
} else {
889+
const filePath = getFilePath(uri)!;
890+
withCLIEngine((cli) => {
891+
if (!cli.isPathIgnored(filePath)) {
892+
formatterRegistrations.set(uri, connection.client.register(DocumentFormattingRequest.type, options));
893+
}
894+
}, settings);
895+
}
896+
}
873897
return settings;
874898
});
875899
}, () => {
@@ -1050,30 +1074,6 @@ function setupDocumentsListeners() {
10501074
if (settings.validate !== Validate.on || !TextDocumentSettings.hasLibrary(settings)) {
10511075
return;
10521076
}
1053-
if (settings.format) {
1054-
const uri = URI.parse(event.document.uri);
1055-
const isFile = uri.scheme === 'file';
1056-
let pattern: string = isFile
1057-
? uri.path.replace(/\\/g, '/')
1058-
: uri.path;
1059-
pattern = pattern.replace('[', '\\[');
1060-
pattern = pattern.replace(']', '\\]');
1061-
pattern = pattern.replace('{', '\\{');
1062-
pattern = pattern.replace('}', '\\}');
1063-
1064-
const filter: DocumentFilter = { scheme: uri.scheme, pattern: pattern };
1065-
const options: DocumentFormattingRegistrationOptions = { documentSelector: [filter] };
1066-
if (!isFile) {
1067-
formatterRegistrations.set(event.document.uri, connection.client.register(DocumentFormattingRequest.type, options));
1068-
} else {
1069-
const filePath = getFilePath(uri)!;
1070-
withCLIEngine((cli) => {
1071-
if (!cli.isPathIgnored(filePath)) {
1072-
formatterRegistrations.set(event.document.uri, connection.client.register(DocumentFormattingRequest.type, options));
1073-
}
1074-
}, settings);
1075-
}
1076-
}
10771077
if (settings.run === 'onSave') {
10781078
messageQueue.addNotificationMessage(ValidateNotification.type, event.document, event.document.version);
10791079
}
@@ -1125,6 +1125,10 @@ function environmentChanged() {
11251125
for (let document of documents.all()) {
11261126
messageQueue.addNotificationMessage(ValidateNotification.type, document, document.version);
11271127
}
1128+
for (const unregistration of formatterRegistrations.values()) {
1129+
unregistration.then(disposable => disposable.dispose());
1130+
}
1131+
formatterRegistrations.clear();
11281132
}
11291133

11301134
function trace(message: string, verbose?: string): void {

0 commit comments

Comments
 (0)