Skip to content

Instantly share code, notes, and snippets.

@Eyas
Eyas / toc.tsx
Last active July 5, 2023 17:53
Table of Contents in React
import classNames from "classnames";
import React, { useEffect, useRef, useState } from "react";
import { UnfoldMore, UnfoldLess, Dismiss, Restore } from "./toc-buttons.js";
enum State {
Normal,
Expanded,
Collapsed,
}
expect(expression).toBeInstanceOf(FunctionCallAST);
const fn = expression as FunctionCallAST;
expect(fn.Parameters).toHaveLength(1);
expect(fn.Parameters[0]).toBeInstanceOf(BinaryExpressionAST);
const param = fn.Parameters[0] as BinaryExpressionAST;
// ... same for param.LHS and .RHS, etc.
test("Parse_ParameterListSimple", () => {
const { expression } = ParseEntireExpression(Tokens("F(a+b)"));
expect(expression).toBeInstanceOf(FunctionCallAST);
expect(expression.Parameters).toHaveLength(1);
expect(expression.Parameters[0]).toBeInstanceOf(BinaryExpressionAST);
expect(expression.Parameters[0].Type).toBe(TokenType.Plus);
expect(expression.Parameters[0].LHS).toBeInstanceOf(VariableAST);
expect(expression.Parameters[0].LHS.VariableName).toBe("b");
expect(expression.Parameters[0].RHS).toBeInstanceOf(VariableAST);
expect(expression.Parameters[0].RHS.VariableName).toBe("a");
test("Parse_ParameterListSimple", () => {
expect(
AST.FormatTree(
ParseEntireExpression(Tokens("F(a+b)")),
/*includePositions=*/ false
)
).toMatchInlineSnapshot(`
"FunctionCallAST
Parameters:
[0] BinaryExpressionAST
TEST(ConcertTest, ComputesPrice) {
EXPECT_THAT(
ForecastOutcome(PARSE_TEXT_PROTO(R"(
artist {
id: 2584
name: "Beyonce"
avg_price: 200
}
capacity: 500
)")),
ConcertProto ExpensiveConcert() {
ConcertProto concert;
ArtistProto* artist = concert.mutable_artist();
artist->set_id(kBeyonceId);
artist->set_name("Beyonce");
artist->set_avg_price(200);
concert.set_capacity(500);
return concert;
}
+import {ok} from 'assert';
+
+const assert: <T>(item: T|undefined) => asserts
+
function BuildClasses(topics: ReadonlyArray<TypedTopic>, classes: ClassMap) {
for (const topic of topics) {
if (!IsClass(topic)) continue;
function ForwardDeclareClasses(topics: ReadonlyArray<TypedTopic>): ClassMap {
// ...
// ...
for (const topic of topics) {
if (!IsClass(topic)) continue;
// ...
classes.set(
topic.Subject.toString(), new Class(topic.Subject, /* ... */));
}
- if (classes.size === 0) {
- throw new Error('Expected Class topics to exist.');
- }
// Top-level module:
const wellKnownTypes = [ ... ]; // Top-level var with more than one "Type".
const dataType = ...;
function ForwardDeclareClasses(topics: ReadonlyArray<TypedTopic>): ClassMap {
const classes = new Map<string, Class>();
for (const wk of wellKnownTypes) {
classes.set(wk.subject.toString(), wk);
}
classes.set(dataType.subject.toString(), wk);