Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
c5514d8
chore(store): move the extraction version to 23
sunerpy Oct 23, 2026
2a3dfde
fix(store): refuse an index a newer schema wrote
sunerpy Oct 23, 2026
e5a8695
test(mcp): give every engine test its own directory and remove it
sunerpy Oct 23, 2026
301a172
test(probes): std-typed Rust receivers stay unresolved
sunerpy Oct 23, 2026
98b7052
build(deps): bump the grammar crates held back from #334
sunerpy Oct 23, 2026
fc6b6d0
fix(store): uninit discards a current index beside its tombstone
sunerpy Oct 23, 2026
b80a14f
fix(store): report a newer schema before the uninit tombstone
sunerpy Oct 23, 2026
7160d9a
fix(store): offer uninit only where it would discard the index
sunerpy Oct 23, 2026
5cb5f32
fix(cli): status offers uninit for a newer schema only where it works
sunerpy Oct 23, 2026
fda96ed
test(cli): import the unix-only upgrade test types on unix only
sunerpy Oct 23, 2026
f699c78
feat(resolve): framework-edge infrastructure
sunerpy Oct 23, 2026
9ef9f69
feat(resolve): framework edges name their resolver
sunerpy Oct 23, 2026
9c84ead
fix(watch): any file that comes or goes re-reads the JS detection inputs
sunerpy Oct 23, 2026
80a5384
fix(react): hooks and contexts prefer own-file declarations and impor…
sunerpy Oct 23, 2026
86c3386
fix(nestjs): conventions stay in their feature; global prefix and ver…
sunerpy Oct 23, 2026
64b4f95
fix(vue): Nuxt routes only in Nuxt apps; a page route references its …
sunerpy Oct 23, 2026
e69a778
feat(explore): Flow section and branch guards
sunerpy Oct 23, 2026
608d5fd
fix(nestjs): a test's bootstrap configures only its own app
sunerpy Oct 24, 2026
ca35060
test(sync): framework edges keep their resolver's name under sync
sunerpy Oct 24, 2026
b1ee323
feat(resolve): Next.js file routes split from React
sunerpy Oct 24, 2026
6b74cae
feat(resolve): Expo Router
sunerpy Oct 24, 2026
d0b744f
fix(resolve): an import alias is the nearest tsconfig's
sunerpy Oct 31, 2026
85c4898
feat(resolve): React Router routes and navigation
sunerpy Oct 31, 2026
820c102
feat(resolve): React Router lazy loaders pick their page
sunerpy Nov 1, 2026
7046a9f
feat(resolve): route tables another file hands React Router
sunerpy Nov 1, 2026
5301bf3
feat(resolve): imported JSX tags render what their module exports
sunerpy Nov 1, 2026
655c1db
feat(resolve): TanStack Router routes and navigation
sunerpy Nov 1, 2026
dda60ca
feat(resolve): Vue Router routes and navigation
sunerpy Nov 1, 2026
69902a9
feat(resolve): Svelte resolver and SvelteKit routing
sunerpy Nov 1, 2026
5ad11e9
feat(resolve): Angular routes and the components they render
sunerpy Nov 2, 2026
112e048
feat(resolve): Angular navigation
sunerpy Nov 2, 2026
b3c03bc
test(resolve): cover the React Router pieces no test caught
sunerpy Nov 2, 2026
fec4fbb
docs: complete the regeneration log and name the rows left for later
sunerpy Nov 2, 2026
c7696e0
feat(resolve): synthesis stage with incremental refresh
sunerpy Nov 2, 2026
2a600ed
fix(resolve): walk synthesis inputs in upstream's order
sunerpy Nov 2, 2026
3cb90d9
feat(resolve): render, override and expect/actual synthesis
sunerpy Nov 2, 2026
f317880
fix(extract): read each type of a Java heritage list
sunerpy Nov 2, 2026
f1237a1
feat(resolve): interface dispatch synthesis
sunerpy Nov 2, 2026
c31a8f7
feat(resolve): object registry synthesis
sunerpy Nov 3, 2026
080ec64
feat(resolve): JSX render synthesis
sunerpy Nov 3, 2026
2b97b52
feat(bench): generate the Go standard-library method table
sunerpy Nov 3, 2026
6b5ffb6
feat(resolve): Go method owners and implicit implements
sunerpy Nov 3, 2026
2cb1b7d
perf(resolve): read the synthesis stage's file texts once, in parallel
sunerpy Nov 3, 2026
a3ae027
feat(resolve): gRPC stub and gin middleware synthesis
sunerpy Nov 3, 2026
180259f
feat(extract): every Go var and const spec is a node
sunerpy Nov 3, 2026
77c32d6
fix(watch): a go.mod change re-resolves the project's Go files
sunerpy Nov 3, 2026
2e419f9
feat(resolve): Go func-field synthesis
sunerpy Nov 4, 2026
062c7a0
feat(resolve): redux-thunk, Celery, Spring, MediatR, Sidekiq and Lara…
sunerpy Nov 4, 2026
6a3d2c2
feat(resolve): C and C++ function-pointer dispatch
sunerpy Nov 4, 2026
f9c795d
feat(resolve): C function-pointer tables in non-indexed includes
sunerpy Nov 4, 2026
ca3accf
fix(resolve): leave ambiguous redux-thunk and Sidekiq targets unlinked
sunerpy Nov 4, 2026
cd56729
feat(extract): Vue store collections and RTK Query endpoints and hooks
sunerpy Nov 5, 2026
701a06b
feat(resolve): RTK Query, Pinia and Vuex dispatch synthesis
sunerpy Nov 5, 2026
ddf97bc
feat(resolve): GoFrame routes and their controller methods
sunerpy Nov 5, 2026
9498108
feat(resolve): navigation-link synthesis
sunerpy Nov 5, 2026
22e415c
feat(resolve): SvelteKit page and loader synthesis
sunerpy Nov 6, 2026
a11026a
perf(store): keep unchanged synthesized edges when the stage replaces…
sunerpy Nov 6, 2026
7bb0ec3
feat(resolve): Vue template synthesis
sunerpy Nov 6, 2026
0d2e96a
feat(resolve): Angular template synthesis
sunerpy Nov 7, 2026
5b2b6d2
feat(explore): dynamic-dispatch links among the named symbols
sunerpy Nov 7, 2026
64b64cb
test(resolve): close the index before deleting the C fn-pointer test …
sunerpy Nov 7, 2026
97a9e19
docs: show double-brace code literally on the website
sunerpy Nov 7, 2026
6841a6d
test(cli): open the migrated index through a file URI Windows accepts
sunerpy Nov 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 23 additions & 19 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions crates/codegraph-bench/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ rusqlite = { workspace = true }
sha2 = { workspace = true }
codegraph-core = { path = "../codegraph-core" }
codegraph-extract = { path = "../codegraph-extract" }
codegraph-resolve = { path = "../codegraph-resolve" }
regex = "1.10"
tree-sitter = { workspace = true }

