From 2129c26fe50a2dbeac121e49d6d4568b678ac6b7 Mon Sep 17 00:00:00 2001 From: Yura Dupyn <2153100+omedusyo@users.noreply.github.com> Date: Sat, 25 Apr 2026 15:36:52 +0200 Subject: [PATCH] Moving stuff around --- src/parser.experiments.ts | 2 +- src/parser.ts | 28 +++++++++++++++++++++++++--- src/syntax.ts | 24 ------------------------ src/ui/App.tsx | 5 ++--- src/ui/SyntaxPane.tsx | 2 +- 5 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/parser.experiments.ts b/src/parser.experiments.ts index 6d3922e..c440f84 100644 --- a/src/parser.experiments.ts +++ b/src/parser.experiments.ts @@ -1,7 +1,7 @@ import { CodePointString, sourceText } from 'source-region'; import { parseDocument } from './parser'; import { matchCodePointString } from './recognizers'; -import { Program, programOf } from './syntax'; +import { Program } from './syntax'; // === Experiments === diff --git a/src/parser.ts b/src/parser.ts index bb0ada3..ea33ed8 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -16,7 +16,6 @@ import type { FoundSyntax, ParseError } from './parse_errors'; import { consumeWhile, consumeWhile1, skipWhile } from './recognizers'; import { ConcreteError, - ConcreteSyntaxResult, DelimiterToken, Expr, ListItem, @@ -25,8 +24,6 @@ import { import type { ConcreteInfo, ListItem as ListItemType, - PartialConcreteSyntax, - ValidConcreteSyntax, Expr as ExprType, } from './syntax'; @@ -55,14 +52,39 @@ const COMMA = char(','); const DASH = char('-'); const UNDERSCORE = char('_'); + +export type ConcreteSyntaxResult = +| { tag: "valid", value: ValidConcreteSyntax } +| { tag: "invalid", value: PartialConcreteSyntax } + export type ParseDocumentResult = { syntax: ConcreteSyntaxResult; errors: ParseError[]; }; +// The main constraints are +// - `ValidConcreteSyntax` should be a subtype of `PartialConcreteSyntax` +// - if `PartialConcreteSyntax` doesn't contain any sort of error nodes, we should be able to coerce it to `ValidConcreteSyntax` without rebuilding the whole tree +export type ValidConcreteSyntax = Program +export type PartialConcreteSyntax = Program type PartialExpr = ExprType; type PartialListItem = ListItemType; +export namespace ConcreteSyntaxResult { + export function valid(value: ValidConcreteSyntax): ConcreteSyntaxResult { + return { tag: "valid", value }; + } + + export function invalid(value: PartialConcreteSyntax): ConcreteSyntaxResult { + return { tag: "invalid", value }; + } +} + +export function programOf(result: ConcreteSyntaxResult): PartialConcreteSyntax { + return result.value; +} + + export function parseDocument(region: SourceRegion): ParseDocumentResult { return new Parser(region).parseDocument(); } diff --git a/src/syntax.ts b/src/syntax.ts index 03806e3..d377730 100644 --- a/src/syntax.ts +++ b/src/syntax.ts @@ -3,16 +3,6 @@ import type { ParseError } from './parse_errors'; export type ConcreteInfo = { span: CodePointSpan }; -export type ConcreteSyntaxResult = -| { tag: "valid", value: ValidConcreteSyntax } -| { tag: "invalid", value: PartialConcreteSyntax } - -// The main constraints are -// - `ValidConcreteSyntax` should be a subtype of `PartialConcreteSyntax` -// - if `PartialConcreteSyntax` doesn't contain any sort of error nodes, we should be able to coerce it to `ValidConcreteSyntax` without rebuilding the whole tree -export type ValidConcreteSyntax = Program -export type PartialConcreteSyntax = Program - export type ConcreteError = ConcreteErrorNode[] // Convention: can't be empty. export type ConcreteErrorNode = { span: CodePointSpan, @@ -78,16 +68,6 @@ export type Literal = export type Identifier = string -export namespace ConcreteSyntaxResult { - export function valid(value: ValidConcreteSyntax): ConcreteSyntaxResult { - return { tag: "valid", value }; - } - - export function invalid(value: PartialConcreteSyntax): ConcreteSyntaxResult { - return { tag: "invalid", value }; - } -} - export namespace Program { export function make( expressions: Expr[], @@ -170,7 +150,3 @@ export namespace ListItem { return Expr.show(item); } } - -export function programOf(result: ConcreteSyntaxResult): PartialConcreteSyntax { - return result.value; -} diff --git a/src/ui/App.tsx b/src/ui/App.tsx index 5483dc1..611f605 100644 --- a/src/ui/App.tsx +++ b/src/ui/App.tsx @@ -1,10 +1,9 @@ import { createMemo, createSignal } from 'solid-js'; import { sourceText } from 'source-region'; import type { CodePointSpan, SourceRegion, SourceText } from 'source-region'; -import { parseDocument } from '../parser'; +import { parseDocument, programOf } from '../parser'; +import type { ConcreteSyntaxResult, PartialConcreteSyntax } from '../parser'; import type { ParseError } from '../parse_errors'; -import { programOf } from '../syntax'; -import type { ConcreteSyntaxResult, PartialConcreteSyntax } from '../syntax'; import { spanLabel } from './format'; import { PaneHeader, PaneSplitter } from './Pane'; import { SourceGrid } from './SourceGrid'; diff --git a/src/ui/SyntaxPane.tsx b/src/ui/SyntaxPane.tsx index 79faeab..503257d 100644 --- a/src/ui/SyntaxPane.tsx +++ b/src/ui/SyntaxPane.tsx @@ -7,9 +7,9 @@ import type { ConcreteInfo, List, ListItem, - PartialConcreteSyntax, Expr as SyntaxExpr, } from '../syntax'; +import type { PartialConcreteSyntax } from '../parser'; import { Expr } from '../syntax'; import { errorDetail, errorTitle, spanLabel } from './format'; import type { HoverTarget } from './types';