move ast types into seperate ts file (#169)
This commit is contained in:
		@ -1,9 +1,6 @@
 | 
			
		||||
import { useEffect, useState, useRef } from 'react'
 | 
			
		||||
import {
 | 
			
		||||
  abstractSyntaxTree,
 | 
			
		||||
  BinaryPart,
 | 
			
		||||
  Value,
 | 
			
		||||
} from '../lang/abstractSyntaxTree'
 | 
			
		||||
import { abstractSyntaxTree } from '../lang/abstractSyntaxTree'
 | 
			
		||||
import { BinaryPart, Value } from '../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import { executor } from '../lang/executor'
 | 
			
		||||
import {
 | 
			
		||||
  createIdentifier,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { Dialog, Transition } from '@headlessui/react'
 | 
			
		||||
import { Fragment, useState } from 'react'
 | 
			
		||||
import { Value } from '../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  AvailableVars,
 | 
			
		||||
  addToInputHelper,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { Dialog, Transition } from '@headlessui/react'
 | 
			
		||||
import { Fragment, useState } from 'react'
 | 
			
		||||
import { Value } from '../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  AvailableVars,
 | 
			
		||||
  addToInputHelper,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { useState, useEffect } from 'react'
 | 
			
		||||
import { toolTips, useStore } from '../../useStore'
 | 
			
		||||
import { Value, VariableDeclarator } from '../../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value, VariableDeclarator } from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { useState, useEffect } from 'react'
 | 
			
		||||
import { toolTips, useStore } from '../../useStore'
 | 
			
		||||
import { Value, VariableDeclarator } from '../../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value, VariableDeclarator } from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { useState, useEffect } from 'react'
 | 
			
		||||
import { toolTips, useStore } from '../../useStore'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ import {
 | 
			
		||||
  BinaryPart,
 | 
			
		||||
  Value,
 | 
			
		||||
  VariableDeclarator,
 | 
			
		||||
} from '../../lang/abstractSyntaxTree'
 | 
			
		||||
} from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
import { useState, useEffect } from 'react'
 | 
			
		||||
import { toolTips, useStore } from '../../useStore'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { useState, useEffect } from 'react'
 | 
			
		||||
import { create } from 'react-modal-promise'
 | 
			
		||||
import { toolTips, useStore } from '../../useStore'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ import {
 | 
			
		||||
  BinaryPart,
 | 
			
		||||
  Value,
 | 
			
		||||
  VariableDeclarator,
 | 
			
		||||
} from '../../lang/abstractSyntaxTree'
 | 
			
		||||
} from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@ import {
 | 
			
		||||
  BinaryPart,
 | 
			
		||||
  Value,
 | 
			
		||||
  VariableDeclarator,
 | 
			
		||||
} from '../../lang/abstractSyntaxTree'
 | 
			
		||||
} from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,7 @@
 | 
			
		||||
import { useState, useEffect } from 'react'
 | 
			
		||||
import { create } from 'react-modal-promise'
 | 
			
		||||
import { toolTips, useStore } from '../../useStore'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodePathFromSourceRange,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -1,107 +1,31 @@
 | 
			
		||||
import { Token } from './tokeniser'
 | 
			
		||||
import { parseExpression } from './astMathExpressions'
 | 
			
		||||
 | 
			
		||||
export type SyntaxType =
 | 
			
		||||
  | 'Program'
 | 
			
		||||
  | 'ExpressionStatement'
 | 
			
		||||
  | 'BinaryExpression'
 | 
			
		||||
  | 'CallExpression'
 | 
			
		||||
  | 'Identifier'
 | 
			
		||||
  | 'BlockStatement'
 | 
			
		||||
  | 'ReturnStatement'
 | 
			
		||||
  | 'VariableDeclaration'
 | 
			
		||||
  | 'VariableDeclarator'
 | 
			
		||||
  | 'MemberExpression'
 | 
			
		||||
  | 'ArrayExpression'
 | 
			
		||||
  | 'ObjectExpression'
 | 
			
		||||
  | 'ObjectProperty'
 | 
			
		||||
  | 'FunctionExpression'
 | 
			
		||||
  | 'PipeExpression'
 | 
			
		||||
  | 'PipeSubstitution'
 | 
			
		||||
  | 'Literal'
 | 
			
		||||
  | 'NoneCodeNode'
 | 
			
		||||
  | 'UnaryExpression'
 | 
			
		||||