[target.'cfg(unix)'.dependencies]
libc = "0.2"
Expand Down
41 changes: 41 additions & 0 deletions crates/codegraph-bench/fixtures/go/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package payroll

import "errors"

// Errors a payroll run returns.
var (
// ErrNoRun is returned when no run is scheduled.
ErrNoRun = errors.New("no run")
ErrTooLate = newRunError("too late")
)

// Phases of a payroll run.
const (
PhaseDraft = iota
PhaseFinal
)

// Schedule runs a hook at the end of a run.
type Schedule struct {
Hook func() error
}

func newRunError(msg string) error { return errors.New(msg) }

func closeBooks() error { return nil }

var nightly = Schedule{Hook: closeBooks}

var defaultEmitter = &Emitter{Table: "payroll"}

var runAll = func() error {
_ = RunNightly("all")
return closeBooks()
}

func phaseOf(final bool) int {
if final {
return PhaseFinal
}
return PhaseDraft
}
13 changes: 13 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/c/src/cmds.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
#include "cmds.h"

static void getCommand(int argc) {}
static void setCommand(int argc) {}

static struct COMMAND_T commandTable[] = {
MAKE_CMD("get", getCommand),
MAKE_CMD("set", setCommand),
};

void call(struct client *c, int argc) {
c->cmd->proc(argc);
}
14 changes: 14 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/c/src/cmds.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
typedef void cmdProc(int argc);

