build(treewide): Update tooling to be ready for the first release

This commit is contained in:
Benedikt Peetz 2024-05-03 16:40:06 +02:00
parent 6b0bb9c505
commit 4fc61b2398
15 changed files with 458 additions and 338 deletions

21
.envrc
View File

@ -1,25 +1,8 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
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

View File

@ -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 <email@example.com>. 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 <email@example.com>. 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 <https://www.gnu.org/licenses/>.
#
# 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"
end_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

7
Cargo.lock generated Normal file
View File

@ -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"

View File

@ -1,24 +1,6 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
[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" ]

View File

@ -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

10
README.md Normal file
View File

@ -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.

View File

@ -1,47 +1,25 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
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" }]

View File

@ -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"
}
}

111
flake.nix
View File

@ -1,32 +1,14 @@
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
{
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

View File

@ -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

108
scripts/update_tests.sh Executable file
View File

@ -0,0 +1,108 @@
#!/usr/bin/env sh
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
# 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 <<EOF
// 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
#[cfg(test)]
mod test {
use crate::Trinitry;
EOF
while read -r name; do
tmp2="$(mktmp)"
printf "%s" "$name" >"$tmp2"
if rg '^[A-Za-z0-9_.-]+$' "$tmp2" -q; then
cat <<EOF
#[test]
fn parse_$counter() {
let p = Trinitry::new(r##"$name"##).unwrap_or_else(|e| {
panic!("{}", e);
});
assert_eq!(r##"$name"##, &p.to_string());
}
EOF
elif rg '^[A-Za-z0-9_.-]+ [A-Za-z0-9_.(){}<>?!+^@&*~|=,/\\ -]*$' "$tmp2" -q; then
cat <<EOF
#[test]
fn parse_$counter() {
let p = Trinitry::new(r##"$name"##).unwrap_or_else(|e| {
panic!("{}", e);
});
assert_eq!(r##"$name"##, &p.to_string());
}
EOF
else
cat <<EOF
#[test]
fn parse_$counter() {
let p = Trinitry::new(r##"$name"##);
assert!(p.is_err());
}
EOF
fi
counter=$((counter + 1))
done <"$tmp"
cat <<EOF
}
EOF
# vim: ft=sh

View File

@ -1,24 +1,3 @@
/*
* Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
*
* 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 <https://www.gnu.org/licenses/>.
*/
// 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

73
treefmt.nix Normal file
View File

@ -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"];
};
};
};
}
)

107
update.sh
View File

@ -1,106 +1,5 @@
#!/usr/bin/env sh
# Copyright (C) 2023 The Trinitrix Project <soispha@vhack.eu, antifallobst@systemausfall.org>
#
# 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 <https://www.gnu.org/licenses/>.
# 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 <<EOF
// 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
#[cfg(test)]
mod test {
use crate::Trinitry;
EOF
while read -r name; do
tmp2="$(mktmp)"
printf "%s" "$name" >"$tmp2"
if rg '^[A-Za-z0-9_.-]+$' "$tmp2" -q; then
cat <<EOF
#[test]
fn parse_$counter() {
let p = Trinitry::new(r##"$name"##).unwrap_or_else(|e| {
panic!("{}", e);
});
assert_eq!(r##"$name"##, &p.to_string());
}
EOF
elif rg '^[A-Za-z0-9_.-]+ [A-Za-z0-9_.(){}<>?!+^@&*~|=,/\\ -]*$' "$tmp2" -q; then
cat <<EOF
#[test]
fn parse_$counter() {
let p = Trinitry::new(r##"$name"##).unwrap_or_else(|e| {
panic!("{}", e);
});
assert_eq!(r##"$name"##, &p.to_string());
}
EOF
else
cat <<EOF
#[test]
fn parse_$counter() {
let p = Trinitry::new(r##"$name"##);
assert!(p.is_err());
}
EOF
fi
counter=$((counter + 1))
done <"$tmp"
cat <<EOF
}
EOF
# vim: ft=sh
nix flake update
cargo update
[ "$1" = "upgrade" ] && cargo upgrade