[ty] Fix flaky completions (#22576)

This commit is contained in:
Micha Reiser
2026-01-14 19:23:38 +01:00
committed by GitHub
parent eb96456e1e
commit eaed0d9b5c
2 changed files with 67 additions and 55 deletions

View File

@@ -163,6 +163,13 @@ export default function Chrome({
[workspace, files.index, onRemoveFile],
);
const handleChange = useCallback(
(content: string) => {
onChangeFile(workspace, content);
},
[onChangeFile, workspace],
);
const { defaultLayout, onLayoutChange } = useDefaultLayout({
groupId: "editor-diagnostics",
storage: localStorage,
@@ -221,7 +228,7 @@ export default function Chrome({
diagnostics={checkResult.diagnostics}
workspace={workspace}
onMount={handleEditorMount}
onChange={(content) => onChangeFile(workspace, content)}
onChange={handleChange}
onOpenFile={onSelectFile}
onVendoredFileChange={onSelectVendoredFile}
onBackToUserFile={handleBackToUserFile}

View File

@@ -58,7 +58,7 @@ export default function Playground() {
}
}, [files]);
const handleFileAdded = (workspace: Workspace, name: string) => {
const handleFileAdded = useCallback((workspace: Workspace, name: string) => {
let handle = null;
if (name === SETTINGS_FILE_NAME) {
@@ -68,69 +68,74 @@ export default function Playground() {
}
dispatchFiles({ type: "add", name, handle, content: "" });
};
}, []);
const handleFileChanged = (workspace: Workspace, content: string) => {
if (files.selected == null) {
return;
}
const handleFileChanged = useCallback(
(workspace: Workspace, content: string) => {
if (files.selected == null) {
return;
}
dispatchFiles({
type: "change",
id: files.selected,
content,
});
const handle = files.handles[files.selected];
const handle = files.handles[files.selected];
if (handle != null) {
updateFile(workspace, handle, content, setError);
} else if (fileName === SETTINGS_FILE_NAME) {
updateOptions(workspace, content, setError);
}
if (handle != null) {
updateFile(workspace, handle, content, setError);
} else if (fileName === SETTINGS_FILE_NAME) {
updateOptions(workspace, content, setError);
}
};
dispatchFiles({
type: "change",
id: files.selected,
content,
});
},
[fileName, files.handles, files.selected],
);
const handleFileRenamed = (
workspace: Workspace,
file: FileId,
newName: string,
) => {
if (newName.startsWith("/")) {
setError("File names cannot start with '/'.");
return;
}
if (newName.startsWith("vendored:")) {
setError("File names cannot start with 'vendored:'.");
return;
}
const handleFileRenamed = useCallback(
(workspace: Workspace, file: FileId, newName: string) => {
if (newName.startsWith("/")) {
setError("File names cannot start with '/'.");
return;
}
if (newName.startsWith("vendored:")) {
setError("File names cannot start with 'vendored:'.");
return;
}
const handle = files.handles[file];
let newHandle: FileHandle | null = null;
if (handle == null) {
updateOptions(workspace, null, setError);
} else {
workspace.closeFile(handle);
}
const handle = files.handles[file];
let newHandle: FileHandle | null = null;
if (handle == null) {
updateOptions(workspace, null, setError);
} else {
workspace.closeFile(handle);
}
if (newName === SETTINGS_FILE_NAME) {
updateOptions(workspace, files.contents[file], setError);
} else {
newHandle = workspace.openFile(newName, files.contents[file]);
}
if (newName === SETTINGS_FILE_NAME) {
updateOptions(workspace, files.contents[file], setError);
} else {
newHandle = workspace.openFile(newName, files.contents[file]);
}
dispatchFiles({ type: "rename", id: file, to: newName, newHandle });
};
dispatchFiles({ type: "rename", id: file, to: newName, newHandle });
},
[files.contents, files.handles],
);
const handleFileRemoved = (workspace: Workspace, file: FileId) => {
const handle = files.handles[file];
if (handle == null) {
updateOptions(workspace, null, setError);
} else {
workspace.closeFile(handle);
}
const handleFileRemoved = useCallback(
(workspace: Workspace, file: FileId) => {
const handle = files.handles[file];
if (handle == null) {
updateOptions(workspace, null, setError);
} else {
workspace.closeFile(handle);
}
dispatchFiles({ type: "remove", id: file });
};
dispatchFiles({ type: "remove", id: file });
},
[files.handles],
);
const handleFileSelected = useCallback((file: FileId) => {
dispatchFiles({ type: "selectFile", id: file });