Skip to content

Commit 51532f7

Browse files
committed
add options to sidebar & handle exceptions
1 parent 718718c commit 51532f7

File tree

4 files changed

+88
-71
lines changed

4 files changed

+88
-71
lines changed

ui/src/components/Sidebar.tsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ function SidebarSettings() {
5353
const setAutoRunLayout = useStore(store, (state) => state.setAutoRunLayout);
5454
const contextualZoom = useStore(store, (state) => state.contextualZoom);
5555
const setContextualZoom = useStore(store, (state) => state.setContextualZoom);
56+
const autoCompletion = useStore(store, (state) => state.autoCompletion);
57+
const flipAutoCompletion = useStore(
58+
store,
59+
(state) => state.flipAutoCompletion
60+
);
61+
const client = useApolloClient();
5662
return (
5763
<Box>
5864
<Box>
@@ -130,6 +136,23 @@ function SidebarSettings() {
130136
/>
131137
</FormGroup>
132138
</Tooltip>
139+
<Tooltip title={"Enable Auto Completion"} disableInteractive>
140+
<FormGroup>
141+
<FormControlLabel
142+
control={
143+
<Switch
144+
checked={autoCompletion}
145+
size="small"
146+
color="warning"
147+
onChange={(event: React.ChangeEvent<HTMLInputElement>) => {
148+
flipAutoCompletion(client);
149+
}}
150+
/>
151+
}
152+
label="Auto Completion"
153+
/>
154+
</FormGroup>
155+
</Tooltip>
133156
<Tooltip title={"Show Annotations in Editor"} disableInteractive>
134157
<FormGroup>
135158
<FormControlLabel

ui/src/lib/codeiumClient.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,11 @@ export class LanguageServerClient {
5959
this.abortController?.abort();
6060
this.abortController = new AbortController();
6161
const signal = this.abortController.signal;
62-
const getCompletionsPromise = this.client.getCompletions(request, {
63-
signal,
64-
headers: this.getHeaders(request.metadata?.apiKey),
65-
});
6662
try {
63+
const getCompletionsPromise = this.client.getCompletions(request, {
64+
signal,
65+
headers: this.getHeaders(request.metadata?.apiKey),
66+
});
6767
console.log("codeium request", request);
6868
return await getCompletionsPromise;
6969
} catch (err) {

ui/src/lib/monacoCompletionProvider.ts

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -151,42 +151,48 @@ export class MonacoCompletionProvider
151151
const { text, utf8ByteOffset, additionalUtf8ByteOffset } =
152152
this.computeTextAndOffsets(model, position);
153153
const numUtf8Bytes = additionalUtf8ByteOffset + utf8ByteOffset;
154-
const request = new GetCompletionsRequest({
155-
metadata: this.client.getMetadata(this.ideinfo, apiKey),
156-
document: {
157-
text: text,
158-
editorLanguage: "python",
159-
language: Language.PYTHON,
160-
cursorOffset: BigInt(numUtf8Bytes),
161-
lineEnding: "\n",
162-
relativePath: undefined,
163-
absolutePath: this.absolutePath(model),
164-
},
165-
editorOptions: {
166-
tabSize: BigInt(model.getOptions().tabSize),
167-
insertSpaces: model.getOptions().insertSpaces,
168-
},
169-
});
170-
const response = await this.client.getCompletions(request);
171-
console.log("codeium request", request);
172-
console.log("codeium response", response);
173-
if (response === undefined) {
154+
try {
155+
const request = new GetCompletionsRequest({
156+
metadata: this.client.getMetadata(this.ideinfo, apiKey),
157+
document: {
158+
text: text,
159+
editorLanguage: "python",
160+
language: Language.PYTHON,
161+
cursorOffset: BigInt(numUtf8Bytes),
162+
lineEnding: "\n",
163+
relativePath: undefined,
164+
absolutePath: this.absolutePath(model),
165+
},
166+
editorOptions: {
167+
tabSize: BigInt(model.getOptions().tabSize),
168+
insertSpaces: model.getOptions().insertSpaces,
169+
},
170+
});
171+
const response = await this.client.getCompletions(request);
172+
console.log("codeium request", request);
173+
console.log("codeium response", response);
174+
if (response === undefined) {
175+
return { items: [] };
176+
}
177+
const items = response.completionItems
178+
.map((completionItem) =>
179+
createInlineCompletionItem(
180+
completionItem,
181+
model,
182+
additionalUtf8ByteOffset,
183+
apiKey,
184+
this.modelUriToEditor.get(model.uri.toString())
185+
)
186+
)
187+
.filter(
188+
(item): item is monaco.languages.InlineCompletion =>
189+
item !== undefined
190+
);
191+
return { items };
192+
} catch (e) {
193+
console.log(e);
174194
return { items: [] };
175195
}
176-
const items = response.completionItems
177-
.map((completionItem) =>
178-
createInlineCompletionItem(
179-
completionItem,
180-
model,
181-
additionalUtf8ByteOffset,
182-
apiKey,
183-
this.modelUriToEditor.get(model.uri.toString())
184-
)
185-
)
186-
.filter(
187-
(item): item is monaco.languages.InlineCompletion => item !== undefined
188-
);
189-
return { items };
190196
}
191197

192198
handleItemDidShow(): void {

ui/src/lib/store/repoStateSlice.tsx

Lines changed: 21 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -328,7 +328,7 @@ export const createRepoStateSlice: StateCreator<
328328
),
329329

330330
registerCompletion: async (client) => {
331-
if (get().autoCompletion || unregister) return;
331+
if (get().autoCompletion || get().unregisterCompletionHandler) return;
332332
console.log(get().user);
333333
if (
334334
get().user.codeiumAPIKey === undefined ||
@@ -348,26 +348,21 @@ export const createRepoStateSlice: StateCreator<
348348
set({ user: { ...get().user, codeiumAPIKey: api_key } });
349349
}
350350
}
351-
console.log("registerCompletion", api_key, name);
351+
console.log("get api key", api_key, name);
352352
}
353353
} catch (e) {
354-
console.log("registerCompletion error", e);
354+
console.log("api key error", e);
355355
}
356356
}
357357
const apiKey = get().user.codeiumAPIKey;
358358
const completionProvider = new MonacoCompletionProvider(apiKey);
359359
// const completionProvider = new MonacoCompletionProvider();
360-
console.log("completionProvider", completionProvider);
361-
console.log(monaco.editor.getModels());
362-
monaco.editor.getModels().forEach((model) => {
363-
console.log("model", model.getValue());
364-
});
365360
const { dispose } = monaco.languages.registerInlineCompletionsProvider(
366361
{ pattern: "**" },
367362
completionProvider
368363
);
369364
console.log("register completion", dispose);
370-
unregister = dispose;
365+
set({ unregisterCompletionHandler: dispose });
371366
console.log("state.autoCompletion", get().autoCompletion);
372367
// monaco.editor.registerCommand(
373368
// "codeium.acceptCompletion",
@@ -387,33 +382,26 @@ export const createRepoStateSlice: StateCreator<
387382
completionProvider.acceptedLastCompletion(apiKey, completionId);
388383
}
389384
);
385+
386+
set({ autoCompletion: true });
390387
},
391388

