Skip to content
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

Draft
wants to merge 10 commits into
base: main
Choose a base branch
from
Draft

Commits on Nov 20, 2023

  1. Add Lua bindings for building stack graphs

    We're using the `mlua` crate, since it seems most actively maintained
    and performant.
    dcreager committed Nov 20, 2023
    Configuration menu
    Copy the full SHA
    f96b8d6 View commit details
    Browse the repository at this point in the history
  2. Document Lua API

    dcreager committed Nov 20, 2023
    Configuration menu
    Copy the full SHA
    91e44c6 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    b450a87 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    9ae6a87 View commit details
    Browse the repository at this point in the history

Commits on Nov 21, 2023

  1. Add Lua wrappers for edges

    You can't do anything with them other than call `tostring` on them, but
    even that is helpful in test cases!
    dcreager committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    9a30497 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    ea2e203 View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    b82ec8b View commit details
    Browse the repository at this point in the history
  4. Add Lua+tree-sitter stack graph builder

    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.
    dcreager committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    ff1e99d View commit details
    Browse the repository at this point in the history
  5. Add Lua bindings for SpanCalculator

    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.
    dcreager committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    0c639ff View commit details
    Browse the repository at this point in the history
  6. Calculate spans in Lua stack graph scripts

    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.
    dcreager committed Nov 21, 2023
    Configuration menu
    Copy the full SHA
    39ee686 View commit details
    Browse the repository at this point in the history