-
Notifications
You must be signed in to change notification settings - Fork 136
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Lua bindings for building stack graphs #351
base: main
Are you sure you want to change the base?
Conversation
Performance SummaryComparing base 3696992 with head bc424cd on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
bc424cd
to
9a18451
Compare
Performance SummaryComparing base 3696992 with head 9a18451 on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
9a18451
to
5a22bf7
Compare
Performance SummaryComparing base 3696992 with head 5a22bf7 on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
Performance SummaryComparing base 3696992 with head 58a0ca0 on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
58a0ca0
to
5fcd36b
Compare
Performance SummaryComparing base 3696992 with head 5fcd36b on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
5fcd36b
to
470f7ab
Compare
Performance SummaryComparing base 5a6744b with head c57360d on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
We're using the `mlua` crate, since it seems most actively maintained and performant.
470f7ab
to
f9d69c3
Compare
Performance SummaryComparing base 5a6744b with head 82d0a0a on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
f9d69c3
to
06e8340
Compare
Performance SummaryComparing base 5a6744b with head 6e3285a on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
You can't do anything with them other than call `tostring` on them, but even that is helpful in test cases!
06e8340
to
f11afc7
Compare
This is the spackle that parses a source file using tree-sitter, and calls a Lua function with it and an empty stack graph. The Lua function can do whatever it wants to walk the parse tree and add nodes and edges to the graph.
This one is fun, because `SpanCalculator` holds a reference to the file's source code, while the `mlua::UserData` works best for Rust types that are 'static. To get around this, we make sure to only ever create `SpanCalculator` wrappers for source data that is owned by the Lua interpreter, and add that source data as a user value of the Lua wrapper that we create. That should cause Lua's garbage collector to ensure that the source code outlives the `SpanCalculator`, making it safe for us to transmute the source reference to a 'static lifetime.
The stack graph builder now imports the `lsp-position` module before handing control to your Lua script. That lets you create a span calculator, and use that to fill in spans and definiens for the stack graph nodes that you create.
f11afc7
to
39ee686
Compare
Performance SummaryComparing base 1b01a8c with head ff1e99d on typescript_benchmark benchmark. For details see workflow artifacts. Note that performance is tested on the last commits with changes in Before
After
|
We're using the
mlua
crate, since it seems most actively maintained and performant.