pub_source 0.1.0

Make everything public
Documentation
# `pub_source` - Make Everything Public

`pub_source` provides the [`make_public!`] procedural macro, which rewrites a block
of Rust source code so that all top level items become public.

This macro parses the input as a full [`syn::File`] and rewrites the following kinds
of items to `pub`:

- functions
- structs and all of their fields
- enums
- type aliases
- constants and statics
- traits
- modules (recursively)
- impl blocks (functions, consts, type items inside them)
- unions

Non-items such as `use`, macros, or foreign modules are left unchanged.

This crate is also, `unwrap`, `expect`, and `panic!()` deny use.

## Use case

This was originally written to be injected around user-submitted code in a code runner
so that unit tests could access everything the user wrote. There may be other uses but
I'm not quite sure what they might be yet.

## Feature Flags

This crate provides two feature flags:

- `std` - used for enabling stdlib support, enabled by default
- `unstable` - used for enabling unstable features (trait aliases, impl-associated types) on nightly compilers that are using these features

## Example

Input:

```rust
pub_source::make_public! {
    fn hidden() {}

    struct Thing {
        a: u32,
        b: String,
    }

    impl Thing {
        fn show(&self) {
            println!("{}", self.b);
        }
    }
}
```

Expands to code equivalent to:

```rust
pub fn hidden() {}

pub struct Thing {
    pub a: u32,
    pub b: String,
}

impl Thing {
    pub fn show(&self) {
        println!("{}", self.b);
    }
}
```