// | 'NumberLiteral'
 | 
			
		||||
// | 'StringLiteral'
 | 
			
		||||
// | 'IfStatement'
 | 
			
		||||
// | 'WhileStatement'
 | 
			
		||||
// | 'FunctionDeclaration'
 | 
			
		||||
// | 'AssignmentExpression'
 | 
			
		||||
// | 'Property'
 | 
			
		||||
// | 'LogicalExpression'
 | 
			
		||||
// | 'ConditionalExpression'
 | 
			
		||||
// | 'ForStatement'
 | 
			
		||||
// | 'ForInStatement'
 | 
			
		||||
// | 'ForOfStatement'
 | 
			
		||||
// | 'BreakStatement'
 | 
			
		||||
// | 'ContinueStatement'
 | 
			
		||||
// | 'SwitchStatement'
 | 
			
		||||
// | 'SwitchCase'
 | 
			
		||||
// | 'ThrowStatement'
 | 
			
		||||
// | 'TryStatement'
 | 
			
		||||
// | 'CatchClause'
 | 
			
		||||
// | 'ClassDeclaration'
 | 
			
		||||
// | 'ClassBody'
 | 
			
		||||
// | 'MethodDefinition'
 | 
			
		||||
// | 'NewExpression'
 | 
			
		||||
// | 'ThisExpression'
 | 
			
		||||
// | 'UpdateExpression'
 | 
			
		||||
// | 'YieldExpression'
 | 
			
		||||
// | 'AwaitExpression'
 | 
			
		||||
// | 'ImportDeclaration'
 | 
			
		||||
// | 'ImportSpecifier'
 | 
			
		||||
// | 'ImportDefaultSpecifier'
 | 
			
		||||
// | 'ImportNamespaceSpecifier'
 | 
			
		||||
// | 'ExportNamedDeclaration'
 | 
			
		||||
// | 'ExportDefaultDeclaration'
 | 
			
		||||
// | 'ExportAllDeclaration'
 | 
			
		||||
// | 'ExportSpecifier'
 | 
			
		||||
// | 'TaggedTemplateExpression'
 | 
			
		||||
// | 'TemplateLiteral'
 | 
			
		||||
// | 'TemplateElement'
 | 
			
		||||
// | 'SpreadElement'
 | 
			
		||||
// | 'RestElement'
 | 
			
		||||
// | 'SequenceExpression'
 | 
			
		||||
// | 'DebuggerStatement'
 | 
			
		||||
// | 'LabeledStatement'
 | 
			
		||||
// | 'DoWhileStatement'
 | 
			
		||||
// | 'WithStatement'
 | 
			
		||||
// | 'EmptyStatement'
 | 
			
		||||
// | 'ArrayPattern'
 | 
			
		||||
// | 'ObjectPattern'
 | 
			
		||||
// | 'AssignmentPattern'
 | 
			
		||||
// | 'MetaProperty'
 | 
			
		||||
// | 'Super'
 | 
			
		||||
// | 'Import'
 | 
			
		||||
// | 'RegExpLiteral'
 | 
			
		||||
// | 'BooleanLiteral'
 | 
			
		||||
// | 'NullLiteral'
 | 
			
		||||
// | 'TypeAnnotation'
 | 
			
		||||
 | 
			
		||||
export interface Program {
 | 
			
		||||
  type: SyntaxType
 | 
			
		||||
  start: number
 | 
			
		||||
  end: number
 | 
			
		||||
  body: BodyItem[]
 | 
			