struct command {
const char *name;
cmdProc *proc;
};

struct client {
int id;
struct command *cmd, *lastcmd;
};

#define MAKE_CMD(name, fn) { name, fn }
#define COMMAND_T command
10 changes: 10 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/c/src/opcodes.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
typedef void opcode_t(unsigned char op);

static void op_nop(unsigned char op) {}
static void op_inc(unsigned char op) {}

static opcode_t *opcodes[2] = { op_nop, op_inc };

void step(unsigned char op) {
opcodes[op](op);
}
18 changes: 18 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/c/src/optab.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
typedef int opRun(void);

struct op {
const char *name;
opRun *run;
};

#define MK(nm, fn) nm, fn
#define CMD_T op

static int optab_a(void) { return 0; }
static int optab_b(void) { return 0; }

#include "optab.def"

int dispatch_op(struct op *o) {
return o->run();
}
4 changes: 4 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/c/src/optab.def
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
static struct CMD_T optable[] = {
{ MK("a", optab_a) },
{ MK("b", optab_b) },
};
12 changes: 12 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/cpp/src/launch.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
void kernel_a(int n) {}

template <typename T>
void kernel_b(T n) {}

void launch(int n) {
auto kernel = &kernel_a;
if (n > 1) {
kernel = &kernel_b<int>;
}
kernel(n);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?php
namespace App\Http;

use App\Events\Registered;

class Registration
{
public function register(): void
{
event(new Registered());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?php
namespace App\Listeners;

use App\Events\Registered;

class SendWelcome
{
public function handle(Registered $event): void
{
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
class Signup
def call(user)
WelcomeWorker.perform_async(user.id)
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
class WelcomeWorker
include Sidekiq::Worker

def perform(user_id)
user_id
end
end
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
namespace App;

public class PlaceOrder : IRequest<int> { }

public class PlaceOrderHandler : IRequestHandler<PlaceOrder, int>
{
public Task<int> Handle(PlaceOrder request, CancellationToken ct) => Task.FromResult(1);
}

public class OrdersController
{
private readonly ISender _mediator;

public async Task Place()
{
await _mediator.Send(new PlaceOrder());
}
}
3 changes: 3 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module example.com/synthesis

require github.com/gogf/gf/v2 v2.7.0
30 changes: 30 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/go/ec2/ec2.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package ec2

import (
"context"

"example.com/synth/refresh"
)

type Discovery struct {
*refresh.Discovery
region string
}

func New(region string) *Discovery {
d := &Discovery{region: region}
d.Discovery = refresh.NewDiscovery(refresh.Options{
Mech: "ec2",
RefreshF: d.refresh,
})
return d
}

func (d *Discovery) refresh(ctx context.Context) ([]*refresh.Group, error) {
return nil, nil
}

func listStatic(ctx context.Context) ([]*refresh.Group, error) { return nil, nil }

// The static provider's options, wired at package level.
var staticOptions = refresh.Options{Mech: "static", RefreshF: listStatic}
11 changes: 11 additions & 0 deletions crates/codegraph-bench/fixtures/synthesis/go/gin/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package gin

func Logger(c *Context) {}

func getUser(c *Context) {}

func setup(e *Engine) {
e.Use(Logger)
e.GET("/users", getUser)
e.GET("/inline", func(c *Context) {})
}
Loading
Loading