import { createMemo, createSignal } from 'solid-js'; import { sourceText } from 'source-region'; import type { CodePointSpan, SourceRegion, SourceText } from 'source-region'; import { parseDocument, programOf, } from '../../../languages/lisp'; import type { ConcreteSyntaxResult, ParseError, PartialConcreteSyntax, } from '../../../languages/lisp'; import { spanLabel } from '../../format'; import { hoverAnnotation } from '../../annotations'; import { PaneHeader, PaneSplitter } from '../../Pane'; import { SourceGrid } from '../../SourceGrid'; import type { HoverTarget } from '../../types'; import { clamp } from '../../utils'; import { StructureTree } from './StructurePane'; type ParsedDocument = { source: SourceText; region: SourceRegion; syntax: ConcreteSyntaxResult; program: PartialConcreteSyntax; errors: ParseError[]; }; const SAMPLE_INPUT = `(define square (_ x) (mul x x)) [add, 1, 2] (define pyth (_ x y) (+ (square x) (square y))) foo ) @@@ (bar 1) (nested [list, 123, abc_9, name-with-dash]) [a, b c, d] 123fasd`; export function App() { const [input, setInput] = createSignal(SAMPLE_INPUT); const [hovered, setHovered] = createSignal(); const [leftWidth, setLeftWidth] = createSignal(420); const [middleWidth, setMiddleWidth] = createSignal(420); const parsed = createMemo(() => { const source = sourceText(input()); const region = source.fullRegion(); const result = parseDocument(region); return { source, region, syntax: result.syntax, program: programOf(result.syntax), errors: result.errors }; }); return (