		||||
  nonCodeMeta: NoneCodeMeta
 | 
			
		||||
}
 | 
			
		||||
interface GeneralStatement {
 | 
			
		||||
  type: SyntaxType
 | 
			
		||||
  start: number
 | 
			
		||||
  end: number
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface NoneCodeNode extends GeneralStatement {
 | 
			
		||||
  type: 'NoneCodeNode'
 | 
			
		||||
  value: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface NoneCodeMeta {
 | 
			
		||||
  // Stores the whitespace/comments that go after the statement who's index we're using here
 | 
			
		||||
  [statementIndex: number]: NoneCodeNode
 | 
			
		||||
  // Which is why we also need `start` for and whitespace at the start of the file/block
 | 
			
		||||
  start?: NoneCodeNode
 | 
			
		||||
}
 | 
			
		||||
import {
 | 
			
		||||
  BinaryPart,
 | 
			
		||||
  BodyItem,
 | 
			
		||||
  Identifier,
 | 
			
		||||
  Literal,
 | 
			
		||||
  NoneCodeMeta,
 | 
			
		||||
  NoneCodeNode,
 | 
			
		||||
  ObjectKeyInfo,
 | 
			
		||||
  ObjectProperty,
 | 
			
		||||
  PipeSubstitution,
 | 
			
		||||
  Program,
 | 
			
		||||
  Value,
 | 
			
		||||
  VariableDeclaration,
 | 
			
		||||
  VariableDeclarator,
 | 
			
		||||
  ArrayExpression,
 | 
			
		||||
  BinaryExpression,
 | 
			
		||||
  CallExpression,
 | 
			
		||||
  FunctionExpression,
 | 
			
		||||
  MemberExpression,
 | 
			
		||||
  ObjectExpression,
 | 
			
		||||
  PipeExpression,
 | 
			
		||||
  UnaryExpression,
 | 
			
		||||
  BlockStatement,
 | 
			
		||||
  ExpressionStatement,
 | 
			
		||||
  ReturnStatement,
 | 
			
		||||
} from './abstractSyntaxTreeTypes'
 | 
			
		||||
 | 
			
		||||
function makeNoneCodeNode(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
@ -129,11 +53,6 @@ function findEndOfNonCodeNode(tokens: Token[], index: number): number {
 | 
			
		||||
  return index
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ExpressionStatement extends GeneralStatement {
 | 
			
		||||
  type: 'ExpressionStatement'
 | 
			
		||||
  expression: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeExpressionStatement(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -165,13 +84,6 @@ function makeExpressionStatement(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface CallExpression extends GeneralStatement {
 | 
			
		||||
  type: 'CallExpression'
 | 
			
		||||
  callee: Identifier
 | 
			
		||||
  arguments: Value[]
 | 
			
		||||
  optional: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function makeCallExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -373,12 +285,6 @@ function makeArguments(
 | 
			
		||||
  throw new Error('Expected a previous Argument if statement to match')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface VariableDeclaration extends GeneralStatement {
 | 
			
		||||
  type: 'VariableDeclaration'
 | 
			
		||||
  declarations: VariableDeclarator[]
 | 
			
		||||
  kind: 'const' | 'unknown' | 'fn' //| "solid" | "surface" | "face"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeVariableDeclaration(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -407,19 +313,6 @@ function makeVariableDeclaration(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type Value =
 | 
			
		||||
  | Literal
 | 
			
		||||
  | Identifier
 | 
			
		||||
  | BinaryExpression
 | 
			
		||||
  | FunctionExpression
 | 
			
		||||
  | CallExpression
 | 
			
		||||
  | PipeExpression
 | 
			
		||||
  | PipeSubstitution
 | 
			
		||||
  | ArrayExpression
 | 
			
		||||
  | ObjectExpression
 | 
			
		||||
  | MemberExpression
 | 
			
		||||
  | UnaryExpression
 | 
			
		||||
 | 
			
		||||
function makeValue(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -523,12 +416,6 @@ function makeValue(
 | 
			
		||||
  throw new Error('Expected a previous Value if statement to match')
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface VariableDeclarator extends GeneralStatement {
 | 
			
		||||
  type: 'VariableDeclarator'
 | 
			
		||||
  id: Identifier
 | 
			
		||||
  init: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeVariableDeclarators(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number,
 | 
			
		||||
@ -576,29 +463,6 @@ function makeVariableDeclarators(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type BinaryPart =
 | 
			
		||||
  | Literal
 | 
			
		||||
  | Identifier
 | 
			
		||||
  | BinaryExpression
 | 
			
		||||
  | CallExpression
 | 
			
		||||
  | UnaryExpression
 | 
			
		||||
// | MemberExpression
 | 
			
		||||
// | ArrayExpression
 | 
			
		||||
// | ObjectExpression
 | 
			
		||||
// | LogicalExpression
 | 
			
		||||
// | ConditionalExpression
 | 
			
		||||
 | 
			
		||||
export interface Literal extends GeneralStatement {
 | 
			
		||||
  type: 'Literal'
 | 
			
		||||
  value: string | number | boolean | null
 | 
			
		||||
  raw: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface Identifier extends GeneralStatement {
 | 
			
		||||
  type: 'Identifier'
 | 
			
		||||
  name: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeIdentifier(token: Token[], index: number): Identifier {
 | 
			
		||||
  const currentToken = token[index]
 | 
			
		||||
  return {
 | 
			
		||||
@ -609,10 +473,6 @@ function makeIdentifier(token: Token[], index: number): Identifier {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface PipeSubstitution extends GeneralStatement {
 | 
			
		||||
  type: 'PipeSubstitution'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeLiteral(tokens: Token[], index: number): Literal {
 | 
			
		||||
  const token = tokens[index]
 | 
			
		||||
  const value =
 | 
			
		||||
@ -626,11 +486,6 @@ function makeLiteral(tokens: Token[], index: number): Literal {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ArrayExpression extends GeneralStatement {
 | 
			
		||||
  type: 'ArrayExpression'
 | 
			
		||||
  elements: Value[]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeArrayElements(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number,
 | 
			
		||||
@ -686,17 +541,6 @@ function makeArrayExpression(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ObjectExpression extends GeneralStatement {
 | 
			
		||||
  type: 'ObjectExpression'
 | 
			
		||||
  properties: ObjectProperty[]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface ObjectProperty extends GeneralStatement {
 | 
			
		||||
  type: 'ObjectProperty'
 | 
			
		||||
  key: Identifier
 | 
			
		||||
  value: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeObjectExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -765,13 +609,6 @@ function makeObjectProperties(
 | 
			
		||||
  ])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface MemberExpression extends GeneralStatement {
 | 
			
		||||
  type: 'MemberExpression'
 | 
			
		||||
  object: MemberExpression | Identifier
 | 
			
		||||
  property: Identifier | Literal
 | 
			
		||||
  computed: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeMemberExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -808,12 +645,6 @@ function makeMemberExpression(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
interface ObjectKeyInfo {
 | 
			
		||||
  key: Identifier | Literal
 | 
			
		||||
  index: number
 | 
			
		||||
  computed: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function collectObjectKeys(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number,
 | 
			
		||||
@ -859,13 +690,6 @@ function collectObjectKeys(
 | 
			
		||||
  ])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface BinaryExpression extends GeneralStatement {
 | 
			
		||||
  type: 'BinaryExpression'
 | 
			
		||||
  operator: string
 | 
			
		||||
  left: BinaryPart
 | 
			
		||||
  right: BinaryPart
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function findEndOfBinaryExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -922,12 +746,6 @@ function makeBinaryExpression(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface UnaryExpression extends GeneralStatement {
 | 
			
		||||
  type: 'UnaryExpression'
 | 
			
		||||
  operator: '-' | '!'
 | 
			
		||||
  argument: BinaryPart
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeUnaryExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -950,12 +768,6 @@ function makeUnaryExpression(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface PipeExpression extends GeneralStatement {
 | 
			
		||||
  type: 'PipeExpression'
 | 
			
		||||
  body: Value[]
 | 
			
		||||
  nonCodeMeta: NoneCodeMeta
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makePipeExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -1017,13 +829,6 @@ function makePipeBody(
 | 
			
		||||
  )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface FunctionExpression extends GeneralStatement {
 | 
			
		||||
  type: 'FunctionExpression'
 | 
			
		||||
  id: Identifier | null
 | 
			
		||||
  params: Identifier[]
 | 
			
		||||
  body: BlockStatement
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeFunctionExpression(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -1072,12 +877,6 @@ function makeParams(
 | 
			
		||||
  ])
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface BlockStatement extends GeneralStatement {
 | 
			
		||||
  type: 'BlockStatement'
 | 
			
		||||
  body: BodyItem[]
 | 
			
		||||
  nonCodeMeta: NoneCodeMeta
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeBlockStatement(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -1100,11 +899,6 @@ function makeBlockStatement(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ReturnStatement extends GeneralStatement {
 | 
			
		||||
  type: 'ReturnStatement'
 | 
			
		||||
  argument: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function makeReturnStatement(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number
 | 
			
		||||
@ -1123,8 +917,6 @@ function makeReturnStatement(
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type All = Program | ExpressionStatement[] | BinaryExpression | Literal
 | 
			
		||||
 | 
			
		||||
function nextMeaningfulToken(
 | 
			
		||||
  tokens: Token[],
 | 
			
		||||
  index: number,
 | 
			
		||||
@ -1163,8 +955,6 @@ function previousMeaningfulToken(
 | 
			
		||||
  return { token, index: newIndex }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type BodyItem = ExpressionStatement | VariableDeclaration | ReturnStatement
 | 
			
		||||
 | 
			
		||||
function makeBody(
 | 
			
		||||
  {
 | 
			
		||||
    tokens,
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										177
									
								
								src/lang/abstractSyntaxTreeTypes.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										177
									
								
								src/lang/abstractSyntaxTreeTypes.ts
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,177 @@
 | 
			
		||||
export type SyntaxType =
 | 
			
		||||
  | 'Program'
 | 
			
		||||
  | 'ExpressionStatement'
 | 
			
		||||
  | 'BinaryExpression'
 | 
			
		||||
  | 'CallExpression'
 | 
			
		||||
  | 'Identifier'
 | 
			
		||||
  | 'BlockStatement'
 | 
			
		||||
  | 'ReturnStatement'
 | 
			
		||||
  | 'VariableDeclaration'
 | 
			
		||||
  | 'VariableDeclarator'
 | 
			
		||||
  | 'MemberExpression'
 | 
			
		||||
  | 'ArrayExpression'
 | 
			
		||||
  | 'ObjectExpression'
 | 
			
		||||
  | 'ObjectProperty'
 | 
			
		||||
  | 'FunctionExpression'
 | 
			
		||||
  | 'PipeExpression'
 | 
			
		||||
  | 'PipeSubstitution'
 | 
			
		||||
  | 'Literal'
 | 
			
		||||
  | 'NoneCodeNode'
 | 
			
		||||
  | 'UnaryExpression'
 | 
			
		||||
 | 
			
		||||
export interface Program {
 | 
			
		||||
  type: SyntaxType
 | 
			
		||||
  start: number
 | 
			
		||||
  end: number
 | 
			
		||||
  body: BodyItem[]
 | 
			
		||||
  nonCodeMeta: NoneCodeMeta
 | 
			
		||||
}
 | 
			
		||||
interface GeneralStatement {
 | 
			
		||||
  type: SyntaxType
 | 
			
		||||
  start: number
 | 
			
		||||
  end: number
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type BodyItem =
 | 
			
		||||
  | ExpressionStatement
 | 
			
		||||
  | VariableDeclaration
 | 
			
		||||
  | ReturnStatement
 | 
			
		||||
 | 
			
		||||
export type Value =
 | 
			
		||||
  | Literal
 | 
			
		||||
  | Identifier
 | 
			
		||||
  | BinaryExpression
 | 
			
		||||
  | FunctionExpression
 | 
			
		||||
  | CallExpression
 | 
			
		||||
  | PipeExpression
 | 
			
		||||
  | PipeSubstitution
 | 
			
		||||
  | ArrayExpression
 | 
			
		||||
  | ObjectExpression
 | 
			
		||||
  | MemberExpression
 | 
			
		||||
  | UnaryExpression
 | 
			
		||||
 | 
			
		||||
export type BinaryPart =
 | 
			
		||||
  | Literal
 | 
			
		||||
  | Identifier
 | 
			
		||||
  | BinaryExpression
 | 
			
		||||
  | CallExpression
 | 
			
		||||
  | UnaryExpression
 | 
			
		||||
 | 
			
		||||
export interface NoneCodeNode extends GeneralStatement {
 | 
			
		||||
  type: 'NoneCodeNode'
 | 
			
		||||
  value: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface NoneCodeMeta {
 | 
			
		||||
  // Stores the whitespace/comments that go after the statement who's index we're using here
 | 
			
		||||
  [statementIndex: number]: NoneCodeNode
 | 
			
		||||
  // Which is why we also need `start` for and whitespace at the start of the file/block
 | 
			
		||||
  start?: NoneCodeNode
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ExpressionStatement extends GeneralStatement {
 | 
			
		||||
  type: 'ExpressionStatement'
 | 
			
		||||
  expression: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface CallExpression extends GeneralStatement {
 | 
			
		||||
  type: 'CallExpression'
 | 
			
		||||
  callee: Identifier
 | 
			
		||||
  arguments: Value[]
 | 
			
		||||
  optional: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface VariableDeclaration extends GeneralStatement {
 | 
			
		||||
  type: 'VariableDeclaration'
 | 
			
		||||
  declarations: VariableDeclarator[]
 | 
			
		||||
  kind: 'const' | 'unknown' | 'fn' //| "solid" | "surface" | "face"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface VariableDeclarator extends GeneralStatement {
 | 
			
		||||
  type: 'VariableDeclarator'
 | 
			
		||||
  id: Identifier
 | 
			
		||||
  init: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface Literal extends GeneralStatement {
 | 
			
		||||
  type: 'Literal'
 | 
			
		||||
  value: string | number | boolean | null
 | 
			
		||||
  raw: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface Identifier extends GeneralStatement {
 | 
			
		||||
  type: 'Identifier'
 | 
			
		||||
  name: string
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface PipeSubstitution extends GeneralStatement {
 | 
			
		||||
  type: 'PipeSubstitution'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ArrayExpression extends GeneralStatement {
 | 
			
		||||
  type: 'ArrayExpression'
 | 
			
		||||
  elements: Value[]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ObjectExpression extends GeneralStatement {
 | 
			
		||||
  type: 'ObjectExpression'
 | 
			
		||||
  properties: ObjectProperty[]
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ObjectProperty extends GeneralStatement {
 | 
			
		||||
  type: 'ObjectProperty'
 | 
			
		||||
  key: Identifier
 | 
			
		||||
  value: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface MemberExpression extends GeneralStatement {
 | 
			
		||||
  type: 'MemberExpression'
 | 
			
		||||
  object: MemberExpression | Identifier
 | 
			
		||||
  property: Identifier | Literal
 | 
			
		||||
  computed: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ObjectKeyInfo {
 | 
			
		||||
  key: Identifier | Literal
 | 
			
		||||
  index: number
 | 
			
		||||
  computed: boolean
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface BinaryExpression extends GeneralStatement {
 | 
			
		||||
  type: 'BinaryExpression'
 | 
			
		||||
  operator: string
 | 
			
		||||
  left: BinaryPart
 | 
			
		||||
  right: BinaryPart
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface UnaryExpression extends GeneralStatement {
 | 
			
		||||
  type: 'UnaryExpression'
 | 
			
		||||
  operator: '-' | '!'
 | 
			
		||||
  argument: BinaryPart
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface PipeExpression extends GeneralStatement {
 | 
			
		||||
  type: 'PipeExpression'
 | 
			
		||||
  body: Value[]
 | 
			
		||||
  nonCodeMeta: NoneCodeMeta
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface FunctionExpression extends GeneralStatement {
 | 
			
		||||
  type: 'FunctionExpression'
 | 
			
		||||
  id: Identifier | null
 | 
			
		||||
  params: Identifier[]
 | 
			
		||||
  body: BlockStatement
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface BlockStatement extends GeneralStatement {
 | 
			
		||||
  type: 'BlockStatement'
 | 
			
		||||
  body: BodyItem[]
 | 
			
		||||
  nonCodeMeta: NoneCodeMeta
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export interface ReturnStatement extends GeneralStatement {
 | 
			
		||||
  type: 'ReturnStatement'
 | 
			
		||||
  argument: Value
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export type All = Program | ExpressionStatement[] | BinaryExpression | Literal
 | 
			
		||||
@ -3,6 +3,8 @@ import {
 | 
			
		||||
  Literal,
 | 
			
		||||
  Identifier,
 | 
			
		||||
  CallExpression,
 | 
			
		||||
} from './abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  findClosingBrace,
 | 
			
		||||
  makeCallExpression,
 | 
			
		||||
  isNotCodeToken,
 | 
			
		||||
 | 
			
		||||
@ -9,7 +9,7 @@ import {
 | 
			
		||||
  CallExpression,
 | 
			
		||||
  ArrayExpression,
 | 
			
		||||
  UnaryExpression,
 | 
			
		||||
} from './abstractSyntaxTree'
 | 
			
		||||
} from './abstractSyntaxTreeTypes'
 | 
			
		||||
import { InternalFnNames } from './std/stdTypes'
 | 
			
		||||
import { internalFns } from './std/std'
 | 
			
		||||
import {
 | 
			
		||||
 | 
			
		||||
@ -14,7 +14,7 @@ import {
 | 
			
		||||
  ObjectExpression,
 | 
			
		||||
  UnaryExpression,
 | 
			
		||||
  BinaryExpression,
 | 
			
		||||
} from './abstractSyntaxTree'
 | 
			
		||||
} from './abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  findAllPreviousVariables,
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
 | 
			
		||||
@ -10,7 +10,7 @@ import {
 | 
			
		||||
  VariableDeclaration,
 | 
			
		||||
  ReturnStatement,
 | 
			
		||||
  ArrayExpression,
 | 
			
		||||
} from './abstractSyntaxTree'
 | 
			
		||||
} from './abstractSyntaxTreeTypes'
 | 
			
		||||
import { createIdentifier, splitPathAtLastIndex } from './modifyAst'
 | 
			
		||||
import { getSketchSegmentFromSourceRange } from './std/sketchConstraints'
 | 
			
		||||
import { getAngle } from '../lib/utils'
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,6 @@
 | 
			
		||||
import { recast } from './recast'
 | 
			
		||||
import { Program, abstractSyntaxTree } from './abstractSyntaxTree'
 | 
			
		||||
import { abstractSyntaxTree } from './abstractSyntaxTree'
 | 
			
		||||
import { Program } from './abstractSyntaxTreeTypes'
 | 
			
		||||
import { lexer, Token } from './tokeniser'
 | 
			
		||||
import fs from 'node:fs'
 | 
			
		||||
import { initPromise } from './rust'
 | 
			
		||||
 | 
			
		||||
@ -11,7 +11,7 @@ import {
 | 
			
		||||
  MemberExpression,
 | 
			
		||||
  PipeExpression,
 | 
			
		||||
  UnaryExpression,
 | 
			
		||||
} from './abstractSyntaxTree'
 | 
			
		||||
} from './abstractSyntaxTreeTypes'
 | 
			
		||||
import { precedence } from './astMathExpressions'
 | 
			
		||||
 | 
			
		||||
export function recast(
 | 
			
		||||
 | 
			
		||||
@ -13,7 +13,7 @@ import {
 | 
			
		||||
  Value,
 | 
			
		||||
  Literal,
 | 
			
		||||
  VariableDeclaration,
 | 
			
		||||
} from '../abstractSyntaxTree'
 | 
			
		||||
} from '../abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
  getNodeFromPathCurry,
 | 
			
		||||
 | 
			
		||||
@ -4,7 +4,7 @@ import {
 | 
			
		||||
  Program,
 | 
			
		||||
  VariableDeclarator,
 | 
			
		||||
  CallExpression,
 | 
			
		||||
} from '../abstractSyntaxTree'
 | 
			
		||||
} from '../abstractSyntaxTreeTypes'
 | 
			
		||||
import { SketchGroup, SourceRange } from '../executor'
 | 
			
		||||
import { InternalFn } from './stdTypes'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,5 @@
 | 
			
		||||
import { abstractSyntaxTree, Value } from '../abstractSyntaxTree'
 | 
			
		||||
import { abstractSyntaxTree } from '../abstractSyntaxTree'
 | 
			
		||||
import { Value } from '../abstractSyntaxTreeTypes'
 | 
			
		||||
import { lexer } from '../tokeniser'
 | 
			
		||||
import {
 | 
			
		||||
  getConstraintType,
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ import {
 | 
			
		||||
  Value,
 | 
			
		||||
  BinaryPart,
 | 
			
		||||
  VariableDeclarator,
 | 
			
		||||
} from '../abstractSyntaxTree'
 | 
			
		||||
} from '../abstractSyntaxTreeTypes'
 | 
			
		||||
import {
 | 
			
		||||
  getNodeFromPath,
 | 
			
		||||
  getNodeFromPathCurry,
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
import { ProgramMemory, Path, SourceRange } from '../executor'
 | 
			
		||||
import { Program, Value } from '../abstractSyntaxTree'
 | 
			
		||||
import { Program, Value } from '../abstractSyntaxTreeTypes'
 | 
			
		||||
import { TooTip } from '../../useStore'
 | 
			
		||||
import { PathToNode } from '../executor'
 | 
			
		||||
import { EngineCommandManager } from './engineConnection'
 | 
			
		||||
 | 
			
		||||
@ -1,5 +1,5 @@
 | 
			
		||||
import { Selections, StoreState } from '../useStore'
 | 
			
		||||
import { Program } from './abstractSyntaxTree'
 | 
			
		||||
import { Program } from './abstractSyntaxTreeTypes'
 | 
			
		||||
import { PathToNode } from './executor'
 | 
			
		||||
import { getNodeFromPath } from './queryAst'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,4 +1,4 @@
 | 
			
		||||
import { Program } from '../lang/abstractSyntaxTree'
 | 
			
		||||
import { Program } from '../lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import { ProgramMemory, _executor } from '../lang/executor'
 | 
			
		||||
import { EngineCommandManager } from '../lang/std/engineConnection'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,8 @@
 | 
			
		||||
import create from 'zustand'
 | 
			
		||||
import { persist } from 'zustand/middleware'
 | 
			
		||||
import { addLineHighlight, EditorView } from './editor/highlightextension'
 | 
			
		||||
import { Program, abstractSyntaxTree } from './lang/abstractSyntaxTree'
 | 
			
		||||
import { abstractSyntaxTree } from './lang/abstractSyntaxTree'
 | 
			
		||||
import { Program } from './lang/abstractSyntaxTreeTypes'
 | 
			
		||||
import { getNodeFromPath } from './lang/queryAst'
 | 
			
		||||
import {
 | 
			
		||||
  ProgramMemory,
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user