name: Lint

on:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: dtolnay/rust-toolchain@nightly
        with: { components: rustfmt }
      - run: cargo fmt --all -- --check

  clippy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: dtolnay/rust-toolchain@stable
        with: { components: clippy }

      - name: Generate Cargo.lock
        run: cargo generate-lockfile
      - name: Cache Dependencies
        uses: Swatinem/rust-cache@v1.2.0
  
      - name: Check with Clippy
        uses: actions-rs/clippy-check@v1
        with:
          args: --workspace --tests --examples --all-features
          token: ${{ secrets.GITHUB_TOKEN }}

  lint-docs:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - uses: dtolnay/rust-toolchain@stable
        with: { components: rust-docs }

      - name: Check for broken intra-doc links
        uses: actions-rs/cargo@v1
        env:
          RUSTDOCFLAGS: "-D warnings"
        with:
          command: doc
          args: --no-deps --all-features --workspace