fix: bug that desyncs codeManager, executeCode, lspPlugin

This commit is contained in:
Kevin Nadro
2025-02-05 11:07:27 -06:00
parent 25c73aae6c
commit 2ac836c0b8
2 changed files with 19 additions and 2 deletions

View File

@ -490,6 +490,11 @@ test.describe('Editor tests', () => {
await page.keyboard.press('ArrowLeft')
await page.keyboard.press('ArrowRight')
// FIXME: lsp errors do not propagate to the frontend until engine is connected and code is executed
// This timeout is to wait for engine connection. LSP and code execution errors should be handled differently
// LSP can emit errors as fast as it waits and show them in the editor
await page.waitForTimeout(10000)
// error in guter
await expect(page.locator('.cm-lint-marker-info').first()).toBeVisible()
@ -641,7 +646,7 @@ test.describe('Editor tests', () => {
width = 0.500
height = 0.500
dia = 4
fn squareHole = (l, w) => {
squareHoleSketch = startSketchOn('XY')
|> startProfileAt([-width / 2, -length / 2], %)
@ -714,7 +719,7 @@ test.describe('Editor tests', () => {
|> line(end = [0, -10], tag = $revolveAxis)
|> close()
|> extrude(length = 10)
sketch001 = startSketchOn(box, revolveAxis)
|> startProfileAt([5, 10], %)
|> line(end = [0, -10])

View File

@ -25,6 +25,18 @@ export class KclPlugin implements PluginValue {
constructor(client: LanguageServerClient) {
this.client = client
// Gotcha: Code can be written into the CodeMirror editor but not propagated to codeManager.code
// because the update function has not run. We need to initialize the codeManager.code when lsp initializes
// because new code could have been written into the editor before the update callback is initialized.
// There appears to be limited ways to safely get the current doc content. This appears to be sync and safe.
const kclLspPlugin = this.client.plugins.find((plugin) => {
return plugin.client.name === 'kcl'
})
if (kclLspPlugin) {
// @ts-ignore Ignoring this private dereference of .view on the plugin. I do not have another helper method that can give me doc string
codeManager.code = kclLspPlugin.view.state.doc.toString()
}
}
// When a doc update needs to be sent to the server, this holds the