we have persistence. persisting all store values' ASTs to localStorage
This commit is contained in:
parent
1029b1671f
commit
8c3237e0db
8 changed files with 177 additions and 70 deletions
100
src/ast.ts
100
src/ast.ts
|
|
@ -5,25 +5,25 @@ import type { Value } from './types';
|
|||
export type Literal = {
|
||||
kind: 'literal'
|
||||
value: Value
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Variable = {
|
||||
kind: 'variable'
|
||||
name: string
|
||||
line: number
|
||||
line?: number
|
||||
column: number
|
||||
start: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Constructor = {
|
||||
kind: 'constructor'
|
||||
name: string
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
// Functions
|
||||
|
|
@ -32,18 +32,18 @@ export type Lambda = {
|
|||
kind: 'lambda'
|
||||
params: string[]
|
||||
body: AST
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Apply = {
|
||||
kind: 'apply'
|
||||
func: AST
|
||||
args: AST[]
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
// Bindings
|
||||
|
|
@ -53,9 +53,9 @@ export type Let = {
|
|||
name: string
|
||||
value: AST
|
||||
body: AST
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
// Matching
|
||||
|
|
@ -64,17 +64,17 @@ export type Match = {
|
|||
kind: 'match'
|
||||
expr: AST
|
||||
cases: MatchCase[]
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type MatchCase = {
|
||||
pattern: Pattern
|
||||
result: AST
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Pattern =
|
||||
|
|
@ -91,43 +91,43 @@ export type Pattern =
|
|||
export type ListSpread = {
|
||||
kind: 'list-spread'
|
||||
spread: AST;
|
||||
line: number;
|
||||
column: number;
|
||||
start: number;
|
||||
line?: number;
|
||||
column?: number;
|
||||
start?: number;
|
||||
}
|
||||
|
||||
export type List = {
|
||||
kind: 'list'
|
||||
elements: (AST | ListSpread)[]
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Record = {
|
||||
kind: 'record'
|
||||
fields: { [key: string]: AST }
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type RecordAccess = {
|
||||
kind: 'record-access'
|
||||
record: AST
|
||||
field: string
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type RecordUpdate = {
|
||||
kind: 'record-update'
|
||||
record: AST
|
||||
updates: { [key: string]: AST }
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
// Top-level constructs
|
||||
|
|
@ -136,36 +136,36 @@ export type Definition = {
|
|||
kind: 'definition'
|
||||
name: string
|
||||
body: AST
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type TypeDef = {
|
||||
kind: 'typedef'
|
||||
name: string
|
||||
variants: Array<{ name: string, args: string[] }>
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Import = {
|
||||
kind: 'import'
|
||||
module: string
|
||||
items: string[] | 'all'
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type Rebind = {
|
||||
kind: 'rebind'
|
||||
target: AST
|
||||
value: AST
|
||||
line: number
|
||||
column: number
|
||||
start: number
|
||||
line?: number
|
||||
column?: number
|
||||
start?: number
|
||||
}
|
||||
|
||||
export type AST =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue