5 stable releases
new 1.2.1 | Jan 30, 2025 |
---|---|
1.1.0 | Jan 30, 2025 |
1.0.1 | Jan 22, 2025 |
#257 in Machine learning
254 downloads per month
38KB
859 lines
Daipendency
Daipendency extracts public API documentation from a library and outputs it in an LLM-friendly format. The endgame is to provide AI coding agents with all the context they need to use a particular dependency, but for now you can just use it manually on the CLI.
This project was inspired by Aider's repository map.
Features
- Outputs public symbols (e.g. functions) only.
- Outputs function signatures and documentation, but not the implementation.
- Only supports Rust for now, but any language supported by tree-sitter can be supported.
- Reads the source code directly, so it doesn't process the HTML of the generated documentation, thus keeping the output clean.
CLI Usage
daipendency extract-dep
: Extract the documentation of a dependency in a crate
To extract the documentation of a dependency of the crate in the current directory, pass the name of the dependency. For example:
daipendency extract-dep thiserror
Alternatively, you can specify the path to the crate that contains the dependency with the --dependant
option. For example:
daipendency extract-dep --dependant=/path/to/your/crate thiserror
This command will honour the version of the dependency specified in the Cargo.toml
file.
daipendency extract
: Extract the documentation of a crate
To extract the documentation from a library, pass the path to the library. For example:
daipendency extract /path/to/library
Library Usage
You can use the daipendency
crate in your own Rust project.
Firstly, you need to load the library from which you want to extract the documentation using Library::load_dependency
or Library::load
. For example:
use daipendency::{Library, Language};
use std::path::Path;
let library = Library::load_dependency(
"thiserror",
Path::new("/path/to/crate"),
Some(Language::Rust),
)?;
Library
instances contain all the symbols (e.g. functions) in the library, grouped into namespaces (e.g. Rust modules, Java packages).
You can extract the namespaces and symbols in which you're interested and process them however you want,
or you can use the generate_markdown_documentation
function to generate a Markdown file as follows:
use daipendency::generate_markdown_documentation;
let documentation = generate_markdown_documentation(&library);
Automatic Language Detection
Daipendency can automatically detect the language of a library if you don't specify it in the CLI with the --language
option or in the Library
function.
However, you should try to specify the language explicitly, since auto-detection can get slow as we add more languages.
Development
Adding Support for a New Language
To add support for a new language, you need to:
- Implement the
daipendency_extractor::Extractor
trait for the language. See daipendency-extractor-rust for an example. - Release your crate. Note that only MIT- or Apache-2.0-licensed crates are eligible for inclusion in Daipendency.
- Integrate your crate in
src/languages.rs
.
Dependencies
~11–20MB
~365K SLoC