import { createMemo, createSignal } from 'solid-js'; import { sourceText } from 'source-region'; import type { CodePointSpan, SourceRegion, SourceText } from 'source-region'; import { parseDocument, programOf } from '../parser'; import type { ConcreteSyntaxResult, PartialConcreteSyntax } from '../parser'; import type { ParseError } from '../parse_errors'; import { spanLabel } from './format'; import { PaneHeader, PaneSplitter } from './Pane'; import { SourceGrid } from './SourceGrid'; import type { SourceGridAnnotation } from './SourceGrid'; import { StructureTree } from './SyntaxPane'; import type { HoverTarget } from './types'; 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 (