fix: bug that desyncs codeManager, executeCode, lspPlugin
This commit is contained in:
@ -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])
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user