up2code 0.1.0

up2code is a tool to check code listings in Markdown files against a GitHub repository.
Documentation
[![Crate](https://img.shields.io/crates/v/up2code.svg)](https://crates.io/crates/up2code)
[![Docs](https://docs.rs/up2code/badge.svg)](https://docs.rs/up2code)
![CI](https://github.com/bitfield/up2code/actions/workflows/ci.yml/badge.svg)
![Audit](https://github.com/bitfield/up2code/actions/workflows/audit.yml/badge.svg)
![Maintenance](https://img.shields.io/badge/maintenance-actively--developed-brightgreen.svg)

# up2code

`up2code` is a tool for checking code listings in Markdown files, to make sure they're up to date with, and in sync with, canonical versions stored in a GitHub repo.

### Installation

```sh
cargo install up2code
```

### Usage

Run:

```sh
up2code book/*.md
```

`up2code` reads all the Markdown files you specify, looking for what it considers a “listing”: a fenced code block immediately followed by a web link. For example:

    ```rust
    fn main() {
        println!("Hello, world!")
    }
    ```
    [Listing `hello/1`](https://github.com/bitfield/example/blob/src/main.rs))

It will try to fetch the raw code page from the specified URL (appending "?raw=true"), reporting any errors. If the fetch succeeds, it will check that the Markdown listing is an exact substring of the GitHub listing, reporting any mismatch as a unified diff:

```
tests/data/test.md: Listing `counter_2`
@@ -6,8 +13,8 @@

     #[test]
     fn count_lines_fn_counts_lines_in_input() {
-        let input = io::Cursor::new("line 1\nline2\n");
+        let input = io::Cursor::new("line 1\nline 2\n");
         let lines = count_lines(input);
-        assert_eq!(2, lines);
+        assert_eq!(lines, 2);
     }
 }
```