From 4fc61b23989f13ee0262d368336ae23734e57dd3 Mon Sep 17 00:00:00 2001 From: Benedikt Peetz Date: Fri, 3 May 2024 16:40:06 +0200 Subject: [PATCH] build(treewide): Update tooling to be ready for the first release --- .envrc | 21 +--- .licensure.yml | 108 ++++++++++----------- Cargo.lock | 7 ++ Cargo.toml | 22 +---- LICENSE.spdx | 6 +- README.md | 10 ++ cog.toml | 42 ++------ docs-header.html => docs/docs-header.html | 0 flake.lock | 68 ++++++++----- flake.nix | 111 ++++++++++------------ scripts/renew_copyright_header.sh | 92 ++++++++++++++++++ scripts/update_tests.sh | 108 +++++++++++++++++++++ src/tests.rs | 21 ---- treefmt.nix | 73 ++++++++++++++ update.sh | 107 +-------------------- 15 files changed, 458 insertions(+), 338 deletions(-) create mode 100644 Cargo.lock create mode 100644 README.md rename docs-header.html => docs/docs-header.html (100%) create mode 100755 scripts/renew_copyright_header.sh create mode 100755 scripts/update_tests.sh create mode 100644 treefmt.nix diff --git a/.envrc b/.envrc index ff4c2f7..3bc1085 100644 --- a/.envrc +++ b/.envrc @@ -1,25 +1,8 @@ -# Copyright (C) 2023 The Trinitrix Project -# -# This file is part of the Trinitry crate for Trinitrix. -# -# Trinitry is free software: you can redistribute it and/or modify -# it under the terms of the Lesser GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# and the Lesser GNU General Public License along with this program. -# If not, see . - - use flake || use nix watch_file flake.nix +PATH_add ./scripts + if on_git_branch; then echo && git status --short --branch && echo && git fetch --verbose diff --git a/.licensure.yml b/.licensure.yml index c67c9b2..b2722f1 100644 --- a/.licensure.yml +++ b/.licensure.yml @@ -2,15 +2,13 @@ # Regexes which if matched by a file path will always be excluded from # getting a license header excludes: - - \.gitignore - .*lock - \.git/.* - - \.licensure\.yml - - README.* - LICENSE.spdx + - LICENSE - COPYING - COPYING.LESSER - - .*\.(md|rst|txt|pdf) + - .*\.(rst|txt|pdf) # Definition of the licenses used on this project and to what files # they should apply. # @@ -25,29 +23,29 @@ licenses: # # If "any" is provided all files will match this license. - files: any - # - # The license identifier, a list of common identifiers can be - # found at: https://spdx.org/licenses/ but existence of the ident - # in this list it is not enforced unless auto_template is set to - # true. + # + # The license identifier, a list of common identifiers can be + # found at: https://spdx.org/licenses/ but existence of the ident + # in this list it is not enforced unless auto_template is set to + # true. ident: LGPL-3.0-or-later - # - # A list of authors who hold copyright over these files + # + # A list of authors who hold copyright over these files authors: - # Provide either your full name or company name for copyright purposes - - name: The Trinitrix Project - # Optionally provide email for copyright purposes - email: "soispha@vhack.eu, antifallobst@systemausfall.org" - # - # The template that will be rendered to generate the header before - # comment characters are applied. Available variables are: - # - [year]: substituted with the current year. - # - [name of author]: Substituted with name of the author and email - # if provided. If email is provided the output appears as Full - # Name . If multiple authors are provided the - # list is concatenated together with commas. + - name: "The Trinitrix Project" + email: "bpeetz@b-peetz.de, antifallobst@systemausfall.org" + + # The template that will be rendered to generate the header before + # comment characters are applied. Available variables are: + # - [year]: substituted with the current year. + # - [name of author]: Substituted with name of the author and email + # if provided. If email is provided the output appears as Full + # Name . If multiple authors are provided the + # list is concatenated together with commas. template: | - Copyright (C) [year] [name of author] + Copyright (C) 2024 - [year]: + [name of author] + SPDX-License-Identifier: LGPL-3.0-or-later This file is part of the Trinitry crate for Trinitrix. @@ -64,23 +62,24 @@ licenses: You should have received a copy of the GNU General Public License and the Lesser GNU General Public License along with this program. If not, see . - # - # If auto_template is true then template is ignored and the SPDX - # API will be queried with the ident value to automatically - # determine the license header template. auto_template works best - # with licenses that have a standardLicenseHeader field defined in - # their license info JSON, if it is not then we will use the full - # licenseText to generate the header which works fine for short - # licenses like MIT but can be quite lengthy for other licenses - # like BSD-4-Clause. The above default template is valid for most - # licenses and is recommended for MIT, and BSD licenses. Common - # licenses that work well with the auto_template feature are GPL - # variants, and the Apache 2.0 license. - # - # Important Note: this means the ident must be a valid SPDX identifier - # auto_template: true - # - # If true try to detect the text wrapping of the template, and unwrap it + + + # If auto_template is true then template is ignored and the SPDX + # API will be queried with the ident value to automatically + # determine the license header template. auto_template works best + # with licenses that have a standardLicenseHeader field defined in + # their license info JSON, if it is not then we will use the full + # licenseText to generate the header which works fine for short + # licenses like MIT but can be quite lengthy for other licenses + # like BSD-4-Clause. The above default template is valid for most + # licenses and is recommended for MIT, and BSD licenses. Common + # licenses that work well with the auto_template feature are GPL + # variants, and the Apache 2.0 license. + # + # Important Note: this means the ident must be a valid SPDX identifier + # auto_template: true + + # If true try to detect the text wrapping of the template, and unwrap it unwrap_text: false # Define type of comment characters to apply based on file extensions. @@ -103,7 +102,7 @@ comments: commenter: type: line comment_char: "//" - trailing_lines: 2 + trailing_lines: 1 - extensions: - rs @@ -111,6 +110,7 @@ comments: - css - cpp - c + - h # This demonstrates a block commenter configuration. A block # commenter type will add start_block_char as the first character # in the license header and add end_block_char as the last character @@ -125,15 +125,16 @@ comments: start_block_char: "/*\n" end_block_char: "*/\n" per_line_char: "*" - trailing_lines: 2 + trailing_lines: 1 - # In this case extension is singular and a single string extension is provided. - - extension: html + - extension: + - html + - md commenter: type: block start_block_char: "\n" - trailing_lines: 2 + trailing_lines: 1 - extensions: - el @@ -141,16 +142,15 @@ comments: commenter: type: line comment_char: ";;;" - trailing_lines: 2 + trailing_lines: 1 - extensions: - - ebnf + - tex + - bib commenter: - type: block - start_block_char: "#(*\n" - end_block_char: "#*)\n" - per_line_char: "#" - trailing_lines: 2 + type: line + comment_char: "%" + trailing_lines: 1 # The extension string "any" is special and so will match any file # extensions. Commenter configurations are always checked in the @@ -164,4 +164,4 @@ comments: commenter: type: line comment_char: '#' - trailing_lines: 2 + trailing_lines: 1 diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..9d8cd04 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "TODO" +version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index add7d84..c322ad1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,24 +1,6 @@ -# Copyright (C) 2023 The Trinitrix Project -# -# This file is part of the Trinitry crate for Trinitrix. -# -# Trinitry is free software: you can redistribute it and/or modify -# it under the terms of the Lesser GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# and the Lesser GNU General Public License along with this program. -# If not, see . - - [package] name = "trinitry" +description = "A very simple programming language, used to map functions to commands" version = "0.1.0" edition = "2021" @@ -30,4 +12,4 @@ pest_derive = {version = "2.7.5", features = ["grammar-extras"]} # The header imports katex, a js latex parser, into the doc comments [package.metadata.docs.rs] -rustdoc-args = [ "--html-in-header", "./docs-header.html" ] +rustdoc-args = [ "--html-in-header", "./docs/docs-header.html" ] diff --git a/LICENSE.spdx b/LICENSE.spdx index 0fb14c9..1537ff9 100644 --- a/LICENSE.spdx +++ b/LICENSE.spdx @@ -1,7 +1,7 @@ SPDXVersion: SPDX-2.3 DataLicense: CC0-1.0 -Creator: trinitrix contributers -PackageName: Trinitrix-trinitry -PackageOriginator: trinitrix contributers +Creator: flake template init +PackageName: trinitry +PackageOriginator: Benedikt Peetz PackageHomePage: https://git.nerdcult.net/trinitrix/trinitry PackageLicenseDeclared: LGPL-3.0-or-later diff --git a/README.md b/README.md new file mode 100644 index 0000000..0b7cad6 --- /dev/null +++ b/README.md @@ -0,0 +1,10 @@ +# Trinitry + +> A very simple programming language, used to map functions to commands + +## Licence + +This program is free software: you can redistribute it and/or modify it +under the terms of the Lesser GNU General Public License as published +by the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. diff --git a/cog.toml b/cog.toml index 0a5c6a9..6bc1795 100644 --- a/cog.toml +++ b/cog.toml @@ -1,47 +1,25 @@ -# Copyright (C) 2023 The Trinitrix Project -# -# This file is part of the Trinitry crate for Trinitrix. -# -# Trinitry is free software: you can redistribute it and/or modify -# it under the terms of the Lesser GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# and the Lesser GNU General Public License along with this program. -# If not, see . - - tag_prefix = "v" -branch_whitelist = [ "prime" ] +branch_whitelist = ["main", "prime"] ignore_merge_commits = false -[commit_types] - pre_bump_hooks = [ - "licensur -p -i" # update the license header in each file - "nix build", # verify the project builds - "cargo fmt --all" # format - "cargo set-version {{version}}", # bump version in Cargo.toml + "nix flake check", # verify the project builds + "./scripts/renew_copyright_header.sh", # update the license header in each file + "cargo set-version {{version}}", # bump version in Cargo.toml + "nix fmt", # format ] post_bump_hooks = [ - "git push", - "cargo publish", - "git push origin v{{version}}", # push the new tag to origin + "git push", + "cargo publish", + "git push origin v{{version}}", # push the new tag to origin ] [bump_profiles] [changelog] path = "NEWS.md" +template = "remote" remote = "git.nerdcult.net" repository = "trinitry" owner = "trinitrix" -authors = [ - { signature = "Soispha", username = "soispha" }, -] +authors = [{ signature = "Benedikt Peetz", username = "soispha" }] diff --git a/docs-header.html b/docs/docs-header.html similarity index 100% rename from docs-header.html rename to docs/docs-header.html diff --git a/flake.lock b/flake.lock index ecbf802..ea926e5 100644 --- a/flake.lock +++ b/flake.lock @@ -7,11 +7,11 @@ ] }, "locked": { - "lastModified": 1703089493, - "narHash": "sha256-WUjYqUP/Lhhop9+aiHVFREgElunx1AHEWxqMT8ePfzo=", + "lastModified": 1711681752, + "narHash": "sha256-LEg6/dmEFxx6Ygti5DO9MOhGNpyB7zdxdWtzv/FCTXk=", "owner": "ipetkov", "repo": "crane", - "rev": "2a5136f14a9ac93d9d370d64a36026c5de3ae8a4", + "rev": "ada0fb4dcce4561acb1eb17c59b7306d9d4a95f3", "type": "github" }, "original": { @@ -38,14 +38,16 @@ }, "flake-utils": { "inputs": { - "systems": "systems" + "systems": [ + "systems" + ] }, "locked": { - "lastModified": 1701680307, - "narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=", + "lastModified": 1710146030, + "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", "owner": "numtide", "repo": "flake-utils", - "rev": "4022d587cbbfd70fe950c1e2083a02621806a725", + "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", "type": "github" }, "original": { @@ -56,16 +58,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1703349974, - "narHash": "sha256-BcR1wW63W4baNtWbpg25d/mt0DVkEBIFssAY9JPNpZg=", - "owner": "soispha", + "lastModified": 1711715736, + "narHash": "sha256-9slQ609YqT9bT/MNX9+5k5jltL9zgpn36DpFB7TkttM=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "7e33c3c5db1c69a50efc2143ffa53539e8b4c0ed", + "rev": "807c549feabce7eddbf259dbdcec9e0600a0660d", "type": "github" }, "original": { - "owner": "soispha", - "ref": "licensure", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } @@ -76,7 +78,9 @@ "flake-compat": "flake-compat", "flake-utils": "flake-utils", "nixpkgs": "nixpkgs", - "rust-overlay": "rust-overlay" + "rust-overlay": "rust-overlay", + "systems": "systems", + "treefmt-nix": "treefmt-nix" } }, "rust-overlay": { @@ -89,11 +93,11 @@ ] }, "locked": { - "lastModified": 1703297543, - "narHash": "sha256-d4QlzcoSNzb/iZheWtjOyRxoBSaLETSpViENGEkxv9g=", + "lastModified": 1711851236, + "narHash": "sha256-EJ03x3N9ihhonAttkaCrqxb0djDq3URCuDpmVPbNZhA=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "fc77c8b416b1537522d30c710baaaaebf769f816", + "rev": "f258266af947599e8069df1c2e933189270f143a", "type": "github" }, "original": { @@ -104,16 +108,36 @@ }, "systems": { "locked": { - "lastModified": 1681028828, - "narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=", + "lastModified": 1680978846, + "narHash": "sha256-Gtqg8b/v49BFDpDetjclCYXm8mAnTrUzR0JnE2nv5aw=", "owner": "nix-systems", - "repo": "default", - "rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e", + "repo": "x86_64-linux", + "rev": "2ecfcac5e15790ba6ce360ceccddb15ad16d08a8", "type": "github" }, "original": { "owner": "nix-systems", - "repo": "default", + "repo": "x86_64-linux", + "type": "github" + } + }, + "treefmt-nix": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1711803027, + "narHash": "sha256-Qic3OvsVLpetchzaIe2hJqgliWXACq2Oee6mBXa/IZQ=", + "owner": "numtide", + "repo": "treefmt-nix", + "rev": "1810d51a015c1730f2fe05a255258649799df416", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "treefmt-nix", "type": "github" } } diff --git a/flake.nix b/flake.nix index 1e6fbad..ac08cbc 100644 --- a/flake.nix +++ b/flake.nix @@ -1,32 +1,14 @@ -# Copyright (C) 2023 The Trinitrix Project -# -# This file is part of the Trinitry crate for Trinitrix. -# -# Trinitry is free software: you can redistribute it and/or modify -# it under the terms of the Lesser GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# and the Lesser GNU General Public License along with this program. -# If not, see . - - { - description = "A very simple programming language used to map functions to commands"; - inputs = { - # nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - nixpkgs.url = "github:soispha/nixpkgs/licensure"; + description = "A very simple programming language, used to map functions to commands"; - # inputs for following - flake-compat = { - url = "github:edolstra/flake-compat"; - flake = false; + inputs = { + nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; + + treefmt-nix = { + url = "github:numtide/treefmt-nix"; + inputs = { + nixpkgs.follows = "nixpkgs"; + }; }; crane = { @@ -35,10 +17,6 @@ nixpkgs.follows = "nixpkgs"; }; }; - flake-utils = { - url = "github:numtide/flake-utils"; - inputs = {}; - }; rust-overlay = { url = "github:oxalica/rust-overlay"; inputs = { @@ -46,12 +24,29 @@ flake-utils.follows = "flake-utils"; }; }; + + # inputs for following + systems = { + url = "github:nix-systems/x86_64-linux"; # only evaluate for this system + }; + flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + flake-utils = { + url = "github:numtide/flake-utils"; + inputs = { + systems.follows = "systems"; + }; + }; }; outputs = { + self, nixpkgs, - crane, flake-utils, + treefmt-nix, + crane, rust-overlay, ... }: @@ -62,54 +57,44 @@ }; nightly = false; - rust = + rust_minimal = if nightly - then - (pkgs.rust-bin.selectLatestNightlyWith (toolchain: - toolchain.default)) - .override { - extensions = ["rustc-codegen-cranelift-preview"]; - } - else pkgs.rust-bin.stable.latest.default; - rust_min = - if nightly - then - (pkgs.rust-bin.selectLatestNightlyWith (toolchain: - toolchain.minimal)) - .override { - extensions = ["rustc-codegen-cranelift-preview"]; - } + then pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.minimal) else pkgs.rust-bin.stable.latest.minimal; + rust_default = + if nightly + then pkgs.rust-bin.selectLatestNightlyWith (toolchain: toolchain.default) + else pkgs.rust-bin.stable.latest.default; - craneLib = (crane.mkLib pkgs).overrideToolchain rust_min; - - nativeBuildInputs = []; - buildInputs = []; - + craneLib = (crane.mkLib pkgs).overrideToolchain rust_minimal; craneBuild = craneLib.buildPackage { src = craneLib.cleanCargoSource ./.; doCheck = true; - inherit nativeBuildInputs buildInputs; }; + + treefmtEval = import ./treefmt.nix {inherit treefmt-nix pkgs;}; in { - checks.default = craneBuild; - packages = { - default = craneBuild; + packages.default = craneBuild; + + checks = { + inherit craneBuild; + formatting = treefmtEval.config.build.check self; }; + formatter = treefmtEval.config.build.wrapper; + devShells.default = pkgs.mkShell { packages = with pkgs; [ - alejandra - cocogitto - licensure - rust + rust_default cargo-edit - cargo-expand + + licensure ]; - inherit nativeBuildInputs buildInputs; }; }); } +# vim: ts=2 + diff --git a/scripts/renew_copyright_header.sh b/scripts/renew_copyright_header.sh new file mode 100755 index 0000000..4f424c3 --- /dev/null +++ b/scripts/renew_copyright_header.sh @@ -0,0 +1,92 @@ +#! /usr/bin/env sh + +# NOTE: This is the line length of the .licensure.yml header template **plus** the extra +# line after the template comment. +TEMPLATE_LINE_LENGTH=20 +LATEX_TEMPLATE_LINE_LENGTH=9 + +PROJECT_ROOT="$(git rev-parse --show-toplevel)" + +remove() { + extension="$1" + file="$2" + + # We need to differentiate, when removing the old copyright header, as some + # formatters do weird things to the file + case "$extension" in + # normal '#' comments (these are $TEMPLATE_LINE_LENGTH lines long) + "Makefile" | "toml" | "envrc" | "yml" | "gitignore" | "awk") + sed --in-place "1,${TEMPLATE_LINE_LENGTH}d" "$file" + ;; + # LaTeX files (or TeX files in general) have a different license, use the + # $LATEX_TEMPLATE_LINE_LENGTH variable. + "tex") + sed --in-place "1,${LATEX_TEMPLATE_LINE_LENGTH}d" "$file" + ;; + # normal '/* ... */' like comments (these are $TEMPLATE_LINE_LENGTH + 2 lines long) + "c" | "h" | "md" | "rs") + length="$((TEMPLATE_LINE_LENGTH + 2))" + sed --in-place "1,${length}d;" "$file" + ;; + # alejandra (the nix formatter) removes the blank line after the comment, + # thus only $TEMPLATE_LINE_LENGTH - 1 lines + "nix") + length="$((TEMPLATE_LINE_LENGTH - 1))" + sed --in-place "1,${length}d;" "$file" + ;; + # Shell needs a shebang on the first line, only after the first line can we + # remove the $TEMPLATE_LINE_LENGTH lines + "sh") + sed --in-place "2,${TEMPLATE_LINE_LENGTH}d;" "$file" + licensure --in-place "$file" + + TEMPLATE_LINE_LENGTH_NEW="$(($(yq --raw-output '.licenses | map(.template) | join("")' "$PROJECT_ROOT/.licensure.yml" | wc -l) + $(yq '.comments | last | .commenter.trailing_lines' "$PROJECT_ROOT/.licensure.yml")))" + + # delete the current shebang + to="$((TEMPLATE_LINE_LENGTH_NEW + 1))" + sed --in-place "${TEMPLATE_LINE_LENGTH_NEW},${to}d;" "$file" + + # add a new one + sed --in-place "1i#! /usr/bin/env sh" "$file" + ;; + *) + echo "File '$file' with extension '$extension' is not know yet, please add it!" + ;; + esac +} + +list() { + echo "$extension -> $file" +} + +if [ -f "$1" ]; then + file="$(realpath "$1")" + filename="$(basename -- "$file")" + extension="${filename##*.}" + filename="${filename%.*}" + + if [ -n "$DRY_RUN" ]; then + list "$extension" "$file" + else + remove "$extension" "$file" + fi +else + fd --type file --hidden . | while read -r file; do + if grep --quiet 'SPDX-License-Identifier' "$file"; then + filename="$(basename -- "$file")" + extension="${filename##*.}" + filename="${filename%.*}" + + if [ -n "$DRY_RUN" ]; then + list "$extension" "$file" + else + remove "$extension" "$file" + fi + fi + done + + if [ -z "$DRY_RUN" ]; then + licensure --in-place --project + nix fmt + fi +fi diff --git a/scripts/update_tests.sh b/scripts/update_tests.sh new file mode 100755 index 0000000..3d66e97 --- /dev/null +++ b/scripts/update_tests.sh @@ -0,0 +1,108 @@ +#!/usr/bin/env sh +# Copyright (C) 2023 The Trinitrix Project +# +# This file is part of the Trinitry crate for Trinitrix. +# +# Trinitry is free software: you can redistribute it and/or modify +# it under the terms of the Lesser GNU General Public License as +# published by the Free Software Foundation, either version 3 of +# the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# and the Lesser GNU General Public License along with this program. +# If not, see . + + +# This script generates ./src/tests.rs + +# Library {{{ +mktmp() { + ensure_tmp_dir + mktemp -p "$LIB_TEMP_DIR_FOR_SCRIPT" +} +ensure_tmp_dir() { + if ! [ -d "$LIB_TEMP_DIR_FOR_SCRIPT" ]; then + LIB_TEMP_DIR_FOR_SCRIPT="$(mktemp -d)" + export LIB_TEMP_DIR_FOR_SCRIPT + fi +} +remove_tmp_dir() { + # The test is here because some scripts still delete this on their own + if [ -d "$LIB_TEMP_DIR_FOR_SCRIPT" ]; then + rm -r "$LIB_TEMP_DIR_FOR_SCRIPT" + fi +} + +trap remove_tmp_dir EXIT +ensure_tmp_dir # ensure that the variable has been set, even in subshells +# }}} + +tmp="$(mktmp)" + +curl https://raw.githubusercontent.com/minimaxir/big-list-of-naughty-strings/master/blns.txt | + awk '!/^#/' | + awk '!/^[\s\t]*$/' | + awk -v s="'" '!/.*s.*/' | + + # This entry contains duplicated spaces, just ignore it + awk '!/Power/' | + iconv -c -f utf-8 -t ascii \ + >"$tmp" + +counter=0 + +cat <"$tmp2" + if rg '^[A-Za-z0-9_.-]+$' "$tmp2" -q; then + cat <?!+^@&*~|=,/\\ -]*$' "$tmp2" -q; then + cat < -* -* This file is part of the Trinitry crate for Trinitrix. -* -* Trinitry is free software: you can redistribute it and/or modify -* it under the terms of the Lesser GNU General Public License as -* published by the Free Software Foundation, either version 3 of -* the License, or (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* and the Lesser GNU General Public License along with this program. -* If not, see . -*/ - - // DO NOT EDIT // This file is automatically generated by the 'update.sh' file, with data from: // https://raw.githubusercontent.com/minimaxir/big-list-of-naughty-strings/master/blns.txt diff --git a/treefmt.nix b/treefmt.nix new file mode 100644 index 0000000..1cbab40 --- /dev/null +++ b/treefmt.nix @@ -0,0 +1,73 @@ +{ + treefmt-nix, + pkgs, +}: +treefmt-nix.lib.evalModule pkgs ( + {pkgs, ...}: { + # Used to find the project root + projectRootFile = "flake.nix"; + + programs = { + alejandra.enable = true; + rustfmt.enable = true; + clang-format.enable = true; + mdformat.enable = true; + shfmt = { + enable = true; + indent_size = 4; + }; + shellcheck.enable = true; + prettier = { + settings = { + arrowParens = "always"; + bracketSameLine = false; + bracketSpacing = true; + editorconfig = true; + embeddedLanguageFormatting = "auto"; + endOfLine = "lf"; + # experimentalTernaries = false; + htmlWhitespaceSensitivity = "css"; + insertPragma = false; + jsxSingleQuote = true; + printWidth = 80; + proseWrap = "always"; + quoteProps = "consistent"; + requirePragma = false; + semi = true; + singleAttributePerLine = true; + singleQuote = true; + trailingComma = "all"; + useTabs = false; + vueIndentScriptAndStyle = false; + + tabWidth = 4; + overrides = { + files = ["*.js"]; + options.tabwidth = 2; + }; + }; + }; + stylua.enable = true; + ruff = { + enable = true; + format = true; + }; + taplo.enable = true; + }; + + settings = { + global.excludes = [ + "CHANGELOG.md" + "NEWS.md" + ]; + formatter = { + clang-format = { + options = ["--style" "GNU"]; + }; + shfmt = { + includes = ["*.bash"]; + }; + }; + }; + } +) diff --git a/update.sh b/update.sh index 973f87e..b34dabf 100755 --- a/update.sh +++ b/update.sh @@ -1,106 +1,5 @@ #!/usr/bin/env sh -# Copyright (C) 2023 The Trinitrix Project -# -# This file is part of the Trinitry crate for Trinitrix. -# -# Trinitry is free software: you can redistribute it and/or modify -# it under the terms of the Lesser GNU General Public License as -# published by the Free Software Foundation, either version 3 of -# the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# and the Lesser GNU General Public License along with this program. -# If not, see . - -# Library {{{ -mktmp() { - ensure_tmp_dir - mktemp -p "$LIB_TEMP_DIR_FOR_SCRIPT" -} -ensure_tmp_dir() { - if ! [ -d "$LIB_TEMP_DIR_FOR_SCRIPT" ]; then - LIB_TEMP_DIR_FOR_SCRIPT="$(mktemp -d)" - export LIB_TEMP_DIR_FOR_SCRIPT - fi -} -remove_tmp_dir() { - # The test is here because some scripts still delete this on their own - if [ -d "$LIB_TEMP_DIR_FOR_SCRIPT" ]; then - rm -r "$LIB_TEMP_DIR_FOR_SCRIPT" - fi -} - -trap remove_tmp_dir EXIT -ensure_tmp_dir # ensure that the variable has been set, even in subshells -# }}} - -tmp="$(mktmp)" - -curl https://raw.githubusercontent.com/minimaxir/big-list-of-naughty-strings/master/blns.txt | - awk '!/^#/' | - awk '!/^[\s\t]*$/' | - awk -v s="'" '!/.*s.*/' | - - # This entry contains duplicated spaces, just ignore it - awk '!/Power/' | - iconv -c -f utf-8 -t ascii \ - >"$tmp" - -counter=0 - -cat <"$tmp2" - if rg '^[A-Za-z0-9_.-]+$' "$tmp2" -q; then - cat <?!+^@&*~|=,/\\ -]*$' "$tmp2" -q; then - cat <