Clear the AST if there was a parse error. (#2706)

Clear the AST if there was a parse error.

This leads to an unfortunate loop (good -> invalid -> original) that
wouldn't clear the diagnostics from the invalid step.
This commit is contained in:
Paul Tagliamonte
2024-06-19 16:15:22 -04:00
committed by GitHub
parent 1b0c6298d7
commit b26764bc9a
2 changed files with 59 additions and 3 deletions

View File

@ -41,7 +41,10 @@ export class KclManager {
engineCommandManager: EngineCommandManager
private _defferer = deferExecution((code: string) => {
const ast = this.safeParse(code)
if (!ast) return
if (!ast) {
this.clearAst()
return
}
try {
const fmtAndStringify = (ast: Program) =>
JSON.stringify(parse(recast(ast)))
@ -146,6 +149,18 @@ export class KclManager {
this._executeCallback = callback
}
clearAst() {
this._ast = {
body: [],
start: 0,
end: 0,
nonCodeMeta: {
nonCodeNodes: {},
start: [],
},
}
}
safeParse(code: string): Program | null {
try {
const ast = parse(code)
@ -293,14 +308,20 @@ export class KclManager {
if (!force) return this._defferer(codeManager.code)
const ast = this.safeParse(codeManager.code)
if (!ast) return
if (!ast) {
this.clearAst()
return
}
this.ast = { ...ast }
return this.executeAst(ast, zoomToFit)
}
format() {
const originalCode = codeManager.code
const ast = this.safeParse(originalCode)
if (!ast) return
if (!ast) {
this.clearAst()
return
}
const code = recast(ast)
if (originalCode === code) return