MCPcopy Index your code
hub / github.com/Rich-Harris/code-red

github.com/Rich-Harris/code-red @v1.0.4

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.4 ↗ · + Follow
130 symbols 391 edges 117 files 8 documented · 6% 1 cross-repo links
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

code-red

Experimental toolkit for writing x-to-JavaScript compilers. It is used in Svelte.

API

The code-red package exposes three core functions — b, x and print.

b and x take a template literal and return an ESTree program body, or a single node:

import { b, x } from 'code-red';

const expression = x`i + j`;

assert.equal(expression.type, 'AssignmentExpression');
assert.equal(expression.operator, '+');
assert.equal(expression.left.name, 'i');
assert.equal(expression.right.name, 'j');

const body = b`
    const i = 1;
    const j = 2;
    const k = i + j;
`;

assert.equal(body.length, 3);
assert.equal(body[0].type, 'VariableDeclaration');

Expressions in template literals correspond to replacement nodes — so you could express the above like so:

const i = x`i`;
const j = x`j`;
const expression = x`${i} + ${j}`;

const body = b`
    const ${i} = 1;
    const ${j} = 2;
    const k = ${expression};
`;

The print function takes a node and turns it into a {code, map} object:

const add = x`
    function add(${i}, ${j}) {
        return ${expression};
    }
`;

print(add).code;
/*
function add(i, j) {
    return i + j;
}
*/

i.name = 'foo';
j.name = 'bar';

print(add).code;
/*
function add(foo, bar) {
    return foo + bar;
}
*/

Prefixes

@-prefixed names (replaceable globals)

So that you can use globals in your code. In Svelte, we use this to insert utility functions.

// input
import { x } from 'code-red';
x`@foo(bar)`

// output
FOO(bar)

#-prefixed names (automatically deconflicted names)

So that you can insert variables in your code without worrying if they clash with existing variable names.

bar used in user code and in inserted code gets a $1 suffix:

// input
import { x } from 'code-red';
x`
function foo(#bar) {
    return #bar * bar;
}`;

// output
function foo(bar$1) {
    return bar$1 * bar;
}

Without conflicts, no $1 suffix:

// input
import { b } from 'code-red';
b`const foo = #bar => #bar * 2`;

// output
const foo = bar => bar * 2;

Optimiser

TODO add an optimiser that e.g. collapses consecutive identical if blocks

Compiler

TODO add a code-red/compiler module that replaces template literals with the nodes they evaluate to, so that there's nothing to parse at runtime.

Sourcemaps

TODO support source mappings for inserted nodes with location information.

License

MIT

Core symbols most depended-on inside this repo

c
called by 212
src/print/handlers.js
handle
called by 108
src/print/handlers.js
push_array
called by 76
src/utils/push_array.js
b
called by 56
test/test.js
x
called by 50
test/test.js
join
called by 15
src/print/handlers.js
p
called by 8
test/test.js
get_length
called by 6
src/print/handlers.js

Shape

Function 118
Class 6
Method 6

Languages

TypeScript100%

Modules by API surface

src/print/handlers.js65 symbols
src/index.js13 symbols
test/test.js10 symbols
test/samples/class-private/expected.js8 symbols
test/samples/object-expressions/expected.js3 symbols
test/samples/method/expected.js3 symbols
src/utils/comments.js3 symbols
test/samples/yield/expected.js2 symbols
test/samples/function-declaration/expected.js2 symbols
test/samples/comment-within-parentheses/expected.js2 symbols
test/samples/class-static-block/expected.js2 symbols
test/samples/class-property/expected.js2 symbols

Used by 1 indexed graphs manifest dependencies, hub-wide

For agents

$ claude mcp add code-red \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact