Skip to content

Commit 625ec8c

Browse files
committed
fix: exclude problems and terminal on jetbrains
1 parent 3d942da commit 625ec8c

File tree

4 files changed

+75
-45
lines changed

4 files changed

+75
-45
lines changed

core/config/load.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ async function intermediateToFinalConfig({
393393
params: (cp as ContextProviderWithParams).params,
394394
})),
395395
!!config.docs?.length,
396+
ideInfo.ideType,
396397
);
397398

398399
for (const cp of config.contextProviders ?? []) {

core/config/loadContextProviders.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {
22
AssistantUnrolledNonNullable,
33
ConfigValidationError,
44
} from "@continuedev/config-yaml";
5-
import { IContextProvider } from "..";
5+
import { IContextProvider, IdeType } from "..";
66
import { contextProviderClassFromName } from "../context/providers";
77
import CurrentFileContextProvider from "../context/providers/CurrentFileContextProvider";
88
import DiffContextProvider from "../context/providers/DiffContextProvider";
@@ -22,6 +22,7 @@ import TerminalContextProvider from "../context/providers/TerminalContextProvide
2222
export function loadConfigContextProviders(
2323
configContext: AssistantUnrolledNonNullable["context"],
2424
hasDocs: boolean,
25+
ideType: IdeType,
2526
): {
2627
providers: IContextProvider[];
2728
errors: ConfigValidationError[];
@@ -72,8 +73,19 @@ export function loadConfigContextProviders(
7273
providers.push(new DocsContextProvider({}));
7374
}
7475

76+
// @problems and @terminal are not supported in jetbrains
77+
const filteredProviders = providers.filter((pv) => {
78+
if (ideType === "jetbrains") {
79+
return (
80+
pv.description.title !== TerminalContextProvider.description.title &&
81+
pv.description.title !== ProblemsContextProvider.description.title
82+
);
83+
}
84+
return true;
85+
});
86+
7587
return {
76-
providers,
88+
providers: filteredProviders,
7789
errors,
7890
};
7991
}

core/config/loadContextProviders.vitest.ts

Lines changed: 59 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@ vi.mock("../context/providers/FileContextProvider", () => ({
3535
})),
3636
}));
3737

38-
vi.mock("../context/providers/ProblemsContextProvider", () => ({
39-
default: vi.fn().mockImplementation((options) => ({
38+
vi.mock("../context/providers/ProblemsContextProvider", () => {
39+
const MockProblemsContextProvider = vi.fn().mockImplementation((options) => ({
4040
description: { title: "problems" },
4141
options,
42-
})),
43-
}));
42+
}));
43+
(MockProblemsContextProvider as any).description = { title: "problems" };
44+
return { default: MockProblemsContextProvider };
45+
});
4446

