* Fix error of not showing errors when reopening KCL code pane * add test for errors not shown after reopening code pane * rename test * typo in e2e/playwright/editor-tests.spec.ts Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com> * lint * fmt * fix test: Opening and closing the code pane will consistently show error diagnostics * PR feedback: use catch(reportRejection) for safeParse * no need for lint rule --------- Co-authored-by: graphite-app[bot] <96075541+graphite-app[bot]@users.noreply.github.com>
This commit is contained in:
@ -78,11 +78,10 @@ extrude001 = extrude(sketch001, length = 5)`
|
||||
|
||||
// Delete a character to break the KCL
|
||||
await editor.openPane()
|
||||
await editor.scrollToText('bracketLeg1Sketch, length = thickness)')
|
||||
await page
|
||||
.getByText('extrude(bracketLeg1Sketch, length = thickness)')
|
||||
.click()
|
||||
await page.keyboard.press('Backspace')
|
||||
await editor.scrollToText('extrude(%, length = width)')
|
||||
await page.getByText('extrude(%, length = width)').click()
|
||||
|
||||
await page.keyboard.press(')')
|
||||
|
||||
// Ensure that a badge appears on the button
|
||||
await expect(codePaneButtonHolder).toContainText('notification')
|
||||
@ -99,16 +98,11 @@ extrude001 = extrude(sketch001, length = 5)`
|
||||
|
||||
await page.waitForTimeout(500)
|
||||
|
||||
// Ensure that a badge appears on the button
|
||||
await expect(codePaneButtonHolder).toContainText('notification')
|
||||
// Ensure we have no errors in the gutter.
|
||||
await expect(page.locator('.cm-lint-marker-error')).not.toBeVisible()
|
||||
|
||||
// Open the code pane
|
||||
await editor.openPane()
|
||||
|
||||
// Go to our problematic code again (missing closing paren!)
|
||||
await editor.scrollToText('extrude(bracketLeg1Sketch, length = thickness')
|
||||
// Go to our problematic code again
|
||||
await editor.scrollToText('extrude(%, length = w')
|
||||
|
||||
// Ensure that a badge appears on the button
|
||||
await expect(codePaneButtonHolder).toContainText('notification')
|
||||
|
||||
@ -1590,4 +1590,38 @@ sketch001 = startSketchOn(XZ)
|
||||
await expect(page.getByTestId('center-rectangle')).toBeVisible()
|
||||
})
|
||||
})
|
||||
|
||||
test('syntax errors still show when reopening KCL pane', async ({
|
||||
page,
|
||||
homePage,
|
||||
scene,
|
||||
cmdBar,
|
||||
}) => {
|
||||
const u = await getUtils(page)
|
||||
await page.setBodyDimensions({ width: 1200, height: 500 })
|
||||
|
||||
await homePage.goToModelingScene()
|
||||
|
||||
// Wait for connection, this is especially important for this test, because safeParse is invoked when
|
||||
// connection is established which would interfere with the test if it happened during later steps.
|
||||
await scene.connectionEstablished()
|
||||
await scene.settled(cmdBar)
|
||||
|
||||
// Code with no error
|
||||
await u.codeLocator.fill(`x = 7`)
|
||||
await page.waitForTimeout(200) // allow some time for the error to show potentially
|
||||
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(0)
|
||||
|
||||
// Code with error
|
||||
await u.codeLocator.fill(`x 7`)
|
||||
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(1)
|
||||
|
||||
// Close and reopen KCL code panel
|
||||
await u.closeKclCodePanel()
|
||||
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(0) // error disappears on close
|
||||
await u.openKclCodePanel()
|
||||
|
||||
// Verify error is still visible
|
||||
await expect(page.locator('.cm-lint-marker-error')).toHaveCount(1)
|
||||
})
|
||||
})
|
||||
|
||||
@ -53,6 +53,7 @@ import {
|
||||
kclEditorActor,
|
||||
selectionEventSelector,
|
||||
} from '@src/machines/kclEditorMachine'
|
||||
import { reportRejection } from '@src/lib/trap'
|
||||
|
||||
export const editorShortcutMeta = {
|
||||
formatCode: {
|
||||
@ -210,12 +211,19 @@ export const KclEditorPane = () => {
|
||||
editorManager.setEditorView(_editorView)
|
||||
kclEditorActor.send({ type: 'setKclEditorMounted', data: true })
|
||||
|
||||
// Update diagnostics as they are cleared when the editor is unmounted.
|
||||
// Without this, errors would not be shown when closing and reopening the editor.
|
||||
kclManager
|
||||
.safeParse(codeManager.code)
|
||||
.then(() => {
|
||||
// On first load of this component, ensure we show the current errors
|
||||
// in the editor.
|
||||
// Make sure we don't add them twice.
|
||||
if (diagnosticCount(_editorView.state) === 0) {
|
||||
kclManager.setDiagnosticsForCurrentErrors()
|
||||
}
|
||||
})
|
||||
.catch(reportRejection)
|
||||
}}
|
||||
/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user