Skip to content

Commit 7e4e2fa

Browse files
committed
fix(lsp): honor per-server formatting toggle
1 parent 0835d63 commit 7e4e2fa

3 files changed

Lines changed: 27 additions & 10 deletions

File tree

src/cm/lsp/clientManager.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,6 @@ function safeString(value: unknown): string {
6060
return value != null ? String(value) : "";
6161
}
6262

63-
const defaultKeymaps = keymap.of([
64-
...formatKeymap,
65-
...acodeRenameKeymap,
66-
...jumpToDefinitionKeymap,
67-
...findReferencesKeymap,
68-
]);
69-
7063
interface BuiltinExtensionsResult {
7164
extensions: Extension[];
7265
diagnosticsExtension: Extension | LSPClientExtension | null;
@@ -83,14 +76,25 @@ function buildBuiltinExtensions(
8376
diagnostics: includeDiagnostics = true,
8477
inlayHints: includeInlayHints = true,
8578
documentHighlights: includeDocumentHighlights = true,
79+
formatting: includeFormatting = true,
8680
} = config;
8781

8882
const extensions: Extension[] = [];
8983
let diagnosticsExtension: Extension | LSPClientExtension | null = null;
9084

9185
if (includeCompletion) extensions.push(serverCompletion());
9286
if (includeHover) extensions.push(hoverTooltips());
93-
if (includeKeymaps) extensions.push(defaultKeymaps);
87+
if (includeKeymaps) {
88+
const bindings = [
89+
...(includeFormatting ? formatKeymap : []),
90+
...acodeRenameKeymap,
91+
...jumpToDefinitionKeymap,
92+
...findReferencesKeymap,
93+
];
94+
if (bindings.length) {
95+
extensions.push(keymap.of(bindings));
96+
}
97+
}
9498
if (includeSignature) extensions.push(signatureHelp());
9599
if (includeDiagnostics) {
96100
const diagExt = serverDiagnostics();
@@ -263,6 +267,7 @@ export class LspClientManager {
263267
if (!servers.length) return false;
264268

265269
for (const server of servers) {
270+
if (!supportsBuiltinFormatting(server)) continue;
266271
try {
267272
const context: RootUriContext = {
268273
uri: normalizedUri,
@@ -912,6 +917,10 @@ function resolveIndentWidth(unit: string): number {
912917
return width || 4;
913918
}
914919

920+
function supportsBuiltinFormatting(server: LspServerDefinition): boolean {
921+
return server.clientConfig?.builtinExtensions?.formatting !== false;
922+
}
923+
915924
const defaultManager = new LspClientManager();
916925

917926
export default defaultManager;

src/cm/lsp/formatter.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@ import { getModes } from "cm/modelist";
33
import toast from "components/toast";
44
import lspClientManager from "./clientManager";
55
import serverRegistry from "./serverRegistry";
6-
import type { AcodeApi, FileMetadata } from "./types";
6+
import type { AcodeApi, FileMetadata, LspServerDefinition } from "./types";
77

88
interface Mode {
99
name?: string;
1010
extensions?: string;
1111
}
1212

13+
function supportsBuiltinFormatting(server: LspServerDefinition): boolean {
14+
return server?.clientConfig?.builtinExtensions?.formatting !== false;
15+
}
16+
1317
interface EditorManagerWithLsp {
1418
editor?: EditorView;
1519
activeFile?: AcodeFile;
@@ -32,6 +36,7 @@ function getActiveMetadata(
3236
export function registerLspFormatter(acode: AcodeApi): void {
3337
const languages = new Set<string>();
3438
serverRegistry.listServers().forEach((server) => {
39+
if (!supportsBuiltinFormatting(server)) return;
3540
(server.languages || []).forEach((lang) => {
3641
if (lang) languages.add(String(lang));
3742
});
@@ -56,7 +61,9 @@ export function registerLspFormatter(acode: AcodeApi): void {
5661
toast("Unknown language for LSP formatting");
5762
return false;
5863
}
59-
const servers = serverRegistry.getServersForLanguage(languageId);
64+
const servers = serverRegistry
65+
.getServersForLanguage(languageId)
66+
.filter(supportsBuiltinFormatting);
6067
if (!servers.length) {
6168
toast("No LSP formatter available");
6269
return false;

src/cm/lsp/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ export interface BuiltinExtensionsConfig {
145145
diagnostics?: boolean;
146146
inlayHints?: boolean;
147147
documentHighlights?: boolean;
148+
formatting?: boolean;
148149
}
149150

150151
export interface AcodeClientConfig {

0 commit comments

Comments
 (0)