4547
vi.mock("../context/providers/RulesContextProvider", () => ({
4648
default: vi.fn().mockImplementation((options) => ({
@@ -49,12 +51,14 @@ vi.mock("../context/providers/RulesContextProvider", () => ({
4951
})),
5052
}));
5153

52-
vi.mock("../context/providers/TerminalContextProvider", () => ({
53-
default: vi.fn().mockImplementation((options) => ({
54+
vi.mock("../context/providers/TerminalContextProvider", () => {
55+
const MockTerminalContextProvider = vi.fn().mockImplementation((options) => ({
5456
description: { title: "terminal" },
5557
options,
56-
})),
57-
}));
58+
}));
59+
(MockTerminalContextProvider as any).description = { title: "terminal" };
60+
return { default: MockTerminalContextProvider };
61+
});
5862

5963
const mockedContextProviderClassFromName =
6064
contextProviderClassFromName as MockedFunction<
@@ -68,7 +72,7 @@ beforeEach(() => {
6872
describe("loadConfigContextProviders", () => {
6973
describe("with empty or undefined config", () => {
7074
it("should return only default providers when config is undefined", () => {
71-
const result = loadConfigContextProviders(undefined, false);
75+
const result = loadConfigContextProviders(undefined, false, "vscode");
7276

7377
expect(result.errors).toEqual([]);
7478
expect(result.providers).toHaveLength(6);
@@ -88,7 +92,7 @@ describe("loadConfigContextProviders", () => {
8892
});
8993

9094
it("should return only default providers when config is empty array", () => {
91-
const result = loadConfigContextProviders([], false);
95+
const result = loadConfigContextProviders([], false, "vscode");
9296

9397
expect(result.errors).toEqual([]);
9498
expect(result.providers).toHaveLength(6);
@@ -105,10 +109,22 @@ describe("loadConfigContextProviders", () => {
105109
]),
106110
);
107111
});
112+
113+
it("should exclude problems and terminal in jetbrains", () => {
114+
const result = loadConfigContextProviders([], false, "jetbrains");
115+
116+
expect(result.errors).toEqual([]);
117+
expect(result.providers).toHaveLength(4);
118+
119+
const providerTitles = result.providers.map((p) => p.description.title);
120+
expect(providerTitles).toEqual(
121+
expect.arrayContaining(["file", "current-file", "diff", "rules"]),
122+
);
123+
});
108124
});
109125

110126
it("should return default + docs when has docs is true", () => {
111-
const result = loadConfigContextProviders([], true);
127+
const result = loadConfigContextProviders([], true, "vscode");
112128

113129
expect(result.errors).toEqual([]);
114130
expect(result.providers).toHaveLength(7);
@@ -139,7 +155,7 @@ describe("with valid config", () => {
139155

140156
const config = [
141157
{
142-
provider: "custom-provider" as any,
158+
provider: "custom-provider",
143159
name: "my-custom-provider",
144160
params: {
145161
apiKey: "test-key",
@@ -148,7 +164,7 @@ describe("with valid config", () => {
148164
},
149165
];
150166

151-
const result = loadConfigContextProviders(config, false);
167+
const result = loadConfigContextProviders(config, false, "vscode");
152168

153169
expect(result.errors).toEqual([]);
154170
expect(mockedContextProviderClassFromName).toHaveBeenCalledWith(
@@ -191,18 +207,18 @@ describe("with valid config", () => {
191207

192208
const config = [
193209
{
194-
provider: "provider-1" as any,
210+
provider: "provider-1",
195211
name: "first-provider",
196212
params: { setting1: "value1" },
197213
},
198214
{
199-
provider: "provider-2" as any,
215+
provider: "provider-2",
200216
name: "second-provider",
201217
params: { setting2: "value2" },
202218
},
203219
];
204220

205-
const result = loadConfigContextProviders(config, false);
221+
const result = loadConfigContextProviders(config, false, "vscode");
206222

207223
expect(result.errors).toEqual([]);
208224
expect(result.providers).toHaveLength(8); // 2 custom + 6 defaults
@@ -228,13 +244,13 @@ describe("with valid config", () => {
228244

229245
const config = [
230246
{
231-
provider: "no-params-provider" as any,
247+
provider: "no-params-provider",
232248
name: "simple-provider",
233249
params: {},
234250
},
235251
];
236252

237-
const result = loadConfigContextProviders(config, false);
253+
const result = loadConfigContextProviders(config, false, "vscode");
238254

239255
expect(result.errors).toEqual([]);
240256
expect(mockProvider).toHaveBeenCalledWith({
@@ -252,12 +268,12 @@ describe("with valid config", () => {
252268

253269
const config = [
254270
{
255-
provider: "provider-without-params" as any,
271+
provider: "provider-without-params",
256272
name: "minimal-provider",
257273
} as any, // Cast to bypass type checking for test
258274
];
259275

260-
const result = loadConfigContextProviders(config, false);
276+
const result = loadConfigContextProviders(config, false, "vscode");
261277

262278
expect(result.errors).toEqual([]);
263279
expect(mockProvider).toHaveBeenCalledWith({
@@ -272,13 +288,13 @@ describe("error handling", () => {
272288

273289
const config = [
274290
{
275-
provider: "unknown-provider" as any,
291+
provider: "unknown-provider",
276292
name: "test-provider",
277293
params: {},
278294
},
279295
];
280296

281-
const result = loadConfigContextProviders(config, false);
297+
const result = loadConfigContextProviders(config, false, "vscode");
282298

283299
expect(result.errors).toEqual([
284300
{
@@ -299,18 +315,18 @@ describe("error handling", () => {
299315

300316
const config = [
301317
{
302-
provider: "unknown-1" as any,
318+
provider: "unknown-1",
303319
name: "test-1",
304320
params: {},
305321
},
306322
{
307-
provider: "unknown-2" as any,
323+
provider: "unknown-2",
308324
name: "test-2",
309325
params: {},
310326
},
311327
];
312328

313-
const result = loadConfigContextProviders(config, false);
329+
const result = loadConfigContextProviders(config, false, "vscode");
314330

315331
expect(result.errors).toEqual([
316332
{
@@ -338,18 +354,18 @@ describe("error handling", () => {
338354

339355
const config = [
340356
{
341-
provider: "valid-provider" as any,
357+
provider: "valid-provider",
342358
name: "valid",
343359
params: { key: "value" },
344360
},
345361
{
346-
provider: "invalid-provider" as any,
362+
provider: "invalid-provider",
347363
name: "invalid",
348364
params: {},
349365
},
350366
];
351367

352-
const result = loadConfigContextProviders(config, false);
368+
const result = loadConfigContextProviders(config, false, "vscode");
353369

354370
expect(result.errors).toEqual([
355371
{
@@ -374,13 +390,13 @@ describe("default provider merging", () => {
374390

375391
const config = [
376392
{
377-
provider: "file" as any,
393+
provider: "file",
378394
name: "custom-file-provider",
379395
params: { maxFiles: 100 },
380396
},
381397
];
382398

383-
const result = loadConfigContextProviders(config, false);
399+
const result = loadConfigContextProviders(config, false, "vscode");
384400

385401
expect(result.errors).toEqual([]);
386402

@@ -409,13 +425,13 @@ describe("default provider merging", () => {
409425

410426
const config = [
411427
{
412-
provider: "custom-only" as any,
428+
provider: "custom-only",
413429
name: "custom",
414430
params: {},
415431
},
416432
];
417433

418-
const result = loadConfigContextProviders(config, false);
434+
const result = loadConfigContextProviders(config, false, "vscode");
419435

420436
expect(result.errors).toEqual([]);
421437
expect(result.providers).toHaveLength(7); // 1 custom + 6 defaults
@@ -445,13 +461,13 @@ describe("default provider merging", () => {
445461

446462
const config = [
447463
{
448-
provider: "custom-provider" as any,
464+
provider: "custom-provider",
449465
name: "custom",
450466
params: {},
451467
},
452468
];
453469

454-
const result = loadConfigContextProviders(config, false);
470+
const result = loadConfigContextProviders(config, false, "vscode");
455471

456472
expect(result.providers[0].description.title).toBe("custom-provider");
457473

@@ -480,29 +496,29 @@ describe("edge cases", () => {
480496

481497
const config = [
482498
{
483-
provider: "failing-provider" as any,
499+
provider: "failing-provider",
484500
name: "failing",
485501
params: {},
486502
},
487503
];
488504

489-
expect(() => loadConfigContextProviders(config, false)).toThrow(
505+
expect(() => loadConfigContextProviders(config, false, "vscode")).toThrow(
490506
"Provider construction failed",
491507
);
492508
});
493509

494510
it("should handle null provider class", () => {
495-
mockedContextProviderClassFromName.mockReturnValue(null as any);
511+
mockedContextProviderClassFromName.mockReturnValue(undefined);
496512

497513
const config = [
498514
{
499-
provider: "null-provider" as any,
515+
provider: "null-provider",
500516
name: "null",
501517
params: {},
502518
},
503519
];
504520

505-
const result = loadConfigContextProviders(config, false);
521+
const result = loadConfigContextProviders(config, false, "vscode");
506522

507523
expect(result.errors).toEqual([
508524
{
@@ -524,13 +540,13 @@ describe("edge cases", () => {
524540

525541
const config = [
526542
{
527-
provider: "custom-file" as any,
543+
provider: "custom-file",
528544
name: "my-file-provider",
529545
params: { customParam: "value" },
530546
},
531547
];
532548

533-
const result = loadConfigContextProviders(config, false);
549+
const result = loadConfigContextProviders(config, false, "vscode");
534550

535551
expect(result.errors).toEqual([]);
536552

@@ -551,7 +567,7 @@ describe("edge cases", () => {
551567

552568
describe("provider instantiation", () => {
553569
it("should call default provider constructors with empty options", () => {
554-
loadConfigContextProviders([], false);
570+
loadConfigContextProviders([], false, "vscode");
555571

556572
expect(FileContextProvider).toHaveBeenCalledWith({});
557573
expect(CurrentFileContextProvider).toHaveBeenCalledWith({});
@@ -562,7 +578,7 @@ describe("provider instantiation", () => {
562578
});
563579

564580
it("should call provider constructors exactly once per provider", () => {
565-
loadConfigContextProviders([], false);
581+
loadConfigContextProviders([], false, "vscode");
566582

567583
expect(FileContextProvider).toHaveBeenCalledTimes(1);
568584
expect(CurrentFileContextProvider).toHaveBeenCalledTimes(1);

core/config/yaml/loadYaml.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -370,6 +370,7 @@ async function configYamlToContinueConfig(options: {
370370
const { providers, errors: contextErrors } = loadConfigContextProviders(
371371
config.context,
372372
!!config.docs?.length,
373+
ideInfo.ideType,
373374
);
374375

375376
continueConfig.contextProviders = providers;

0 commit comments

Comments
 (0)