392-
unregisterCompletion: () =>
393-
set(
394-
produce((state) => {
395-
console.log("unregisterCompletion", state.unregisterCompletionHandler);
396-
if (typeof unregister === "function") {
397-
console.log("unregister", unregister);
398-
unregister();
399-
unregister = null;
400-
}
401-
})
402-
),
389+
unregisterCompletion: () => {
390+
const dispose = get().unregisterCompletionHandler;
391+
if (typeof dispose === "function") {
392+
console.log("unregister", dispose);
393+
dispose();
394+
set({ unregisterCompletionHandler: null, autoCompletion: false });
395+
}
396+
},
403397

404-
flipAutoCompletion: (client) =>
405-
set(
406-
produce((state) => {
407-
console.log("state.autoCompletion", state.autoCompletion);
408-
if (state.autoCompletion) {
409-
state.unregisterCompletion();
410-
} else {
411-
state.registerCompletion(client);
412-
}
413-
state.autoCompletion = !state.autoCompletion;
414-
console.log("unregister", state.unregisterCompletionHandler);
415-
})
416-
),
398+
flipAutoCompletion: (client) => {
399+
if (get().autoCompletion) {
400+
get().unregisterCompletion();
401+
} else {
402+
get().registerCompletion(client);
403+
}
404+
},
417405
});
418406

419407
function loadRepo(set, get) {

0 commit comments

Comments
 (0)