rem-utils 0.2.1

Utilities for Rusty Extraction Maestro
Documentation
<<<<<<< HEAD
# rem-utils


rem-utils is a utilities library for the Rusty Extraction Maestro (REM)
toolchain.

It is used as a reference for the following crates:

    - rem-controller
    - rem-borrower
    - rem-repairer
    - rem-constraint

## Requirements


It requires internal access to the rust toolchain, using
`#![feature(rustc_private)]`.

The rust-toolchain.toml file specifies the rest of the build dependecies, and is
shared across all of the REM toolchain.

As a minimum you should have:

    - rust-src
    - rust-dev
    - llvm-tools-preview

It is currently configured to run on the `nightly-2024-08-28` build of rust,
however, other nightly builds may also work.

## Installation


You can install these components by running:

    ```bash
    rustup component add --toolchain nightly-2024-08-28 rust-src rustc-dev llvm-tools-preview
    ```
=======
# rem-utils

rem-utils is a utilities library for the Rusty Extraction Maestro (REM)
toolchain.

It is used as a reference for the following crates:

    - rem-controller
    - rem-borrower
    - rem-repairer
    - rem-constraint

## Requirements

**As of version 0.1.4, this library is no longer dependent on rustc!**

The rust-toolchain.toml file specifies the rest of the build dependecies, and is shared across all of the REM toolchain.

As a minimum you should have:

    - rust-src
    - rust-dev
    - llvm-tools-preview

It is currently configured to run on the `nightly-2024-08-28` build of rust,
however, other nightly builds may also work.

## Installation

You can install these components by running:

```bash
rustup component add --toolchain nightly-2024-08-28 rust-src rustc-dev llvm-tools-preview
```

## Function Exports

1. **Compilation Utilities**
   - `compile_file(file_name: &str, args: &Vec<&str>) -> Command`: Compiles a Rust file using `rustc` with optional arguments.

2. **Formatting Utilities**
   - `fmt_file(file_name: &str, args: &Vec<&str>) -> Command`: Formats a Rust file using `rustfmt` with optional arguments.

3. **Linting Utilities**
   - `lint_file(file_name: &str, args: &Vec<&str>) -> Command`: Lints a Rust file using `cargo clippy` with optional arguments.

4. **Project Checking and Building**
   - `check_project(manifest_path: &str, cargo_args: &Vec<&str>) -> Command`: Checks the Rust project for errors using `cargo check`, with customizable arguments.
   - `build_project(manifest_path: &str, cargo_args: &Vec<&str>) -> Command`: Builds the Rust project using `cargo build`, with customizable arguments.

5. **Code Analysis**
   - `find_caller(file_name: &str, caller_name: &str, callee_name: &str, callee_body_only: bool) -> (bool, String, String)`: Finds a function call within the specified file and retrieves the caller and callee function definitions.

6. **Source Formatting**
   - `format_source(src: &str) -> String`: Formats Rust source code using `rustfmt`.
>>>>>>> a1b7036e19119c62935e9f7ecc72ecee3c33a837