Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
843b36c
Make kvInput lazy memo safe for concurrent evals
kamaln7 Oct 5, 2026
1d7eb94
Remove dead tests and document quoted-literal conversion
kamaln7 Oct 5, 2026
e12938e
Let field names win over lone hex pairs; fix hex docs
kamaln7 Oct 5, 2026
2644915
Add built-in fields for URL, IP, CIDR, and MAC values
kamaln7 Oct 5, 2026
115df8b
Require colons for bare hex; add x"..." hex literals
kamaln7 Oct 5, 2026
f1eb61a
Support i, m, and s regex flag suffixes
kamaln7 Oct 5, 2026
8d5dbd7
Reject regex forms that differ across engines
kamaln7 Oct 5, 2026
cc814a3
Remove EvaluatedRule leftovers and dead test code
kamaln7 Oct 5, 2026
b19b695
Report rulekit type names in comparison diagnostics
kamaln7 Oct 5, 2026
d0f034c
Treat quoted CIDRs and MACs consistently; test literals by behavior
kamaln7 Oct 5, 2026
c036cd2
Give single-quoted strings the same escapes as double-quoted
kamaln7 Oct 5, 2026
20d211b
Test function parsing through its printed form
kamaln7 Oct 5, 2026
48f7d9d
Parse leading-zero integers as decimal
kamaln7 Oct 5, 2026
3037c9f
Keep compact output single-line with comments; fix token kinds and fo…
kamaln7 Oct 5, 2026
8aba88a
README: fix v2 import path, contains/in/array wording, matches alias
kamaln7 Oct 5, 2026
5a3971d
Promote AST JSON format from the demo into the library
kamaln7 Oct 5, 2026
aef8501
Move language-neutral tests into JSON test vectors
kamaln7 Oct 5, 2026
ffaa73f
Compare bytes input and hex literals by value on either side
kamaln7 Oct 5, 2026
e216e03
Recognize MACs by explicit notation; compare strings with MACs
kamaln7 Oct 5, 2026
1c58e14
Define integer and float literal grammar explicitly
kamaln7 Oct 5, 2026
c4d3808
Inline float literal check
kamaln7 Oct 5, 2026
3924beb
Share one unquote for strings and bracket keys; accept \' in double q…
kamaln7 Oct 5, 2026
54e1c89
Lexer decodes UTF-8 when scanning field names
kamaln7 Oct 5, 2026
4410f01
Print negated contains, matches, and in as valid syntax
kamaln7 Oct 5, 2026
79a4e73
Keep lazy memo keys distinct for bracketed keys
kamaln7 Oct 5, 2026
250c36b
Read single-key fields without allocating; create lazy memo on demand
kamaln7 Oct 5, 2026
c91f1b1
Regex: reject duplicate flags and braces that are not repetitions
kamaln7 Oct 5, 2026
2f3271d
README and package doc: MAC type, regex delimiters and classes, bool …
kamaln7 Oct 5, 2026
7439c05
Revert "Lexer decodes UTF-8 when scanning field names"
kamaln7 Oct 5, 2026
bfef412
Remove v1 build leftovers, dead code, set package, and old plan docs
kamaln7 Oct 5, 2026
e8c9a30
Use Go 1.27.1; CI reads the version from go.mod
kamaln7 Oct 5, 2026
4a983b0
Demo decodes input with DecodeJSON
kamaln7 Oct 5, 2026
19ebe42
not binds looser than comparisons
kamaln7 Oct 5, 2026
dbac1c5
Machine-facing operator names are words (eq, ge, matches); text keeps…
kamaln7 Oct 5, 2026
95e972f
Quoted strings and bracket keys must be valid UTF-8
kamaln7 Oct 5, 2026
1eeeaf5
Decode URL query parameters on demand with form-urlencoded rules
kamaln7 Oct 5, 2026
310ded2
Quoted literals are always strings; stringable values compare by text…
kamaln7 Oct 5, 2026
5a433ec
Revert "Print negated contains, matches, and in as valid syntax"
kamaln7 Oct 5, 2026
f176409
url.path keeps percent escapes as written
kamaln7 Oct 5, 2026
f409118
Add not contains, not in, and not matches operators
kamaln7 Oct 5, 2026
b0c59fe
Represent not contains/in/matches as the base operator with a negated…
kamaln7 Oct 5, 2026
ffc4978
Define text forms for IP, CIDR, MAC, and URL values
kamaln7 Oct 5, 2026
dab9485
Arrays match any element for matches and text comparisons; mapped CID…
kamaln7 Oct 5, 2026
22795b0
Regex flags are ASCII letters; pin error columns after non-ASCII text
kamaln7 Oct 5, 2026
54f4061
String lists on the right of a comparison match any element
kamaln7 Oct 5, 2026
ed03977
Traces keep both operands of and/or and every array item and call arg…
kamaln7 Oct 5, 2026
6541e1c
Shared rules: bracket-key quoting, query UTF-8, JSON nesting limit 10…
kamaln7 Oct 5, 2026
3e9b5bc
DecodeJSON: shared input rules with the Rust implementation
kamaln7 Oct 5, 2026
8357732
URL values follow shared RFC 3986 rules
kamaln7 Oct 5, 2026
6387dbe
URL: box field values at parse time so field reads do not allocate
kamaln7 Oct 5, 2026
b0f901c
Regex dialect shared with the Rust implementation
kamaln7 Oct 5, 2026
2a95ef4
Docs: shared regex dialect, Unicode version and size-limit notes
kamaln7 Oct 5, 2026
425ffaf
Functions: typed Func API with struct arguments
kamaln7 Oct 5, 2026
1571c9b
Functions: clearer error for a *url.URL that is not a valid URL
kamaln7 Oct 5, 2026
dfa194c
Functions: named types over supported kinds as Func parameters and re…
kamaln7 Oct 5, 2026
b24c354
rust: Phase 0 design
kamaln7 Oct 5, 2026
f02f289
rust: crate skeleton and IP/CIDR/MAC values
kamaln7 Oct 5, 2026
26ebad4
rust: Unicode table generator for the regex dialect
kamaln7 Oct 5, 2026
ec8b899
rust: regex literals with Go regexp/syntax parity
kamaln7 Oct 5, 2026
5cb1fc6
rust: lexer, parser, AST arena, printers, and AST JSON
kamaln7 Oct 5, 2026
8fc48a6
rust: vector test runner; DESIGN updates for Phase 1
kamaln7 Oct 5, 2026
57d248f
rust: regex flags are ASCII letters (follow parser.go scanRegex)
kamaln7 Oct 5, 2026
954a842
rust: owned and borrowed values, text forms, URLs, value fields
kamaln7 Oct 5, 2026
b4e55b8
rust: Input trait, KvInput, and decode_json
kamaln7 Oct 5, 2026
6749742
rust: compiled rules, comparisons, evaluation, functions, and macros
kamaln7 Oct 5, 2026
5ab36ad
rust: run eval vectors; allocation and function tests
kamaln7 Oct 5, 2026
d5fabd6
rust: lazy values in KvInput
kamaln7 Oct 5, 2026
2406e48
rust: evaluation traces
kamaln7 Oct 5, 2026
f88038e
rust: check traces in the vector runner; untraced evals allocate nothing
kamaln7 Oct 5, 2026
7025006
rust: archive the hand-ported Go library code
kamaln7 Oct 5, 2026
0b3550f
rust: quote bracket keys and decode query values by the shared rules
kamaln7 Oct 5, 2026
1a8e54c
rust: trace every array item and call argument; keep both and/or traces
kamaln7 Oct 5, 2026
0e57f37
rust: IP and CIDR on std::net and ipnet
kamaln7 Oct 5, 2026
20d7437
rust: URLs on fluent-uri
kamaln7 Oct 5, 2026
0cbadf6
rust: decode_json on serde_json (raw_value) and the base64 crate
kamaln7 Oct 5, 2026
bb0ce65
rust: regex dialect on regex-syntax
kamaln7 Oct 5, 2026
79984c0
rust: DESIGN updates for crate-based IP, URL, regex, and JSON
kamaln7 Oct 5, 2026
37f6662
rust: reject percent escapes and IPvFuture literals in URL hosts
kamaln7 Oct 5, 2026
00e001c
rust: rewrite by node id; EvalResult value()/error() accessors
kamaln7 Oct 5, 2026
0b1f63c
rust: rustdoc for the public API and a README
kamaln7 Oct 5, 2026
4d51273
rust: benchmarks mirroring the Go benchmarks, Go-vs-Rust script, size…
kamaln7 Oct 5, 2026
f80980c
rust: traces borrow from the rule and input
kamaln7 Oct 5, 2026
b78cf80
rust: clippy
kamaln7 Oct 5, 2026
44dffe5
rust: allow the large error result in eval_items (keeps missing field…
kamaln7 Oct 5, 2026
9a2839c
rust: build trace expressions in one bottom-up pass
kamaln7 Oct 5, 2026
7f47249
rust: clippy in canonical_all test
kamaln7 Oct 5, 2026
06a0805
rust: API consistency with Go
kamaln7 Oct 5, 2026
fabb600
rust: keep untraced results small
kamaln7 Oct 5, 2026
52dd123
rust: typed custom functions with #[derive(rulekit::Args)]
kamaln7 Oct 5, 2026
c56201f
rust: function_borrowed_str bench; README and DESIGN for typed functions
kamaln7 Oct 5, 2026
c0c9d0e
rust: inline the typed-function call path (function bench 45.4 -> 41.…
kamaln7 Oct 5, 2026
c194d8f
rust: Function::new::<A, R>(FuncSchema { name, doc }, closure)
kamaln7 Oct 5, 2026
f0ca4e6
rust: install from the v2 branch
kamaln7 Oct 5, 2026
ef4eff9
CI: Rust job (fmt, clippy, tests); run on pushes to v2
kamaln7 Oct 5, 2026
2c0f4aa
rust: read plain values without converting them up front
kamaln7 Oct 5, 2026
f68e982
rust: drop path-in and the erased-list unsafe
kamaln7 Oct 5, 2026
b0b911b
rust: #[derive(Input)] for named-field structs
kamaln7 Oct 5, 2026
07105e2
rust: kv! and lazy inputs
kamaln7 Oct 5, 2026
b8a4a38
rust: url::Url and http::Uri as input values
kamaln7 Oct 5, 2026
6c6d53d
rust: document plain-type input and bench a derived struct
kamaln7 Oct 5, 2026
97c5c12
rust: cargo fmt
kamaln7 Oct 5, 2026
12250d8
rust: memoize lazy() like Go
kamaln7 Oct 5, 2026
f1c8db6
rust: match url::Url and http::Uri to rulekit URLs
kamaln7 Oct 5, 2026
89a8099
rust: read marked byte fields as byte strings
kamaln7 Oct 5, 2026
02f8180
rust: remove #[rulekit(skip)]
kamaln7 Oct 5, 2026
a352862
rust: #[rulekit(skip)] on derive(Input) fields
kamaln7 Oct 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 30 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: ci

on:
push:
branches: ["main"]
branches: ["main", "v2"]
pull_request:

jobs:
Expand All @@ -14,7 +14,35 @@ jobs:
- name: Set up Go
uses: actions/setup-go@v6
with:
go-version: "1.26.1"
go-version-file: go.mod

- name: Test
run: go test -v ./...

rust:
runs-on: ubuntu-latest
defaults:
run:
working-directory: rust
steps:
- uses: actions/checkout@v4

# Pinned: the trybuild compile-fail tests compare compiler messages.
- name: Set up Rust
uses: dtolnay/rust-toolchain@master
with:
toolchain: 1.97.1
components: clippy, rustfmt

- uses: Swatinem/rust-cache@v2
with:
workspaces: rust

- name: Format
run: cargo fmt --all --check

- name: Clippy
run: cargo clippy --workspace --all-targets --locked -- -D warnings

- name: Test
run: cargo test --workspace --locked
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,3 +1 @@
y.output
*.bak
.DS_Store
Loading
Loading