From 1420db16f638e4137b37e5af8142e4e12caa1139 Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Sun, 29 Sep 2024 10:41:49 -0700 Subject: [PATCH 1/5] switch to mkdocs --- .config/.readthedocs.yaml | 30 +- .github/workflows/build-docs.yml | 24 +- .gitignore | 4 +- .pre-commit-config.yaml | 1 + .vscode/tasks.json | 15 +- Cargo.lock | 1112 +---------------- README.md | 35 +- cpp-linter/src/cli/mod.rs | 20 +- cspell.config.yml | 9 + docs/Cargo.toml | 15 +- docs/README.md | 11 +- docs/badge_hook.py | 94 ++ docs/book.toml | 36 - docs/cli.yml | 58 + docs/cli_gen.pyi | 3 + docs/docs/changelog.md | 8 + docs/{src => docs}/cli.md | 8 +- .../images/annotations-clang-format.png | Bin .../images/annotations-clang-tidy.png | Bin docs/{src => docs}/images/comment.png | Bin docs/docs/images/favicon.ico | Bin 0 -> 165662 bytes docs/{src => docs}/images/format-review.png | Bin .../images/format-suggestion.png | Bin .../favicon.png => docs/images/logo.png} | Bin docs/{src => docs}/images/step-summary.png | Bin docs/{src => docs}/images/tidy-review.png | Bin docs/{src => docs}/index.md | 17 +- docs/docs/node.md | 6 + docs/{src => docs}/permissions.md | 10 +- docs/{src => docs}/pr-review-caveats.md | 16 +- docs/docs/python.md | 6 + docs/docs/stylesheets/extra.css | 241 ++++ docs/gen_cli_doc.py | 36 + docs/mkdocs.yml | 98 ++ docs/pyproject.toml | 17 + docs/requirements.txt | 6 + docs/src/CHANGELOG.md | 3 - docs/src/SUMMARY.md | 11 - docs/src/lib.rs | 125 ++ docs/src/main.rs | 203 --- docs/src/node.md | 3 - docs/src/python.md | 3 - docs/theme/pagetoc.css | 63 - docs/theme/pagetoc.js | 99 -- justfile | 6 +- node-binding/README.md | 2 +- py-binding/README.md | 2 +- 47 files changed, 883 insertions(+), 1573 deletions(-) create mode 100644 docs/badge_hook.py delete mode 100644 docs/book.toml create mode 100644 docs/cli.yml create mode 100644 docs/cli_gen.pyi create mode 100644 docs/docs/changelog.md rename docs/{src => docs}/cli.md (58%) rename docs/{src => docs}/images/annotations-clang-format.png (100%) rename docs/{src => docs}/images/annotations-clang-tidy.png (100%) rename docs/{src => docs}/images/comment.png (100%) create mode 100644 docs/docs/images/favicon.ico rename docs/{src => docs}/images/format-review.png (100%) rename docs/{src => docs}/images/format-suggestion.png (100%) rename docs/{theme/favicon.png => docs/images/logo.png} (100%) rename docs/{src => docs}/images/step-summary.png (100%) rename docs/{src => docs}/images/tidy-review.png (100%) rename docs/{src => docs}/index.md (59%) create mode 100644 docs/docs/node.md rename docs/{src => docs}/permissions.md (81%) rename docs/{src => docs}/pr-review-caveats.md (95%) create mode 100644 docs/docs/python.md create mode 100644 docs/docs/stylesheets/extra.css create mode 100644 docs/gen_cli_doc.py create mode 100644 docs/mkdocs.yml create mode 100644 docs/pyproject.toml create mode 100644 docs/requirements.txt delete mode 100644 docs/src/CHANGELOG.md delete mode 100644 docs/src/SUMMARY.md create mode 100644 docs/src/lib.rs delete mode 100644 docs/src/main.rs delete mode 100644 docs/src/node.md delete mode 100644 docs/src/python.md delete mode 100644 docs/theme/pagetoc.css delete mode 100644 docs/theme/pagetoc.js diff --git a/.config/.readthedocs.yaml b/.config/.readthedocs.yaml index ffda996..4cd1762 100644 --- a/.config/.readthedocs.yaml +++ b/.config/.readthedocs.yaml @@ -9,20 +9,16 @@ build: os: ubuntu-22.04 tools: rust: latest - commands: - # install cargo-binstall - - >- - curl - -L --proto '=https' --tlsv1.2 -sSf - https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh - | bash - # add .cargo bin to PATH - # install mdbook and mdbook-alerts - # build docs - - >- - PATH=/home/docs/.cargo/bin:$PATH && - cargo binstall --install-path /home/docs/.cargo/bin -y mdbook mdbook-alerts && - mdbook build docs - # move HTML output to required RTD output path - - mkdir -p ${READTHEDOCS_OUTPUT} - - mv docs/book/html/ "${READTHEDOCS_OUTPUT}" + python: latest + +mkdocs: + configuration: docs/mkdocs.yml + + +# Optionally declare the Python requirements required to build your docs + +python: + install: + - requirements: docs/requirements.txt + - method: pip + path: docs/ diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 75f7f0e..7efcd44 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -36,7 +36,7 @@ jobs: key: ${{ runner.os }}-docs-cargo-${{ hashFiles('Cargo.lock') }} - run: cargo fetch - build-mdbook: + build-mkdocs: runs-on: ubuntu-latest needs: [cache-deps] permissions: @@ -48,26 +48,30 @@ jobs: with: path: ~/.cargo key: ${{ runner.os }}-docs-cargo-${{ hashFiles('Cargo.lock') }} - - name: Install mdbook - uses: taiki-e/install-action@v2 + - uses: actions/setup-python@v5 with: - tool: mdbook,cargo-binstall,just - - name: Install mdbook plugins - run: cargo binstall -y mdbook-alerts + python-version: 3.x + cache: 'pip' + cache-dependency-path: docs/requirements.txt + - name: Install workflow deps + run: | + pip install -r docs/requirements.txt + pip install --force-reinstall -v docs/ - name: Build book - run: just docs-build + working-directory: docs + run: mkdocs build - name: Upload docs build as artifact uses: actions/upload-artifact@v4 with: name: cpp-linter-docs - path: docs/book/html + path: docs/site - name: Upload to github pages # only publish doc changes from main branch if: github.ref == 'refs/heads/main' uses: peaceiris/actions-gh-pages@v4 with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: docs/book/html + publish_dir: docs/site build-rustdoc: runs-on: ubuntu-latest @@ -80,7 +84,7 @@ jobs: with: path: ~/.cargo key: ${{ runner.os }}-docs-cargo-${{ hashFiles('Cargo.lock') }} - - name: Install mdbook + - name: Install just uses: taiki-e/install-action@v2 with: tool: just diff --git a/.gitignore b/.gitignore index b710d73..4c683a4 100644 --- a/.gitignore +++ b/.gitignore @@ -338,8 +338,8 @@ debug/ !.vscode/tasks.json !.vscode/extensions.json -# mdbook builds -book +# mkdocs builds +docs/site # ignore generated files .cpp-linter_cache/ diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 60a162c..75f051b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -10,6 +10,7 @@ repos: - id: check-added-large-files args: [--maxkb=9000] - id: check-yaml + exclude: docs/mkdocs.yml - id: check-toml - id: requirements-txt-fixer - id: mixed-line-ending diff --git a/.vscode/tasks.json b/.vscode/tasks.json index fa18fc0..1a45b15 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -161,11 +161,12 @@ }, { "type": "shell", - "command": "mdbook", - "label": "mdbook: serve", + "command": "mkdocs", + "label": "mkdocs: serve", "args": [ "serve", - "docs", + " --config-file", + "docs/mkdocs.yml", "--open" ], "problemMatcher": [], @@ -173,12 +174,12 @@ }, { "type": "shell", - "command": "mdbook", - "label": "mdbook: build", + "command": "mkdocs", + "label": "mkdocs: build", "args": [ "build", - "docs", - "--open" + " --config-file", + "docs/mkdocs.yml" ], "presentation": { "close": true, diff --git a/Cargo.lock b/Cargo.lock index a5fc866..bbcf761 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,19 +26,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "ammonia" -version = "4.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ab99eae5ee58501ab236beb6f20f6ca39be615267b014899c89b2f0bc18a459" -dependencies = [ - "html5ever", - "maplit", - "once_cell", - "tendril", - "url", -] - [[package]] name = "android-tzdata" version = "0.1.1" @@ -127,9 +114,9 @@ checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" [[package]] name = "autocfg" -version = "1.3.0" +version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c4b4d0bd25bd0b74681c0ad21497610ce1b7c91b1022cd21c80c6fbdd9476b0" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" [[package]] name = "backtrace" @@ -146,50 +133,18 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" -[[package]] -name = "bitflags" -version = "1.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" - [[package]] name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" -[[package]] -name = "block-buffer" -version = "0.10.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" -dependencies = [ - "generic-array", -] - -[[package]] -name = "bstr" -version = "1.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "40723b8fb387abc38f4f4a37c09073622e41dd12327033091ef8950659e6dc0c" -dependencies = [ - "memchr", - "regex-automata", - "serde", -] - [[package]] name = "bumpalo" version = "3.16.0" @@ -210,9 +165,9 @@ checksum = "428d9aa8fbc0670b7b8d6030a7fadd0f86151cae55e4dbbece15f3780a3dfaf3" [[package]] name = "cc" -version = "1.1.21" +version = "1.1.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07b1695e2c7e8fc85310cde85aeaab7e3097f593c91d209d3f9df76c928100f0" +checksum = "9540e661f81799159abee814118cc139a2004b3a3aa3ea37724a1b66530b90e0" dependencies = [ "jobserver", "libc", @@ -258,16 +213,6 @@ dependencies = [ "anstyle", "clap_lex", "strsim", - "terminal_size", -] - -[[package]] -name = "clap_complete" -version = "4.5.29" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8937760c3f4c60871870b8c3ee5f9b30771f792a7045c48bcbba999d7d6b3b8e" -dependencies = [ - "clap", ] [[package]] @@ -278,13 +223,10 @@ checksum = "1462739cb27611015575c0c11df5df7601141071f07518d56fcc1be504cbec97" [[package]] name = "cli-gen" -version = "0.1.0" +version = "0.0.0" dependencies = [ - "clap", "cpp-linter", - "mdbook", - "semver", - "serde_json", + "pyo3", ] [[package]] @@ -376,59 +318,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "cpufeatures" -version = "0.2.14" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "608697df725056feaccfa42cffdaeeec3fccc4ffc38358ecd19b243e716a78e0" -dependencies = [ - "libc", -] - -[[package]] -name = "crossbeam-channel" -version = "0.5.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-deque" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" -dependencies = [ - "crossbeam-epoch", - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.9.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" -dependencies = [ - "crossbeam-utils", -] - -[[package]] -name = "crossbeam-utils" -version = "0.8.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" - -[[package]] -name = "crypto-common" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" -dependencies = [ - "generic-array", - "typenum", -] - [[package]] name = "ctor" version = "0.2.8" @@ -439,51 +328,12 @@ dependencies = [ "syn", ] -[[package]] -name = "data-encoding" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8566979429cf69b49a5c740c60791108e86440e8be149bbea4fe54d2c32d6e2" - -[[package]] -name = "dbus" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bb21987b9fb1613058ba3843121dd18b163b254d8a6e797e144cbac14d96d1b" -dependencies = [ - "libc", - "libdbus-sys", - "winapi", -] - -[[package]] -name = "digest" -version = "0.10.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" -dependencies = [ - "block-buffer", - "crypto-common", -] - [[package]] name = "either" version = "1.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" -[[package]] -name = "elasticlunr-rs" -version = "3.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "41e83863a500656dfa214fee6682de9c5b9f03de6860fec531235ed2ae9f6571" -dependencies = [ - "regex", - "serde", - "serde_derive", - "serde_json", -] - [[package]] name = "encoding_rs" version = "0.8.34" @@ -493,29 +343,6 @@ dependencies = [ "cfg-if", ] -[[package]] -name = "env_filter" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4f2c92ceda6ceec50f43169f9ee8424fe2db276791afde7b2cd8bc084cb376ab" -dependencies = [ - "log", - "regex", -] - -[[package]] -name = "env_logger" -version = "0.11.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e13fa619b91fb2381732789fc5de83b45675e882f66623b7d8cb4f643017018d" -dependencies = [ - "anstream", - "anstyle", - "env_filter", - "humantime", - "log", -] - [[package]] name = "equivalent" version = "1.0.1" @@ -544,18 +371,6 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e8c02a5121d4ea3eb16a80748c74f5549a5665e4c21333c6098f283870fbdea6" -[[package]] -name = "filetime" -version = "0.2.25" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35c0522e981e68cbfa8c3f978441a5f34b30b96e146b33cd3359176b50fe8586" -dependencies = [ - "cfg-if", - "libc", - "libredox", - "windows-sys 0.59.0", -] - [[package]] name = "fnv" version = "1.0.7" @@ -586,25 +401,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fsevent-sys" -version = "4.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76ee7a02da4d231650c7cea31349b889be2f45ddb3ef3032d2ec8185f6313fd2" -dependencies = [ - "libc", -] - -[[package]] -name = "futf" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" -dependencies = [ - "mac", - "new_debug_unreachable", -] - [[package]] name = "futures" version = "0.3.30" @@ -694,16 +490,6 @@ dependencies = [ "slab", ] -[[package]] -name = "generic-array" -version = "0.14.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" -dependencies = [ - "typenum", - "version_check", -] - [[package]] name = "getrandom" version = "0.2.15" @@ -727,7 +513,7 @@ version = "0.19.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b903b73e45dc0c6c596f2d37eccece7c1c8bb6e4407b001096387c63d0d93724" dependencies = [ - "bitflags 2.6.0", + "bitflags", "libc", "libgit2-sys", "log", @@ -736,38 +522,6 @@ dependencies = [ "url", ] -[[package]] -name = "globset" -version = "0.4.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" -dependencies = [ - "aho-corasick", - "bstr", - "log", - "regex-automata", - "regex-syntax", -] - -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.6" @@ -779,7 +533,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.1.0", + "http", "indexmap", "slab", "tokio", @@ -787,50 +541,12 @@ dependencies = [ "tracing", ] -[[package]] -name = "handlebars" -version = "5.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d08485b96a0e6393e9e4d1b8d48cf74ad6c063cd905eb33f42c1ce3f0377539b" -dependencies = [ - "log", - "pest", - "pest_derive", - "serde", - "serde_json", - "thiserror", -] - [[package]] name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -[[package]] -name = "headers" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06683b93020a07e3dbcf5f8c0f6d40080d725bea7936fc01ad345c01b97dc270" -dependencies = [ - "base64 0.21.7", - "bytes", - "headers-core", - "http 0.2.12", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e7f66481bfee273957b1f20485a4ff3362987f85b2c236580d81b4eb7a326429" -dependencies = [ - "http 0.2.12", -] - [[package]] name = "heck" version = "0.5.0" @@ -852,31 +568,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "html5ever" -version = "0.27.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c13771afe0e6e846f1e67d038d4cb29998a6779f93c809212e4e9c32efd244d4" -dependencies = [ - "log", - "mac", - "markup5ever", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.1.0" @@ -888,17 +579,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.1" @@ -906,7 +586,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http", ] [[package]] @@ -917,8 +597,8 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.1", + "http", + "http-body", "pin-project-lite", ] @@ -934,36 +614,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "humantime" -version = "2.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" - -[[package]] -name = "hyper" -version = "0.14.30" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a152ddd61dfaec7273fe8419ab357f33aee0d914c5f4efbf0d96fa749eea5ec9" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.4.1" @@ -973,9 +623,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.6", - "http 1.1.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -992,8 +642,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", - "http 1.1.0", - "hyper 1.4.1", + "http", + "hyper", "hyper-util", "rustls", "rustls-pki-types", @@ -1010,7 +660,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.4.1", + "hyper", "hyper-util", "native-tls", "tokio", @@ -1020,20 +670,19 @@ dependencies = [ [[package]] name = "hyper-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da62f120a8a37763efb0cf8fdf264b884c7b8b9ac8660b900c8661030c00e6ba" +checksum = "41296eb09f183ac68eec06e03cdbea2e759633d4067b2f6552fc2e009bcad08b" dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.1", - "hyper 1.4.1", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", - "tower", "tower-service", "tracing", ] @@ -1071,22 +720,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.23" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" -dependencies = [ - "crossbeam-deque", - "globset", - "log", - "memchr", - "regex-automata", - "same-file", - "walkdir", - "winapi-util", -] - [[package]] name = "indexmap" version = "2.5.0" @@ -1103,26 +736,6 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" -[[package]] -name = "inotify" -version = "0.9.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f8069d3ec154eb856955c1c0fbffefbf5f3c40a104ec912d4797314c1801abff" -dependencies = [ - "bitflags 1.3.2", - "inotify-sys", - "libc", -] - -[[package]] -name = "inotify-sys" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e05c02b5e89bff3b946cedeca278abc628fe811e604f027c45a8aa3cf793d0eb" -dependencies = [ - "libc", -] - [[package]] name = "ipnet" version = "2.10.0" @@ -1159,26 +772,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "kqueue" -version = "1.0.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7447f1ca1b7b563588a205fe93dea8df60fd981423a768bc1c0ded35ed147d0c" -dependencies = [ - "kqueue-sys", - "libc", -] - -[[package]] -name = "kqueue-sys" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed9625ffda8729b85e45cf04090035ac368927b8cebc34898e7c120f52e4838b" -dependencies = [ - "bitflags 1.3.2", - "libc", -] - [[package]] name = "lazy_static" version = "1.5.0" @@ -1216,19 +809,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.158" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d8adc4bb1803a324070e64a98ae98f38934d91957a99cfb3a43dcbc01bc56439" - -[[package]] -name = "libdbus-sys" -version = "0.2.5" +version = "0.2.159" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "06085512b750d640299b79be4bad3d2fa90a9c00b1fd9e1b46364f66f0485c72" -dependencies = [ - "cc", - "pkg-config", -] +checksum = "561d97a539a36e26a9a5fad1ea11a3039a67714694aaa379433e580854bc3dc5" [[package]] name = "libgit2-sys" @@ -1254,17 +837,6 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "libredox" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" -dependencies = [ - "bitflags 2.6.0", - "libc", - "redox_syscall", -] - [[package]] name = "libssh2-sys" version = "0.3.0" @@ -1313,68 +885,6 @@ version = "0.4.22" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" -[[package]] -name = "mac" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" - -[[package]] -name = "maplit" -version = "1.0.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3e2e65a1a2e43cfcb47a895c4c8b10d1f4a61097f9f254f183aee60cad9c651d" - -[[package]] -name = "markup5ever" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "16ce3abbeba692c8b8441d036ef91aea6df8da2c6b6e21c7e14d3c18e526be45" -dependencies = [ - "log", - "phf", - "phf_codegen", - "string_cache", - "string_cache_codegen", - "tendril", -] - -[[package]] -name = "mdbook" -version = "0.4.40" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b45a38e19bd200220ef07c892b0157ad3d2365e5b5a267ca01ad12182491eea5" -dependencies = [ - "ammonia", - "anyhow", - "chrono", - "clap", - "clap_complete", - "elasticlunr-rs", - "env_logger", - "futures-util", - "handlebars", - "ignore", - "log", - "memchr", - "notify", - "notify-debouncer-mini", - "once_cell", - "opener", - "pathdiff", - "pulldown-cmark", - "regex", - "serde", - "serde_json", - "shlex", - "tempfile", - "tokio", - "toml", - "topological-sort", - "walkdir", - "warp", -] - [[package]] name = "memchr" version = "2.7.4" @@ -1396,16 +906,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "mime_guess" -version = "2.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" -dependencies = [ - "mime", - "unicase", -] - [[package]] name = "miniz_oxide" version = "0.8.0" @@ -1415,18 +915,6 @@ dependencies = [ "adler2", ] -[[package]] -name = "mio" -version = "0.8.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c" -dependencies = [ - "libc", - "log", - "wasi", - "windows-sys 0.48.0", -] - [[package]] name = "mio" version = "1.0.2" @@ -1449,10 +937,10 @@ dependencies = [ "bytes", "colored", "futures-util", - "http 1.1.0", - "http-body 1.0.1", + "http", + "http-body", "http-body-util", - "hyper 1.4.1", + "hyper", "hyper-util", "log", "rand", @@ -1469,7 +957,7 @@ version = "2.16.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "53575dfa17f208dd1ce3a2da2da4659aae393b256a472f2738a8586a6c4107fd" dependencies = [ - "bitflags 2.6.0", + "bitflags", "ctor", "napi-derive", "napi-sys", @@ -1538,51 +1026,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "new_debug_unreachable" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" - -[[package]] -name = "normpath" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8911957c4b1549ac0dc74e30db9c8b0e66ddcd6d7acc33098f4c63a64a6d7ed" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "notify" -version = "6.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6205bd8bb1e454ad2e27422015fb5e4f2bcc7e08fa8f27058670d208324a4d2d" -dependencies = [ - "bitflags 2.6.0", - "crossbeam-channel", - "filetime", - "fsevent-sys", - "inotify", - "kqueue", - "libc", - "log", - "mio 0.8.11", - "walkdir", - "windows-sys 0.48.0", -] - -[[package]] -name = "notify-debouncer-mini" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d40b221972a1fc5ef4d858a2f671fb34c75983eb385463dff3780eeff6a9d43" -dependencies = [ - "crossbeam-channel", - "log", - "notify", -] - [[package]] name = "num-traits" version = "0.2.19" @@ -1599,24 +1042,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "084f1a5821ac4c651660a94a7153d27ac9d8a53736203f58b31945ded098070a" dependencies = [ "memchr", -] - -[[package]] -name = "once_cell" -version = "1.19.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3fdb12b2476b595f9358c5161aa467c2438859caa136dec86c26fdd2efe17b92" +] [[package]] -name = "opener" -version = "0.7.2" +name = "once_cell" +version = "1.20.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d0812e5e4df08da354c851a3376fead46db31c2214f849d3de356d774d057681" +checksum = "82881c4be219ab5faaf2ad5e5e5ecdff8c66bd7402ca3160975c93b24961afd1" dependencies = [ - "bstr", - "dbus", - "normpath", - "windows-sys 0.59.0", + "portable-atomic", ] [[package]] @@ -1625,7 +1059,7 @@ version = "0.10.66" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9529f4786b70a3e8c61e11179af17ab6188ad8d0ded78c5529441ed39d4bd9c1" dependencies = [ - "bitflags 2.6.0", + "bitflags", "cfg-if", "foreign-types", "libc", @@ -1696,140 +1130,12 @@ dependencies = [ "windows-targets 0.52.6", ] -[[package]] -name = "pathdiff" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" - [[package]] name = "percent-encoding" version = "2.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" -[[package]] -name = "pest" -version = "2.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdbef9d1d47087a895abd220ed25eb4ad973a5e26f6a4367b038c25e28dfc2d9" -dependencies = [ - "memchr", - "thiserror", - "ucd-trie", -] - -[[package]] -name = "pest_derive" -version = "2.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d3a6e3394ec80feb3b6393c725571754c6188490265c61aaf260810d6b95aa0" -dependencies = [ - "pest", - "pest_generator", -] - -[[package]] -name = "pest_generator" -version = "2.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94429506bde1ca69d1b5601962c73f4172ab4726571a59ea95931218cb0e930e" -dependencies = [ - "pest", - "pest_meta", - "proc-macro2", - "quote", - "syn", -] - -[[package]] -name = "pest_meta" -version = "2.7.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac8a071862e93690b6e34e9a5fb8e33ff3734473ac0245b27232222c4906a33f" -dependencies = [ - "once_cell", - "pest", - "sha2", -] - -[[package]] -name = "phf" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" -dependencies = [ - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_codegen" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" -dependencies = [ - "phf_generator 0.11.2", - "phf_shared 0.11.2", -] - -[[package]] -name = "phf_generator" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" -dependencies = [ - "phf_shared 0.10.0", - "rand", -] - -[[package]] -name = "phf_generator" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" -dependencies = [ - "phf_shared 0.11.2", - "rand", -] - -[[package]] -name = "phf_shared" -version = "0.10.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" -dependencies = [ - "siphasher", -] - -[[package]] -name = "phf_shared" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" -dependencies = [ - "siphasher", -] - -[[package]] -name = "pin-project" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b6bf43b791c5b9e34c3d182969b4abb522f9343702850a2e57f460d00d09b4b3" -dependencies = [ - "pin-project-internal", -] - -[[package]] -name = "pin-project-internal" -version = "1.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2f38a4412a78282e09a2cf38d195ea5420d15ba0602cb375210efbc877243965" -dependencies = [ - "proc-macro2", - "quote", - "syn", -] - [[package]] name = "pin-project-lite" version = "0.2.14" @@ -1844,15 +1150,15 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "pkg-config" -version = "0.3.30" +version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d231b230927b5e4ad203db57bbcbee2802f6bce620b1e4a9024a07d94e2907ec" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" [[package]] name = "portable-atomic" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d30538d42559de6b034bc76fd6dd4c38961b1ee5c6c56e3808c50128fdbc22ce" +checksum = "cc9c68a3f6da06753e9335d63e27f6b9754dd1920d941135b7ea8224f141adb2" [[package]] name = "ppv-lite86" @@ -1863,12 +1169,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "precomputed-hash" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" - [[package]] name = "proc-macro2" version = "1.0.86" @@ -1878,24 +1178,6 @@ dependencies = [ "unicode-ident", ] -[[package]] -name = "pulldown-cmark" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76979bea66e7875e7509c4ec5300112b316af87fa7a252ca91c448b32dfe3993" -dependencies = [ - "bitflags 2.6.0", - "memchr", - "pulldown-cmark-escape", - "unicase", -] - -[[package]] -name = "pulldown-cmark-escape" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bd348ff538bc9caeda7ee8cad2d1d48236a1f443c1fa3913c6a02fe0043b1dd3" - [[package]] name = "pyo3" version = "0.22.3" @@ -2000,18 +1282,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.4" +version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0884ad60e090bf1345b93da0a5de8923c93884cd03f40dfcfddd3b4bee661853" +checksum = "355ae415ccd3a04315d3f8246e86d67689ea74d88d915576e1589a351062a13b" dependencies = [ - "bitflags 2.6.0", + "bitflags", ] [[package]] name = "regex" -version = "1.10.6" +version = "1.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" +checksum = "38200e5ee88914975b69f657f0801b6f6dccafd44fd9326302a4aaeecfacb1d8" dependencies = [ "aho-corasick", "memchr", @@ -2021,9 +1303,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.7" +version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38caf58cc5ef2fed281f89292ef23f6365465ed9a41b7a7754eb4e26496c92df" +checksum = "368758f23274712b504848e9d5a6f010445cc8b87a7cdb4d7cbee666c1288da3" dependencies = [ "aho-corasick", "memchr", @@ -2032,9 +1314,9 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a66a03ae7c801facd77a29370b4faec201768915ac14a721ba36f20bc9c209b" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" [[package]] name = "reqwest" @@ -2042,16 +1324,16 @@ version = "0.12.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f8f4955649ef5c38cc7f9e8aa41761d48fb9677197daea9984dc54f56aad5e63" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", "futures-util", - "h2 0.4.6", - "http 1.1.0", - "http-body 1.0.1", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.4.1", + "hyper", "hyper-rustls", "hyper-tls", "hyper-util", @@ -2106,7 +1388,7 @@ version = "0.38.37" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8acb788b847c24f28525660c4d7758620a7210875711f79e7f663cc152726811" dependencies = [ - "bitflags 2.6.0", + "bitflags", "errno", "libc", "linux-raw-sys", @@ -2132,15 +1414,15 @@ version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ - "base64 0.22.1", + "base64", "rustls-pki-types", ] [[package]] name = "rustls-pki-types" -version = "1.8.0" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc0a2ce646f8655401bb81e7927b812614bd5d91dbc968696be50603510fcaf0" +checksum = "0e696e35370c65c9c541198af4543ccd580cf17fc25d8e05c5a242b202488c55" [[package]] name = "rustls-webpki" @@ -2159,15 +1441,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.24" @@ -2177,12 +1450,6 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "scoped-tls" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1cf6437eb19a8f4a6cc0f7dca544973b0b78843adbfeb3683d1a94a0024a294" - [[package]] name = "scopeguard" version = "1.2.0" @@ -2195,7 +1462,7 @@ version = "2.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "897b2245f0b511c87893af39b033e5ca9cce68824c4d7e7630b5a1d339658d02" dependencies = [ - "bitflags 2.6.0", + "bitflags", "core-foundation", "core-foundation-sys", "libc", @@ -2274,28 +1541,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.10.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - -[[package]] -name = "sha2" -version = "0.10.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" -dependencies = [ - "cfg-if", - "cpufeatures", - "digest", -] - [[package]] name = "shlex" version = "1.3.0" @@ -2308,12 +1553,6 @@ version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" -[[package]] -name = "siphasher" -version = "0.3.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" - [[package]] name = "slab" version = "0.4.9" @@ -2345,32 +1584,6 @@ version = "0.9.8" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" -[[package]] -name = "string_cache" -version = "0.8.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" -dependencies = [ - "new_debug_unreachable", - "once_cell", - "parking_lot", - "phf_shared 0.10.0", - "precomputed-hash", - "serde", -] - -[[package]] -name = "string_cache_codegen" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" -dependencies = [ - "phf_generator 0.10.0", - "phf_shared 0.10.0", - "proc-macro2", - "quote", -] - [[package]] name = "strsim" version = "0.11.1" @@ -2385,9 +1598,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292" [[package]] name = "syn" -version = "2.0.77" +version = "2.0.79" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f35bcdf61fd8e7be6caf75f429fdca8beb3ed76584befb503b1569faee373ed" +checksum = "89132cd0bf050864e1d38dc3bbc07a0eb8e7530af26344d3d2bbbef83499f590" dependencies = [ "proc-macro2", "quote", @@ -2409,7 +1622,7 @@ version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" dependencies = [ - "bitflags 2.6.0", + "bitflags", "core-foundation", "system-configuration-sys", ] @@ -2432,9 +1645,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tempfile" -version = "3.12.0" +version = "3.13.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04cbcdd0c794ebb0d4cf35e88edd2f7d2c4c3e9a5a6dab322839b321c6a87a64" +checksum = "f0f2c9fc62d0beef6951ccffd757e241266a2c833136efbe35af6cd2567dca5b" dependencies = [ "cfg-if", "fastrand", @@ -2443,41 +1656,20 @@ dependencies = [ "windows-sys 0.59.0", ] -[[package]] -name = "tendril" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" -dependencies = [ - "futf", - "mac", - "utf-8", -] - -[[package]] -name = "terminal_size" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21bebf2b7c9e0a515f6e0f8c51dc0f8e4696391e6f1ff30379559f8365fb0df7" -dependencies = [ - "rustix", - "windows-sys 0.48.0", -] - [[package]] name = "thiserror" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0342370b38b6a11b6cc11d6a805569958d54cfa061a29969c3b5ce2ea405724" +checksum = "d50af8abc119fb8bb6dbabcfa89656f46f84aa0ac7688088608076ad2b459a84" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.63" +version = "1.0.64" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4558b58466b9ad7ca0f102865eccc95938dca1a74a856f2b57b6629050da261" +checksum = "08904e7672f5eb876eaaf87e0ce17857500934f4981c4a0ab2b4aa98baac7fc3" dependencies = [ "proc-macro2", "quote", @@ -2508,7 +1700,7 @@ dependencies = [ "backtrace", "bytes", "libc", - "mio 1.0.2", + "mio", "parking_lot", "pin-project-lite", "socket2", @@ -2559,18 +1751,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c83b561d025642014097b66e6c1bb422783339e0909e4429cde4749d1990bc38" -dependencies = [ - "futures-util", - "log", - "tokio", - "tungstenite", -] - [[package]] name = "tokio-util" version = "0.7.12" @@ -2584,42 +1764,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "toml" -version = "0.5.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234" -dependencies = [ - "serde", -] - -[[package]] -name = "topological-sort" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea68304e134ecd095ac6c3574494fc62b909f416c4fca77e440530221e549d3d" - -[[package]] -name = "tower" -version = "0.4.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" -dependencies = [ - "futures-core", - "futures-util", - "pin-project", - "pin-project-lite", - "tokio", - "tower-layer", - "tower-service", -] - -[[package]] -name = "tower-layer" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" - [[package]] name = "tower-service" version = "0.3.3" @@ -2632,7 +1776,6 @@ version = "0.1.40" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" dependencies = [ - "log", "pin-project-lite", "tracing-core", ] @@ -2652,46 +1795,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" -[[package]] -name = "tungstenite" -version = "0.21.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ef1a641ea34f399a848dea702823bbecfb4c486f911735368f1f137cb8257e1" -dependencies = [ - "byteorder", - "bytes", - "data-encoding", - "http 1.1.0", - "httparse", - "log", - "rand", - "sha1", - "thiserror", - "url", - "utf-8", -] - -[[package]] -name = "typenum" -version = "1.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" - -[[package]] -name = "ucd-trie" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" - -[[package]] -name = "unicase" -version = "2.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f7d2d4dafb69621809a81864c9c1b864479e1235c0dd4e199924b9742439ed89" -dependencies = [ - "version_check", -] - [[package]] name = "unicode-bidi" version = "0.3.15" @@ -2742,12 +1845,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "utf-8" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" - [[package]] name = "utf8parse" version = "0.2.2" @@ -2760,22 +1857,6 @@ version = "0.2.15" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" -[[package]] -name = "version_check" -version = "0.9.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" - -[[package]] -name = "walkdir" -version = "2.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" -dependencies = [ - "same-file", - "winapi-util", -] - [[package]] name = "want" version = "0.3.1" @@ -2785,34 +1866,6 @@ dependencies = [ "try-lock", ] -[[package]] -name = "warp" -version = "0.3.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4378d202ff965b011c64817db11d5829506d3404edeadb61f190d111da3f231c" -dependencies = [ - "bytes", - "futures-channel", - "futures-util", - "headers", - "http 0.2.12", - "hyper 0.14.30", - "log", - "mime", - "mime_guess", - "percent-encoding", - "pin-project", - "scoped-tls", - "serde", - "serde_json", - "serde_urlencoded", - "tokio", - "tokio-tungstenite", - "tokio-util", - "tower-service", - "tracing", -] - [[package]] name = "wasi" version = "0.11.0+wasi-snapshot-preview1" @@ -2908,37 +1961,6 @@ dependencies = [ "winsafe", ] -[[package]] -name = "winapi" -version = "0.3.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" -dependencies = [ - "winapi-i686-pc-windows-gnu", - "winapi-x86_64-pc-windows-gnu", -] - -[[package]] -name = "winapi-i686-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" - -[[package]] -name = "winapi-util" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" -dependencies = [ - "windows-sys 0.59.0", -] - -[[package]] -name = "winapi-x86_64-pc-windows-gnu" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" - [[package]] name = "windows-core" version = "0.52.0" diff --git a/README.md b/README.md index 089e8e1..4352e2f 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,22 @@ -[file-annotations]: https://cpp-linter.github.io/cpp-linter-rs/cli#-a---file-annotations -[thread-comments]: https://cpp-linter.github.io/cpp-linter-rs/cli#-g---thread-comments -[step-summary]: https://cpp-linter.github.io/cpp-linter-rs/cli#-w---step-summary -[tidy-review]: https://cpp-linter.github.io/cpp-linter-rs/cli#-d---tidy-review -[format-review]: https://cpp-linter.github.io/cpp-linter-rs/cli#-m---format-review - -[format-annotations-preview]: docs/src/images/annotations-clang-format.png -[tidy-annotations-preview]: docs/src/images/annotations-clang-tidy.png -[step-summary-preview]: docs/src/images/step-summary.png -[thread-comment-preview]: docs/src/images/comment.png -[tidy-review-preview]: docs/src/images/tidy-review.png -[format-review-preview]: docs/src/images/format-review.png -[format-suggestion-preview]: docs/src/images/format-suggestion.png - +[file-annotations]: https://cpp-linter.github.io/cpp-linter-rs/cli#-a-file-annotations +[thread-comments]: https://cpp-linter.github.io/cpp-linter-rs/cli#-g-thread-comments +[step-summary]: https://cpp-linter.github.io/cpp-linter-rs/cli#-w-step-summary +[tidy-review]: https://cpp-linter.github.io/cpp-linter-rs/cli#-d-tidy-review +[format-review]: https://cpp-linter.github.io/cpp-linter-rs/cli#-m-format-review + +[format-annotations-preview]: docs/docs/images/annotations-clang-format.png +[tidy-annotations-preview]: docs/docs/images/annotations-clang-tidy.png +[step-summary-preview]: docs/docs/images/step-summary.png +[thread-comment-preview]: docs/docs/images/comment.png +[tidy-review-preview]: docs/docs/images/tidy-review.png +[format-review-preview]: docs/docs/images/format-review.png +[format-suggestion-preview]: docs/docs/images/format-suggestion.png + +[cli-doc]: https://cpp-linter.github.io/cpp-linter-rs/cli.html + + [![Python packaging][py-build-badge]][py-build-ci] [![Binary executable builds][bin-build-badge]][bin-build-ci] [![node-js builds][node-ci-badge]][node-ci] @@ -56,7 +59,7 @@ A package for linting C/C++ code with clang-tidy and/or clang-format to collect - [x] [file-annotations](#annotations) - [x] [Pull Request Review](#pull-request-review) suggestions -> [!CAUTION] +> [!WARNING] > This project is still experimental and subject to drastic changes. > Please use the [pure python cpp-linter](https://github.com/cpp-linter/cpp-linter) > package until this project is ready for deployment. @@ -118,7 +121,7 @@ For usage in a CI workflow, see [the cpp-linter/cpp-linter-action repository](https://github.com/cpp-linter/cpp-linter-action). For the description of supported Command Line Interface options, see -[the CLI documentation](https://cpp-linter.github.io/cpp-linter-rs/cli.html). +[the CLI documentation][cli-doc]. ## Example diff --git a/cpp-linter/src/cli/mod.rs b/cpp-linter/src/cli/mod.rs index dd04101..9ce03b2 100644 --- a/cpp-linter/src/cli/mod.rs +++ b/cpp-linter/src/cli/mod.rs @@ -57,9 +57,9 @@ for an example of setting up Clang Tooling on a source tree.", - Set this to a blank string (`''`) to disable using clang-format entirely. -> [!note] +> [!NOTE] > If this is not a blank string, then it is also passed to clang-tidy -> (if [`--tidy_checks`](#-c---tidy-checks) is not `-*`). +> (if [`--tidy_checks`](#-c-tidy-checks) is not `-*`). > This is done to ensure suggestions from both clang-tidy and > clang-format are consistent.\n\n", ), @@ -142,7 +142,7 @@ the current working directory if not using a CI runner).\n\n", - There is no need to use `./` for each entry; a blank string (`''`) represents the repo-root path. - This can also have files, but the file's path (relative to - the [`--repo-root`](#-r---repo-root)) has to be specified with the filename. + the [`--repo-root`](#-r-repo-root)) has to be specified with the filename. - Submodules are automatically ignored. Hidden directories (beginning with a `.`) are also ignored automatically. - Prefix a path with `!` to explicitly not ignore it. This can be @@ -158,7 +158,7 @@ the current working directory if not using a CI runner).\n\n", .value_delimiter('|') .help_heading("clang-tidy options") .help( - "Similar to [`--ignore`](#-i---ignore) but applied + "Similar to [`--ignore`](#-i-ignore) but applied exclusively to files analyzed by clang-tidy.\n\n", ), ) @@ -169,7 +169,7 @@ exclusively to files analyzed by clang-tidy.\n\n", .value_delimiter('|') .help_heading("clang-format options") .help( - "Similar to [`--ignore`](#-i---ignore) but applied + "Similar to [`--ignore`](#-i-ignore) but applied exclusively to files analyzed by clang-format.\n\n", ), ) @@ -201,9 +201,9 @@ The following values are accepted: .help( "Set this option to false to analyze any source files in the repo. This is automatically enabled if -[`--lines-changed-only`](#-l---lines-changed-only) is enabled. +[`--lines-changed-only`](#-l-lines-changed-only) is enabled. -> [!note] +> [!NOTE] > The `GITHUB_TOKEN` should be supplied when running on a > private repository with this option enabled, otherwise the runner > does not not have the privilege to list the changed files for an event. @@ -241,7 +241,7 @@ cpp-linter --extra-arg="-std=c++17" --extra-arg="-Wall" Set this to `update` to update an existing comment if one exists; the value 'true' will always delete an old comment and post a new one if necessary. -> [!note] +> [!NOTE] > To use thread comments, the `GITHUB_TOKEN` (provided by > Github to each repository) must be declared as an environment > variable. @@ -261,8 +261,8 @@ the value 'true' will always delete an old comment and post a new one if necessa "Set this option to true or false to enable or disable the use of a thread comment that basically says 'Looks Good To Me' (when all checks pass). -> [!important] -> The [`--thread-comments`](#-g---thread-comments) +> [!IMPORTANT] +> The [`--thread-comments`](#-g-thread-comments) > option also notes further implications.\n\n", ), ) diff --git a/cspell.config.yml b/cspell.config.yml index 800dd06..a69f735 100644 --- a/cspell.config.yml +++ b/cspell.config.yml @@ -18,22 +18,28 @@ words: - endmacro - endwith - Falsey + - fontawesome - gitmodules + - inlinehilite - iomanip - libc - libgit + - linenums - markdownlint - maturin - mdbook + - mkdocs - msvc - napi - nonminimal - peekable - pkgs + - positionals - posix - preprocess - pybind - pyfunction + - pymdownx - pymodule - pypa - pypi @@ -42,8 +48,11 @@ words: - reqwest - revparse - serde + - superfences + - tasklist - tempdir - tempfile + - twemoji - vararg - venv ignorePaths: diff --git a/docs/Cargo.toml b/docs/Cargo.toml index 628de46..bbc84e3 100644 --- a/docs/Cargo.toml +++ b/docs/Cargo.toml @@ -2,8 +2,8 @@ [package] name = "cli-gen" edition = "2021" -version = "0.1.0" -description = "A mdbook pre-processor that generates a CLI doc from source code." +version = "0.0.0" +description = "A function exposed in python that generates a CLI doc from rust source code." repository = "https://github.com/cpp-linter/cpp-linter-rs/tree/main/docs" authors.workspace = true homepage.workspace = true @@ -11,11 +11,8 @@ license.workspace = true [dependencies] cpp-linter = { path = "../cpp-linter" } -clap = "4.5.17" -mdbook = "0.4.40" -semver = "1.0.23" -serde_json = "1.0.128" +pyo3 = "0.22.3" -[[bin]] -name = "cli-gen" -path = "src/main.rs" +[lib] +name = "cli_gen" +crate-type = ["cdylib"] diff --git a/docs/README.md b/docs/README.md index f78c92f..729dd45 100644 --- a/docs/README.md +++ b/docs/README.md @@ -8,13 +8,14 @@ Please [visit our website][gh-pages] to see generated documentation. To view the documentation locally, some software needs to be installed. ```shell -cargo install --locked cargo-binstall -cargo binstall -y mdbook mdbook-alerts +pip install maturin +cd docs +maturin dev +pip install -r docs/requirements.txt ``` -Then use `mdbook` to generate the docs and open them in your browser. +Then use `mkdocs` to generate the docs and open them in your browser. ```shell -# in repo root folder -mdbook serve docs --open +mkdocs serve --open ``` diff --git a/docs/badge_hook.py b/docs/badge_hook.py new file mode 100644 index 0000000..84b37ef --- /dev/null +++ b/docs/badge_hook.py @@ -0,0 +1,94 @@ +"""A mkdocs hook that injects an HTML syntax used to generate badges at build time.""" + +import re +from re import Match +from mkdocs.config.defaults import MkDocsConfig +from mkdocs.structure.files import Files +from mkdocs.structure.pages import Page + + +def on_page_markdown(markdown: str, *, page: Page, config: MkDocsConfig, files: Files): + # Replace callback + def replace(match: Match): + badge_type, args = match.groups() + args = args.strip() + if badge_type == "version": + return _badge_for_version(args, page, files) + elif badge_type == "flag": + return _badge_for_flags(args, page, files) + elif badge_type == "permission": + return _badge_for_permissions(args, page, files) + elif badge_type == "default": + return _badge_for_default(args, page, files) + + # Otherwise, raise an error + raise RuntimeError(f"Unknown badge type: {badge_type}") + + # Find and replace all external asset URLs in current page + return re.sub(r"", replace, markdown, flags=re.I | re.M) + + +# ----------------------------------------------------------------------------- +# Helper functions + + +def _badge_for_flags(arg, page: Page, files: Files): + if arg == "experimental": + return _badge_for_experimental(page, files) + raise ValueError(f"Unsupported badge flag: {arg}") + + +# Create badge +def _badge(icon: str, text: str = ""): + return "".join( + [ + '', + *([f'{icon}'] if icon else []), + *([f'{text}'] if text else []), + "", + ] + ) + + +# Create badge for version +def _badge_for_version(text: str, page: Page, files: Files): + icon = "material-tag-outline" + repo = "cpp-linter/cpp-linter-rs" + version = tuple(int(x.lstrip("v")) for x in text.split(".")) + if version < (1, 4, 6): + repo = "cpp-linter/cpp-linter-action" + elif version[0] == 1: + repo = "cpp-linter/cpp-linter" + href = f"https://github.com/{repo}/releases/" + ( + f"v{text}" if text[0:1].isdigit() else text + ) + return _badge( + icon=f'[:{icon}:]({href} "minimum version")', + text=f'[{text}]({href} "minimum version")', + ) + + +# Create badge for default value +def _badge_for_default(text: str, page: Page, files: Files): + return _badge(icon="Default", text=f"`#!yaml {text}`") + + +# Create badge for required value flag +def _badge_for_permissions(args: str, page: Page, files: Files): + match_permission = re.match(r"([^#]+)(.*)", args) + if match_permission is None: + raise ValueError(f"failed to parse permissions from {args}") + permission, link = match_permission.groups()[:2] + permission = permission.strip() + link = "permissions.md" + link + icon = "material-lock" + return _badge( + icon=f'[:{icon}:]({link} "required permissions")', + text=f'[`#!yaml {permission}`]({link} "required permission")', + ) + + +# Create badge for experimental flag +def _badge_for_experimental(page: Page, files: Files): + icon = "material-flask-outline" + return _badge(icon=f":{icon}:{{ .mdx-badge--heart }}", text="experimental") diff --git a/docs/book.toml b/docs/book.toml deleted file mode 100644 index 9cc1083..0000000 --- a/docs/book.toml +++ /dev/null @@ -1,36 +0,0 @@ -[book] -authors = ["Brendan Doherty"] -language = "en" -multilingual = false -src = "src" -title = "cpp-linter" -description = "Some documentation about the cpp-linter-rs project" - -[build] -create-missing = false -build-dir = "book/html" - -[output.html] -theme = "theme" -default-theme = "ayu" -preferred-dark-theme = "ayu" -git-repository-url = "https://github.com/cpp-linter/cpp-linter-rs" -additional-css = ["theme/pagetoc.css"] -additional-js = ["theme/pagetoc.js"] - -[preprocessor.alerts] -after = ["links"] - -[preprocessor.cli-gen] -command = "cargo run --bin cli-gen" -before = ["links"] -groups-order = [ - "General options", - "Source options", - "Clang-format options", - "Clang-tidy options", - "Feedback options", -] - -# [output.markdown] -# for debugging the cli-gen preprocessor (src/main.rs) diff --git a/docs/cli.yml b/docs/cli.yml new file mode 100644 index 0000000..4932ef7 --- /dev/null +++ b/docs/cli.yml @@ -0,0 +1,58 @@ +# file to hold metadata about the action.yml inputs and outputs +inputs: + style: + minimum-version: '1.4.6' + extensions: + minimum-version: '1.4.6' + tidy-checks: + minimum-version: '1.4.6' + repo-root: + minimum-version: '1.4.6' + version: + minimum-version: '1.4.6' + verbosity: + minimum-version: '1.3.0' + lines-changed-only: + minimum-version: '1.5.0' + required-permission: 'contents: read #file-changes' + files-changed-only: + minimum-version: '1.3.0' + required-permission: 'contents: read #file-changes' + ignore: + minimum-version: '1.3.0' + ignore-tidy: + minimum-version: '1.9.0' + ignore-format: + minimum-version: '1.9.0' + thread-comments: + minimum-version: '1.6.1' + required-permission: 'contents: write #thread-comments' + no-lgtm: + minimum-version: '1.6.1' + step-summary: + minimum-version: '1.6.0' + file-annotations: + minimum-version: '1.4.3' + database: + minimum-version: '1.4.0' + extra-args: + minimum-version: '1.4.7' + tidy-review: + minimum-version: '1.7.0' + experimental: true + required-permission: 'pull-requests: write #pull-request-reviews' + format-review: + minimum-version: '1.7.0' + required-permission: 'pull-requests: write #pull-request-reviews' + passive-reviews: + minimum-version: '1.10.0' + required-permission: 'pull-requests: write #pull-request-reviews' + jobs: + minimum-version: '1.8.1' +outputs: + checks-failed: + minimum-version: '1.4.6' + clang-tidy-checks-failed: + minimum-version: '1.6.2' + clang-format-checks-failed: + minimum-version: '1.6.2' diff --git a/docs/cli_gen.pyi b/docs/cli_gen.pyi new file mode 100644 index 0000000..9370c53 --- /dev/null +++ b/docs/cli_gen.pyi @@ -0,0 +1,3 @@ +from typing import Dict, Any + +def generate_cli_doc(metadata: Dict[str, Dict[str, Any]]) -> str: ... diff --git a/docs/docs/changelog.md b/docs/docs/changelog.md new file mode 100644 index 0000000..633db5d --- /dev/null +++ b/docs/docs/changelog.md @@ -0,0 +1,8 @@ +--- +title: Changes +--- + + +{% + include "../../CHANGELOG.md" +%} diff --git a/docs/src/cli.md b/docs/docs/cli.md similarity index 58% rename from docs/src/cli.md rename to docs/docs/cli.md index 5b528e3..ef55c86 100644 --- a/docs/src/cli.md +++ b/docs/docs/cli.md @@ -5,12 +5,6 @@ > This document is generated during a Continuous Integration workflow. > Please refer to the [generated version of this document][gh-pages] instead. > -> To view this document locally, run the following command from project root: -> -> ```shell -> mdbook serve docs -> ``` -> -> See also [docs/README](../README.md) for more information. +> To view this document locally, see the [docs/README](../README.md) for instructions. [gh-pages]: https://cpp-linter.github.io/cpp-linter-rs/cli.html diff --git a/docs/src/images/annotations-clang-format.png b/docs/docs/images/annotations-clang-format.png similarity index 100% rename from docs/src/images/annotations-clang-format.png rename to docs/docs/images/annotations-clang-format.png diff --git a/docs/src/images/annotations-clang-tidy.png b/docs/docs/images/annotations-clang-tidy.png similarity index 100% rename from docs/src/images/annotations-clang-tidy.png rename to docs/docs/images/annotations-clang-tidy.png diff --git a/docs/src/images/comment.png b/docs/docs/images/comment.png similarity index 100% rename from docs/src/images/comment.png rename to docs/docs/images/comment.png diff --git a/docs/docs/images/favicon.ico b/docs/docs/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..c5de55cd16e9449f58639df02d7c2384c20eee8e GIT binary patch literal 165662 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 B_Dlc( literal 0 HcmV?d00001 diff --git a/docs/src/images/format-review.png b/docs/docs/images/format-review.png similarity index 100% rename from docs/src/images/format-review.png rename to docs/docs/images/format-review.png diff --git a/docs/src/images/format-suggestion.png b/docs/docs/images/format-suggestion.png similarity index 100% rename from docs/src/images/format-suggestion.png rename to docs/docs/images/format-suggestion.png diff --git a/docs/theme/favicon.png b/docs/docs/images/logo.png similarity index 100% rename from docs/theme/favicon.png rename to docs/docs/images/logo.png diff --git a/docs/src/images/step-summary.png b/docs/docs/images/step-summary.png similarity index 100% rename from docs/src/images/step-summary.png rename to docs/docs/images/step-summary.png diff --git a/docs/src/images/tidy-review.png b/docs/docs/images/tidy-review.png similarity index 100% rename from docs/src/images/tidy-review.png rename to docs/docs/images/tidy-review.png diff --git a/docs/src/index.md b/docs/docs/index.md similarity index 59% rename from docs/src/index.md rename to docs/docs/index.md index 9a774e8..627e8a7 100644 --- a/docs/src/index.md +++ b/docs/docs/index.md @@ -1,10 +1,10 @@ -[file-annotations]: cli.md#-a---file-annotations -[thread-comments]: cli.md#-g---thread-comments -[step-summary]: cli.md#-w---step-summary -[tidy-review]: cli.md#-d---tidy-review -[format-review]: cli.md#-m---format-review +[file-annotations]: cli.md#-a-file-annotations +[thread-comments]: cli.md#-g-thread-comments +[step-summary]: cli.md#-w-step-summary +[tidy-review]: cli.md#-d-tidy-review +[format-review]: cli.md#-m-format-review [format-annotations-preview]: images/annotations-clang-format.png [tidy-annotations-preview]: images/annotations-clang-tidy.png @@ -14,4 +14,9 @@ [format-review-preview]: images/format-review.png [format-suggestion-preview]: images/format-suggestion.png -{{#include ../../README.md:16:}} +[cli-doc]: cli.md + +{% + include "../../README.md" + start="" +%} diff --git a/docs/docs/node.md b/docs/docs/node.md new file mode 100644 index 0000000..19b522d --- /dev/null +++ b/docs/docs/node.md @@ -0,0 +1,6 @@ +# Node.js Binding + +{% + include "../../node-binding/README.md" + start="" +%} diff --git a/docs/src/permissions.md b/docs/docs/permissions.md similarity index 81% rename from docs/src/permissions.md rename to docs/docs/permissions.md index 2fab227..299a5cb 100644 --- a/docs/src/permissions.md +++ b/docs/docs/permissions.md @@ -4,7 +4,7 @@ This is an exhaustive list of required permissions organized by features. -> [!important] +> [!IMPORTANT] > The `GITHUB_TOKEN` environment variable should be supplied when running on a private repository. > Otherwise the runner does not not have the privileges needed for the features mentioned here. > @@ -15,8 +15,8 @@ This is an exhaustive list of required permissions organized by features. ## File Changes -When using [`--files-changed-only`](cli.md#-f---files-changed-only) or -[`--lines-changed-only`](cli.md#-l---lines-changed-only) to get the list +When using [`--files-changed-only`](cli.md#-f-files-changed-only) or +[`--lines-changed-only`](cli.md#-l-lines-changed-only) to get the list of file changes for a CI event, the following permissions are needed: ### Push @@ -51,7 +51,7 @@ the repository is not checked out before running cpp-linter. ## Thread Comments -The [`--thread-comments`](cli.md#-g---thread-comments) feature requires the following permissions: +The [`--thread-comments`](cli.md#-g-thread-comments) feature requires the following permissions: ### Push @@ -78,7 +78,7 @@ For [`pull_request` events][pr-events]. ## Pull Request Reviews -The [`tidy-review`](cli.md#-d---tidy-review), [`format-review`](cli.md#-m---format-review), and [`passive-reviews`](cli.md#-r---passive-reviews) features require the following permissions: +The [`tidy-review`](cli.md#-d-tidy-review), [`format-review`](cli.md#-m-format-review), and [`passive-reviews`](cli.md#-r-passive-reviews) features require the following permissions: ```yaml permissions: diff --git a/docs/src/pr-review-caveats.md b/docs/docs/pr-review-caveats.md similarity index 95% rename from docs/src/pr-review-caveats.md rename to docs/docs/pr-review-caveats.md index 26d0f98..955bf33 100644 --- a/docs/src/pr-review-caveats.md +++ b/docs/docs/pr-review-caveats.md @@ -5,12 +5,12 @@ [hiding a comment]: https://docs.github.com/en/communities/moderating-comments-and-conversations/managing-disruptive-comments#hiding-a-comment [resolve a conversation]: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request#resolving-conversations -[tidy-review]: cli.md#-d---tidy-review -[format-review]: cli.md#-m---format-review -[lines-changed-only]: cli.md#-l---lines-changed-only -[style]: cli.md#-s---style +[tidy-review]: cli.md#-d-tidy-review +[format-review]: cli.md#-m-format-review +[lines-changed-only]: cli.md#-l-lines-changed-only +[style]: cli.md#-s-style -> [!note] +> [!NOTE] > This information is specific to GitHub Pull Requests (often abbreviated as "PR"). While the Pull Request review feature has been diligently tested, there are still some caveats to @@ -23,7 +23,7 @@ By default, the bot cannot approve Pull Request changes, only request more chang This will show as a warning in the workflow logs if the given token (set to the environment variable `GITHUB_TOKEN`) isn't configured with the proper permissions. -> [!important] +> [!IMPORTANT] > Refer to the GitHub documentation for [repository settings][] or [organization settings][] > about adjusting the required permissions for GitHub Actions's `secrets.GITHUB_TOKEN`. > @@ -50,7 +50,7 @@ Clang-tidy and clang-format suggestions are shown in 1 Pull Request review. Also, the outdated review's summary comment is not automatically hidden. To reduce the Pull Request's thread noise, users interaction is required. -> [!important] +> [!IMPORTANT] > Refer to GitHub's documentation about [hiding a comment][]. > Hiding a Pull Request review's summary comment will not resolve the suggestions in the diff. > Please also refer to [resolve a conversation][] to collapse outdated or duplicate suggestions @@ -58,7 +58,7 @@ Clang-tidy and clang-format suggestions are shown in 1 Pull Request review. GitHub REST API does not provide a way to hide comments or mark review suggestions as resolved. -> [!tip] +> [!TIP] > We do support an environment variable named `CPP_LINTER_PR_REVIEW_SUMMARY_ONLY`. > If the variable is set to `true`, then the review only contains a summary comment > with no suggestions posted in the diff. diff --git a/docs/docs/python.md b/docs/docs/python.md new file mode 100644 index 0000000..87b2a73 --- /dev/null +++ b/docs/docs/python.md @@ -0,0 +1,6 @@ +# Python Binding + +{% + include "../../py-binding/README.md" + start="" +%} diff --git a/docs/docs/stylesheets/extra.css b/docs/docs/stylesheets/extra.css new file mode 100644 index 0000000..abd602f --- /dev/null +++ b/docs/docs/stylesheets/extra.css @@ -0,0 +1,241 @@ +th { + background-color: var(--md-default-fg-color--lightest); +} + +.md-header { + background-color: #4051b5; +} + +.md-typeset .admonition.important, .md-typeset details.important { + border-color: #00b8d4; +} + +.md-typeset .important > .admonition-title::before, .md-typeset .important > summary::before { + background-color: #00b8d4; + -webkit-mask-image: var(--md-admonition-icon--info); + mask-image: var(--md-admonition-icon--info); +} + +.md-typeset .important > .admonition-title, .md-typeset .important > summary { + background-color: #00b8d41a; +} + +@keyframes heart { + + 0%, + 40%, + 80%, + to { + transform: scale(1) + } + + 20%, + 60% { + transform: scale(1.15) + } +} + +.md-typeset .mdx-heart { + animation: heart 1s infinite +} + +.md-typeset .mdx-badge { + font-size: .85em +} + +.md-typeset .mdx-badge--heart { + color: #ff4281; +} + +.md-typeset .mdx-badge--heart.twemoji { + animation: heart 1s infinite +} + +.md-typeset .mdx-badge--right { + float: right; + margin-left: .35em +} + +[dir=ltr] .md-typeset .mdx-badge__icon { + border-top-left-radius: .1rem +} + +[dir=rtl] .md-typeset .mdx-badge__icon { + border-top-right-radius: .1rem +} + +[dir=ltr] .md-typeset .mdx-badge__icon { + border-bottom-left-radius: .1rem +} + +[dir=rtl] .md-typeset .mdx-badge__icon { + border-bottom-right-radius: .1rem +} + +.md-typeset .mdx-badge__icon { + background: var(--md-accent-fg-color--transparent); + padding: .2rem +} + +.md-typeset .mdx-badge__icon:last-child { + border-radius: .1rem +} + +[dir=ltr] .md-typeset .mdx-badge__text { + border-top-right-radius: .1rem +} + +[dir=rtl] .md-typeset .mdx-badge__text { + border-top-left-radius: .1rem +} + +[dir=ltr] .md-typeset .mdx-badge__text { + border-bottom-right-radius: .1rem +} + +[dir=rtl] .md-typeset .mdx-badge__text { + border-bottom-left-radius: .1rem +} + +.md-typeset .mdx-badge__text { + box-shadow: 0 0 0 1px inset var(--md-accent-fg-color--transparent); + padding: .2rem .3rem +} + +.md-typeset .mdx-social { + height: min(27rem, 80vw); + position: relative +} + +.md-typeset .mdx-social:hover .mdx-social__image { + background-color: #e4e4e40d +} + +.md-typeset .mdx-social__layer { + margin-top: 4rem; + position: absolute; + transform-style: preserve-3d; + transition: .25s cubic-bezier(.7, 0, .3, 1) +} + +.md-typeset .mdx-social__layer:hover .mdx-social__label { + opacity: 1 +} + +.md-typeset .mdx-social__layer:hover .mdx-social__image { + background-color: #7f7f7ffc +} + +.md-typeset .mdx-social__layer:hover~.mdx-social__layer { + opacity: 0 +} + +.md-typeset .mdx-social__image { + box-shadow: -.25rem .25rem .5rem #0000000d; + transform: rotate(-40deg) skew(15deg, 15deg) scale(.7); + transition: all .25s +} + +.md-typeset .mdx-social__image img { + display: block +} + +.md-typeset .mdx-social__label { + background-color: var(--md-default-fg-color--light); + color: var(--md-default-bg-color); + display: block; + opacity: 0; + padding: .2rem .4rem; + position: absolute; + transition: all .25s +} + +.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(6) { + transform: translateY(-30px) +} + +.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(5) { + transform: translateY(-20px) +} + +.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(4) { + transform: translateY(-10px) +} + +.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(3) { + transform: translateY(0) +} + +.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(2) { + transform: translateY(10px) +} + +.md-typeset .mdx-social:hover .mdx-social__layer:first-child { + transform: translateY(20px) +} + +.md-typeset .mdx-social:hover .mdx-social__layer:nth-child(0) { + transform: translateY(30px) +} + +.md-banner { + color: var(--md-footer-fg-color--lighter) +} + +.md-banner strong { + white-space: nowrap +} + +.md-banner a, +.md-banner strong { + color: var(--md-footer-fg-color) +} + +.md-banner a:focus, +.md-banner a:hover { + color: currentcolor +} + +.md-banner a:focus .twemoji, +.md-banner a:hover .twemoji { + background-color: var(--md-footer-fg-color); + box-shadow: none +} + +.md-banner .twemoji { + border-radius: 100%; + box-shadow: inset 0 0 0 .05rem currentcolor; + display: inline-block; + height: 1.2rem; + padding: .25rem; + transition: all .25s; + vertical-align: bottom; + width: 1.2rem +} + +.md-banner .twemoji svg { + display: block; + max-height: none +} + +/* annotation buttons' pulse animation */ +a.md-annotation__index { + border-radius: 2.2ch; +} + +@keyframes pulse { + 0% { + box-shadow: 0 0 0 0 var(--md-accent-fg-color); + transform: scale(.95) + } + + 75% { + box-shadow: 0 0 0 .625em transparent; + transform: scale(1) + } + + to { + box-shadow: 0 0 0 0 transparent; + transform: scale(.95) + } +} diff --git a/docs/gen_cli_doc.py b/docs/gen_cli_doc.py new file mode 100644 index 0000000..6011987 --- /dev/null +++ b/docs/gen_cli_doc.py @@ -0,0 +1,36 @@ +from pathlib import Path +from typing import Dict, Any +import yaml +import mkdocs_gen_files +from cli_gen import generate_cli_doc + +FILENAME = "cli.md" + +VERSION_DISCLAIMER = """ +!!! quote "v1.x vs v2.x" + + - v1.x was written in pure python + - v2.x was written in rust (with python and node.js bindings) + + Version 2.x is intended to be backwards compatible, but a complete + rewrite in rust prompted a major version bump. + + The minimum versions (badges) specified here hyperlink to different repositories. + Anything established in v2.x will correspond to the rust project. + Anything established in v1.4.6 or later (before v2.0.0) will correspond to the pure + python project. Anything established before v1.4.6 will correspond to pure python + sources in the cpp-linter-action project. + +""" + +with mkdocs_gen_files.open(FILENAME, "w") as io_doc: + options_versions = Path(__file__).parent / "cli.yml" + versions: Dict[str, Any] = yaml.safe_load(options_versions.read_bytes()) + + print("# Command Line Interface\n", file=io_doc) + print(VERSION_DISCLAIMER, file=io_doc) + doc = generate_cli_doc(versions["inputs"]) + # print(doc) + print(doc, file=io_doc) + +mkdocs_gen_files.set_edit_path(FILENAME, "gen_io_doc.py") diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml new file mode 100644 index 0000000..591606b --- /dev/null +++ b/docs/mkdocs.yml @@ -0,0 +1,98 @@ +site_name: Cpp-Linter +site_description: "Documentation for the cpp-linter package." +site_url: "https://cpp-linter.github.io/cpp-linter-rs" +repo_url: "https://github.com/cpp-linter/cpp-linter-rs" +repo_name: "cpp-linter/cpp-linter-rs" +edit_uri: "edit/main/docs/docs/" +nav: + - index.md + - cli.md + - pr-review-caveats.md + - permissions.md + - python.md + - node.md + - changelog.md + +theme: + name: material + features: + - navigation.top + - content.tabs.link + - content.tooltips + - content.code.annotate + - content.code.copy + - content.action.view + - content.action.edit + - navigation.footer + - search.suggest + - search.share + - navigation.tracking + - toc.follow + logo: images/logo.png + favicon: images/favicon.ico + icon: + repo: fontawesome/brands/github + palette: + # Palette toggle for automatic mode + - media: "(prefers-color-scheme)" + primary: blue + accent: cyan + toggle: + icon: material/brightness-auto + name: Switch to light mode + + # Palette toggle for light mode + - media: "(prefers-color-scheme: light)" + scheme: default + primary: blue + accent: cyan + toggle: + icon: material/lightbulb-outline + name: Switch to dark mode + + # Palette toggle for dark mode + - media: "(prefers-color-scheme: dark)" + scheme: slate + primary: blue + accent: cyan + toggle: + icon: material/lightbulb + name: Switch to system preference +extra: + social: + - icon: fontawesome/brands/github + link: https://github.com/cpp-linter/cpp-linter + +extra_css: + - stylesheets/extra.css + +plugins: + - search + - include-markdown + - gen-files: + scripts: + - gen_cli_doc.py + +markdown_extensions: + - pymdownx.superfences + - pymdownx.tabbed: + alternate_style: true + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - toc: + permalink: true + - pymdownx.highlight: + linenums_style: pymdownx-inline + - pymdownx.inlinehilite + - pymdownx.snippets: + check_paths: true + - pymdownx.tasklist: + custom_checkbox: true + - attr_list + - admonition + - markdown_gfm_admonition + +# Hooks +hooks: + - badge_hook.py diff --git a/docs/pyproject.toml b/docs/pyproject.toml new file mode 100644 index 0000000..d2a7da3 --- /dev/null +++ b/docs/pyproject.toml @@ -0,0 +1,17 @@ +[build-system] +requires = ["maturin>=1.4,<2.0"] +build-backend = "maturin" + +[project] +name = "cli-gen" +description = "Generate cpp-linter CLI doc from rust src." +version = "0.0.0" +readme = "README.md" +license = {text = "MIT License"} +requires-python = ">=3.7" +authors = [ + { name = "Brendan Doherty", email = "2bndy5@gmail.com" }, +] + +[tool.maturin] +features = ["pyo3/extension-module"] diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000..9024916 --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1,6 @@ +markdown-gfm-admonition==0.1.1 +mkdocs==1.6.1 +mkdocs-gen-files==0.5.0 +mkdocs-include-markdown-plugin==6.2.2 +mkdocs-material==9.5.39 +pyyaml==6.0.2 diff --git a/docs/src/CHANGELOG.md b/docs/src/CHANGELOG.md deleted file mode 100644 index ce53563..0000000 --- a/docs/src/CHANGELOG.md +++ /dev/null @@ -1,3 +0,0 @@ - - -{{#include ../../CHANGELOG.md}} diff --git a/docs/src/SUMMARY.md b/docs/src/SUMMARY.md deleted file mode 100644 index c240a27..0000000 --- a/docs/src/SUMMARY.md +++ /dev/null @@ -1,11 +0,0 @@ -# Summary - - - -- [Introduction](./index.md) -- [Command Line Interface](./cli.md) -- [Token Permissions](./permissions.md) -- [Pull Request Review Caveats](./pr-review-caveats.md) -- [Python Binding](./python.md) -- [Node.js Binding](./node.md) -- [Change Log](./CHANGELOG.md) diff --git a/docs/src/lib.rs b/docs/src/lib.rs new file mode 100644 index 0000000..9ef7a3e --- /dev/null +++ b/docs/src/lib.rs @@ -0,0 +1,125 @@ +//! This exposes a function in python, so a mkdocs plugin can use it to generates the CLI document. +//! For actual library/binary source code look in cpp-linter folder. +use std::collections::HashMap; + +use cpp_linter::cli; +use pyo3::{exceptions::PyValueError, prelude::*}; + +const GROUPS_ORDER: [&str; 5] = [ + "General options", + "Source options", + "Clang-format options", + "Clang-tidy options", + "Feedback options", +]; + +#[pyfunction] +fn generate_cli_doc(metadata: HashMap>>) -> PyResult { + let mut out = String::new(); + let mut command = cli::get_arg_parser(); + out.push_str( + format!( + "```text title=\"Usage\"\n{}\n```\n", + command + .render_usage() + .to_string() + .trim_start_matches("Usage: ") + ) + .as_str(), + ); + + out.push_str("\n## Commands\n"); + for cmd in command.get_subcommands() { + out.push_str(format!("\n### `{}`\n\n", cmd.get_name()).as_str()); + out.push_str( + format!( + "{}\n", + &cmd.get_about() + .ok_or(PyValueError::new_err(format!( + "{} command has no help message", + cmd.get_name() + )))? + .to_string() + .trim() + ) + .as_str(), + ); + } + + out.push_str("## Arguments\n"); + for arg in command.get_positionals() { + out.push_str(format!("\n### `{}`\n\n", arg.get_id().as_str()).as_str()); + if let Some(help) = arg.get_help() { + out.push_str(format!("{}\n", help.to_string().trim()).as_str()); + } + } + + // reorganize groups according to GROUPS_ORDER + let mut ordered = Vec::with_capacity(command.get_groups().count()); + for group in GROUPS_ORDER { + let group_obj = command + .get_groups() + .find(|arg_group| arg_group.get_id().as_str() == group) + .ok_or(PyValueError::new_err(format!( + "{} not found in command's groups", + group + )))?; + ordered.push(group_obj.to_owned()); + } + + for group in ordered { + out.push_str(format!("\n## {}\n", group.get_id()).as_str()); + for arg_id in group.get_args() { + let arg = command + .get_arguments() + .find(|a| *a.get_id() == *arg_id) + .ok_or(PyValueError::new_err(format!( + "arg {} in group {} not found in command", + arg_id.as_str(), + group.get_id().as_str() + )))?; + let long_name = arg.get_long().ok_or(PyValueError::new_err(format!( + "Failed to get long name of argument with id {}", + arg_id.as_str() + )))?; + out.push_str( + format!( + "\n### `-{}, --{}`\n\n", + arg.get_short().ok_or(PyValueError::new_err(format!( + "Failed to get short name for argument with id {}", + arg_id.as_str() + )))?, + long_name + ) + .as_str(), + ); + if let Some(map) = metadata.get(long_name) { + if let Some(val) = map.get("minimum-version") { + out.push_str(format!("\n", val).as_str()); + } + if let Some(val) = map.get("required-permission") { + out.push_str(format!("\n", val).as_str()); + } + if map.contains_key("experimental") { + out.push_str("\n"); + } + } + let default = arg.get_default_values(); + if let Some(default_value) = default.first() { + out.push_str(format!("\n\n", default_value).as_str()); + } else { + out.push('\n'); + } + if let Some(help) = &arg.get_help() { + out.push_str(format!("{}\n", help.to_string().trim()).as_str()); + } + } + } + Ok(out) +} + +#[pymodule] +pub fn cli_gen(m: &Bound<'_, PyModule>) -> PyResult<()> { + m.add_function(wrap_pyfunction!(generate_cli_doc, m)?)?; + Ok(()) +} diff --git a/docs/src/main.rs b/docs/src/main.rs deleted file mode 100644 index fcd99af..0000000 --- a/docs/src/main.rs +++ /dev/null @@ -1,203 +0,0 @@ -//! This is a preprocessor for mdbook that generates the CLI document. -//! For actual library/binary source code look in cpp-linter folder. - -extern crate clap; -use clap::{Arg, ArgMatches, Command}; -extern crate mdbook; -use mdbook::errors::Error; -use mdbook::preprocess::{CmdPreprocessor, Preprocessor}; -extern crate semver; -extern crate serde_json; -use semver::{Version, VersionReq}; -use std::io; -use std::process; - -extern crate cpp_linter; - -use cli_gen_lib::CliGen; - -pub fn make_app() -> Command { - Command::new("cli-gen") - .about("A mdbook preprocessor which generates a doc of CLI options") - .subcommand( - Command::new("supports") - .arg(Arg::new("renderer").required(true)) - .about("Check whether a renderer is supported by this preprocessor"), - ) -} - -fn handle_preprocessing(pre: &dyn Preprocessor) -> Result<(), Error> { - let (ctx, book) = CmdPreprocessor::parse_input(io::stdin())?; - - let book_version = Version::parse(&ctx.mdbook_version)?; - let version_req = VersionReq::parse(mdbook::MDBOOK_VERSION)?; - - if !version_req.matches(&book_version) { - eprintln!( - "Warning: The {} plugin was built against version {} of mdbook, \ - but we're being called from version {}", - pre.name(), - mdbook::MDBOOK_VERSION, - ctx.mdbook_version - ); - } - - let processed_book = pre.run(&ctx, book)?; - serde_json::to_writer(io::stdout(), &processed_book)?; - - Ok(()) -} - -fn handle_supports(pre: &dyn Preprocessor, sub_args: &ArgMatches) -> ! { - let renderer = sub_args - .get_one::("renderer") - .expect("Required argument"); - let supported = pre.supports_renderer(renderer); - - // Signal whether the renderer is supported by exiting with 1 or 0. - if supported { - process::exit(0); - } else { - process::exit(1); - } -} - -fn main() { - let matches = make_app().get_matches(); - - // Users will want to construct their own preprocessor here - let preprocessor = CliGen {}; - - if let Some(sub_args) = matches.subcommand_matches("supports") { - handle_supports(&preprocessor, sub_args); - } else if let Err(e) = handle_preprocessing(&preprocessor) { - eprintln!("{}", e); - process::exit(1); - } -} - -mod cli_gen_lib { - use std::path::PathBuf; - - use mdbook::book::Book; - use mdbook::preprocess::{Preprocessor, PreprocessorContext}; - - use cpp_linter::cli; - - pub struct CliGen; - - impl CliGen { - fn generate_cli(groups_order: &Option>) -> String { - let mut out = String::new(); - let command = cli::get_arg_parser(); - out.push_str(format!("\n{}\n\n", "# Command Line Interface").as_str()); - out.push_str("\n"); - out.push_str("\n## Commands\n"); - for cmd in command.get_subcommands() { - out.push_str(format!("\n### `{}`\n\n", cmd.get_name()).as_str()); - out.push_str( - format!("{}\n", &cmd.get_about().unwrap().to_string().trim()).as_str(), - ); - } - out.push_str("## Arguments\n"); - for arg in command.get_positionals() { - out.push_str(format!("\n### `{}`\n\n", arg.get_id().as_str()).as_str()); - if let Some(help) = arg.get_help() { - out.push_str(format!("{}\n", help.to_string().trim()).as_str()); - } - } - let arg_groups = if let Some(groups) = groups_order { - eprintln!("ordering groups into {:?}", groups); - let mut ordered = Vec::with_capacity(command.get_groups().count()); - for group in groups { - let mut group_obj = None; - for arg_group in command.get_groups() { - if arg_group.get_id().as_str() == group.as_str() { - group_obj = Some(arg_group.clone()); - } - } - ordered.push( - group_obj - .unwrap_or_else(|| panic!("{} not found in command's groups", group)), - ); - } - ordered - } else { - command.get_groups().map(|g| g.to_owned()).collect() - }; - for group in arg_groups { - out.push_str(format!("\n## {}\n", group.get_id()).as_str()); - for arg_id in group.get_args() { - let mut arg_match = command.get_arguments().filter(|a| *a.get_id() == *arg_id); - let arg = arg_match.next().unwrap_or_else(|| { - panic!( - "arg {} expected in group {}", - arg_id.as_str(), - group.get_id().as_str() - ) - }); - out.push_str( - format!( - "\n### `-{}, --{}`\n\n", - &arg.get_short().unwrap(), - &arg.get_long().unwrap() - ) - .as_str(), - ); - let default = arg.get_default_values(); - if !default.is_empty() { - out.push_str("
Default
"); - assert_eq!(default.len(), 1); - out.push_str( - format!("{:?}
\n\n", default.first().unwrap()) - .as_str(), - ); - } - if let Some(help) = &arg.get_help() { - out.push_str(format!("{}\n", help.to_string().trim()).as_str()); - } - } - } - out - } - } - - impl Preprocessor for CliGen { - fn name(&self) -> &str { - "cli-gen" - } - - fn run(&self, ctx: &PreprocessorContext, book: Book) -> mdbook::errors::Result { - let mut altered = book.clone(); - let groups_order = match ctx - .config - .get_preprocessor("cli-gen") - .unwrap() - .get("groups-order") - { - Some(val) => val.clone().as_array_mut().map(|v| { - v.iter_mut() - .map(|o| o.to_string().trim_matches('"').to_string()) - .collect() - }), - None => None, - }; - altered.for_each_mut(|item| { - if let mdbook::BookItem::Chapter(chap) = item { - if chap - .path - .clone() - .is_some_and(|p| p == PathBuf::from("cli.md")) - { - chap.content = CliGen::generate_cli(&groups_order); - } - } - }); - Ok(altered) - } - - fn supports_renderer(&self, renderer: &str) -> bool { - matches!(renderer, "html" | "markdown") - } - } -} diff --git a/docs/src/node.md b/docs/src/node.md deleted file mode 100644 index 2423e30..0000000 --- a/docs/src/node.md +++ /dev/null @@ -1,3 +0,0 @@ -# Node.js Binding - -{{#include ../../node-binding/README.md:2:}} diff --git a/docs/src/python.md b/docs/src/python.md deleted file mode 100644 index 870ca3e..0000000 --- a/docs/src/python.md +++ /dev/null @@ -1,3 +0,0 @@ -# Python Binding - -{{#include ../../py-binding/README.md:2:}} diff --git a/docs/theme/pagetoc.css b/docs/theme/pagetoc.css deleted file mode 100644 index eff428b..0000000 --- a/docs/theme/pagetoc.css +++ /dev/null @@ -1,63 +0,0 @@ -@media only screen { - main { - position: relative; - } - - .sidetoc { - margin-left: auto; - margin-right: auto; - } - - .pagetoc { - width: auto; - word-wrap: normal; - } - - .pagetoc a { - color: var(--sidebar-fg) !important; - display: block; - padding-left: 10px; - text-align: left; - text-decoration: none; - margin-block-start: 0.6em; - } - - .pagetoc a:hover, - .pagetoc a.active { - color: var(--sidebar-active) !important; - } - - .pagetoc .active { - color: var(--sidebar-active); - } - - .pagetoc .pagetoc-H2 { - padding-left: 20px; - } - - .pagetoc .pagetoc-H3 { - padding-left: 40px; - } - - .pagetoc .pagetoc-H4 { - padding-left: 60px; - } - - .pagetoc .pagetoc-H5 { - display: none; - } - - .pagetoc .pagetoc-H6 { - display: none; - } - - ol.chapter a { - color: var(--sidebar-fg); - text-decoration: none; - } - - ol.chapter a.active { - color: var(--sidebar-active); - text-decoration: none; - } -} diff --git a/docs/theme/pagetoc.js b/docs/theme/pagetoc.js deleted file mode 100644 index a9d7a91..0000000 --- a/docs/theme/pagetoc.js +++ /dev/null @@ -1,99 +0,0 @@ -let scrollTimeout; - -const listenActive = () => { - const elems = document.querySelector(".pagetoc").children; - [...elems].forEach((el) => { - el.addEventListener("click", () => { - clearTimeout(scrollTimeout); - [...elems].forEach((el) => el.classList.remove("active")); - el.classList.add("active"); - // Prevent scroll updates for a short period - // eslint-disable-next-line no-async-operation - scrollTimeout = setTimeout(() => { - scrollTimeout = null; - }, 100); // Adjust timing as needed - }); - }); -}; - -const getPagetoc = () => { - return document.querySelector(".pagetoc") || autoCreatePagetoc(); -}; - -const autoCreatePagetoc = () => { - const chapter = document.querySelector( - "body nav#sidebar.sidebar li.chapter-item.expanded a.active" - ); - const content = Object.assign(document.createElement("div"), { - className: "content-wrap", - }); - content.appendChild(chapter.cloneNode(true)); - const divAddedToc = Object.assign(document.createElement("div"), { - className: "sidetoc", - }); - const navAddedToc = Object.assign(document.createElement("nav"), { - className: "pagetoc", - }); - divAddedToc.appendChild(navAddedToc); - content.appendChild(divAddedToc); - chapter.replaceWith(content); - return document.querySelector(".pagetoc"); -}; - -const updateFunction = () => { - if (scrollTimeout) return; // Skip updates if within the cooldown period from a click - const headers = [...document.getElementsByClassName("header")]; - const scrolledY = window.scrollY; - - // Find the last header that is above the current scroll position - let headerOffsets = headers.filter((el) => scrolledY >= el.offsetTop); - const lastHeader = headerOffsets.reverse().shift(); - - const pagetocLinks = [...document.querySelector(".pagetoc").children]; - pagetocLinks.forEach((link) => link.classList.remove("active")); - - if (lastHeader) { - const activeLink = pagetocLinks.find( - (link) => lastHeader.href === link.href - ); - if (activeLink) activeLink.classList.add("active"); - } -}; -function getHeaderText(header) { - let text = header.textContent; - if (text === "") { - let sibling = header.nextSibling; - let maxIterations = 100; - while (sibling != null && maxIterations > 0) { - text += sibling.textContent; - sibling = sibling.nextSibling; - maxIterations--; - } - if (maxIterations === 0) { - console.warn( - "Possible circular reference in DOM when extracting header text" - ); - } - } - return text; -} - -const onLoad = () => { - const pagetoc = getPagetoc(); - var headers = [...document.getElementsByClassName("header")]; - headers.shift(); - headers.forEach((header) => { - const text = getHeaderText(header); - const link = Object.assign(document.createElement("a"), { - textContent: text, - href: header.href, - className: `pagetoc-${header.parentElement.tagName}`, - }); - pagetoc.appendChild(link); - }); - updateFunction(); - listenActive(); - window.addEventListener("scroll", updateFunction); -}; - -window.addEventListener("load", onLoad); diff --git a/justfile b/justfile index 000d796..1601b35 100644 --- a/justfile +++ b/justfile @@ -34,12 +34,12 @@ lcov: # serve docs [group("docs")] docs open='': - mdbook serve docs {{ open }} + mkdocs serve --config-file docs/mkdocs.yml {{ open }} # build docs [group("docs")] -docs-build open='': - mdbook build docs {{ open }} +docs-build: + mkdocs build --config-file docs/mkdocs.yml # rust docs [group("docs")] diff --git a/node-binding/README.md b/node-binding/README.md index a71f6bd..2452c35 100644 --- a/node-binding/README.md +++ b/node-binding/README.md @@ -1,5 +1,5 @@ # cpp-linter - + The node.js binding for the [cpp-linter-rs][this] rust project (built using [napi-rs](https://napi.rs) and [yarn](https://yarnpkg.com)). diff --git a/py-binding/README.md b/py-binding/README.md index 2eacd73..45fcb59 100644 --- a/py-binding/README.md +++ b/py-binding/README.md @@ -1,5 +1,5 @@ # cpp-linter - + The python binding for the [cpp-linter-rs][this] rust project (built using [pyo3](https://pyo3.rs) and [maturin]). From 57ff2288df99b4dd8a6adae850b7396d5b00bc71 Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Sun, 29 Sep 2024 10:55:08 -0700 Subject: [PATCH 2/5] Update docs/gen_cli_doc.py Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docs/gen_cli_doc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/gen_cli_doc.py b/docs/gen_cli_doc.py index 6011987..3378cf5 100644 --- a/docs/gen_cli_doc.py +++ b/docs/gen_cli_doc.py @@ -33,4 +33,4 @@ # print(doc) print(doc, file=io_doc) -mkdocs_gen_files.set_edit_path(FILENAME, "gen_io_doc.py") +mkdocs_gen_files.set_edit_path(FILENAME, "gen_cli_doc.py") From 83782a661643d607e66e6eef39ff07246098ce98 Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Sun, 29 Sep 2024 11:13:15 -0700 Subject: [PATCH 3/5] Update comment in docs/src/lib.rs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docs/src/lib.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/lib.rs b/docs/src/lib.rs index 9ef7a3e..20e0cce 100644 --- a/docs/src/lib.rs +++ b/docs/src/lib.rs @@ -1,4 +1,4 @@ -//! This exposes a function in python, so a mkdocs plugin can use it to generates the CLI document. +//! This exposes a function in Python, so an mkdocs plugin can use it to generate the CLI document. //! For actual library/binary source code look in cpp-linter folder. use std::collections::HashMap; From 459ae239878a42dd42fc0c8cc8cfdd67ac4ed8fc Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Sun, 29 Sep 2024 11:14:10 -0700 Subject: [PATCH 4/5] update name of CI job's step --- .github/workflows/build-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 7efcd44..c416df0 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -57,7 +57,7 @@ jobs: run: | pip install -r docs/requirements.txt pip install --force-reinstall -v docs/ - - name: Build book + - name: Build docs working-directory: docs run: mkdocs build - name: Upload docs build as artifact From 2184391f8604bfb921f3c9dc16d0ccc6e7016a2b Mon Sep 17 00:00:00 2001 From: Brendan <2bndy5@gmail.com> Date: Sun, 29 Sep 2024 11:33:28 -0700 Subject: [PATCH 5/5] add to social icons --- docs/mkdocs.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 591606b..a968d56 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -62,6 +62,12 @@ extra: social: - icon: fontawesome/brands/github link: https://github.com/cpp-linter/cpp-linter + - icon: fontawesome/brands/python + link: https://pypi.org/project/cpp-linter/ + - icon: fontawesome/brands/npm + link: https://www.npmjs.com/package/@cpp-linter/cpp-linter + - icon: simple/rust + link: https://crates.io/crates/cpp-linter extra_css: - stylesheets/extra.css